hadoop hdfs的API调用,在mall商城代码中添加api的调用

在网上下载了现成的商城代码的源码

本次旨在熟悉hdfs的api调用,不关注前后端代码的编写,所以直接下载现成的代码,代码下载地址。我下载的是前后端在一起的代码,这样测试起来方便

GitHub - newbee-ltd/newbee-mall: 🔥 🎉newbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Pinia+Vant 4) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign+ELK)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。

我选择的第一个 下载的,明显是前后端没有隔离的版本,而且最简单的,没有加微服务分布式等的

本机配置下hadoop的环境变量等的

否则idea连接hdfs的时候会报错,虽然报错不影响数据存储,但是还是配置下比较好。

官网下载地址:http://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz

我本机win系统没有解压tar的工具,所以我在虚拟机上将hadoop-2.9.2.tar.gz的包解压缩后,用zip命令压缩了一遍下载到了win的本机

将压缩包解压到/home/admin目录下: tar -zxvf hadoop-2.9.2.tar.gz -C  /home/admin

到目录下打包:

cd /home/admin

zip -r hadoop-2.9.2-all.zip hadoop-2.9.2

如果没有zip的命令则安装一下

yum -y install zip*

下载到win本机,解压然后配置环境变量

不要放到有空格的目录文件夹下,

例如Program Files,我一开始放到这个目录下,配置完环境变量之后,读取不到hadoop的目录,报错D:Program 

下载 windows 环境下所需的winutils.exe文件
hadoop主要基于linux编写,这个winutil.exe主要用于模拟linux下的目录环境。
因此hadoop放在windows下运行的时候,需要这个辅助程序才能运行。

将winutils.exe放到你解压的 hadoop-2.9.2.tar.gz 的bin目录下

下载地址:https://raw.githubusercontent.com/cdarlint/winutils/master/hadoop-2.9.2/bin/winutils.exe

其他版本的winutils.exe下载:https://github.com/cdarlint/winutils

修改D:\hadoop-2.9.2\etc\hadoop\hadoop-env.cmd

配置成功,重启idea即可重新加载hadoop的配置了

下载下来已有的项目源代码之后,我们先将数据库的表导入准备好

先启动自己的虚拟机,在虚拟机上启动mysql

service mysqld start

自己本机的虚拟机记得关机之前将mysql退出,否则下次启动可能会出问题

service mysqld stop

用mysql的客户端连接

在mysql客户端运行商城的sql语句建表以及导入数据

D:\Program Files\IntelliJ IDEA 2023.2.2\workplace\newbee-mall-master\src\main\resources

打开后,添加两行代码,创建数据库以及使用当前创建的数据库

然后运行所有语句

表创建完成

更改mysql连接为自己安装了mysql虚拟机的ip地址,以及用户名和密码都要更改成自己的

虚拟机的安装、mysql在虚拟机上的安装、hadoop分布式安装请参考我前面的几篇文章

启动项目查看项目是否能够正常点页面等的,自己验证下注册登录等的是否能够正常使用,我的可以正常使用

到自己的虚拟机上启动hdfs,一定要记得启动,否则本机项目启动连接会报错,我的hadoop部署的是分布式集群,一台namenode,两台datanode,所以三台会都启动起来

添加hdfs配置以及dao层连接代码

package ltd.newbee.mall.dao;import ltd.newbee.mall.util.SystemUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.springframework.stereotype.Component;import java.net.URI;@Component
public class HdfsDao {static Configuration configuration;static FileSystem fileSystem;static {try {configuration = new Configuration();configuration.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");configuration.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");fileSystem = FileSystem.get(URI.create(SystemUtil.getProperties().getProperty("spring.hdfs.url")), configuration, "admin");} catch (Exception e) {throw new RuntimeException(e);}}public static Configuration getConfiguration() {return configuration;}public static FileSystem getFileSystem() {return fileSystem;}
}
package ltd.newbee.mall.util;import org.apache.logging.log4j.util.PropertiesUtil;import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;/*** @author 13* @qq交流群 796794009* @email 2449207463@qq.com* @link https://github.com/newbee-ltd*/
public class SystemUtil {static Properties properties;private SystemUtil() {}static {properties = new Properties();try {properties.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("application.properties"));} catch (IOException e) {throw new RuntimeException(e);}}public static Properties getProperties() {return properties;}public static String getToday(){SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");return dateFormat.format(new Date());}
}

 添加HdfsService,service添加完成后,记得自测一下,看下hdfs是否连接成功

package ltd.newbee.mall.service;public interface HdfsService {/*** json数据到hdfs的业务*/void jsonToHDFS(String line);
}
package ltd.newbee.mall.service.impl;import ltd.newbee.mall.dao.HdfsDao;
import ltd.newbee.mall.service.HdfsService;
import ltd.newbee.mall.util.SystemUtil;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.IOException;import static ltd.newbee.mall.util.SystemUtil.getToday;@Service
public class HdfsServiceImpl implements HdfsService {@Autowiredprivate HdfsDao hdfsDao;@Overridepublic void jsonToHDFS(String line) {FileSystem fileSystem = hdfsDao.getFileSystem();FSDataOutputStream os = null;try {String path = SystemUtil.getProperties().getProperty("spring.hdfs.shoppingLog") + "/" + getToday() + ".log";if (fileSystem.exists(new Path(path))) {os = fileSystem.append(new Path(path));} else {os = fileSystem.create(new Path(path));}IOUtils.copyBytes(org.apache.commons.io.IOUtils.toInputStream(line + "\r\n"), os, HdfsDao.getConfiguration(), true);} catch (IOException e) {throw new RuntimeException(e);}}}

 

添加hdfs entity

package ltd.newbee.mall.entity;public class HdfsLog {private Long userId;private String nickName;private String loginName;private String address;private Long goodsId;private String goodsName;private String goodsIntro;private Long goodsCategoryId;private Integer originalPrice;private Integer sellingPrice;private Integer stockNum;private String tag;private Byte goodsSellStatus;public HdfsLog(){}public HdfsLog(Long userId, String nickName, String loginName, String address, Long goodsId, String goodsName, String goodsIntro, Long goodsCategoryId, Integer originalPrice, Integer sellingPrice, Integer stockNum, String tag, Byte goodsSellStatus) {this.userId = userId;this.nickName = nickName;this.loginName = loginName;this.address = address;this.goodsId = goodsId;this.goodsName = goodsName;this.goodsIntro = goodsIntro;this.goodsCategoryId = goodsCategoryId;this.originalPrice = originalPrice;this.sellingPrice = sellingPrice;this.stockNum = stockNum;this.tag = tag;this.goodsSellStatus = goodsSellStatus;}public Long getUserId() {return userId;}public void setUserId(Long userId) {this.userId = userId;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Long getGoodsId() {return goodsId;}public void setGoodsId(Long goodsId) {this.goodsId = goodsId;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public String getGoodsIntro() {return goodsIntro;}public void setGoodsIntro(String goodsIntro) {this.goodsIntro = goodsIntro;}public Long getGoodsCategoryId() {return goodsCategoryId;}public void setGoodsCategoryId(Long goodsCategoryId) {this.goodsCategoryId = goodsCategoryId;}public Integer getOriginalPrice() {return originalPrice;}public void setOriginalPrice(Integer originalPrice) {this.originalPrice = originalPrice;}public Integer getSellingPrice() {return sellingPrice;}public void setSellingPrice(Integer sellingPrice) {this.sellingPrice = sellingPrice;}public Integer getStockNum() {return stockNum;}public void setStockNum(Integer stockNum) {this.stockNum = stockNum;}public String getTag() {return tag;}public void setTag(String tag) {this.tag = tag;}public Byte getGoodsSellStatus() {return goodsSellStatus;}public void setGoodsSellStatus(Byte goodsSellStatus) {this.goodsSellStatus = goodsSellStatus;}}

controller中添加hdfs的调用,我添加到了购物车添加成功的接口中

ShoppingCartController
 @PostMapping("/shop-cart")@ResponseBodypublic Result saveNewBeeMallShoppingCartItem(@RequestBody NewBeeMallShoppingCartItem newBeeMallShoppingCartItem,HttpSession httpSession) {NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);newBeeMallShoppingCartItem.setUserId(user.getUserId());String saveResult = newBeeMallShoppingCartService.saveNewBeeMallCartItem(newBeeMallShoppingCartItem);//添加成功if (ServiceResultEnum.SUCCESS.getResult().equals(saveResult)) {NewBeeMallGoods newBeeMallGoods = newBeeMallGoodsService.getNewBeeMallGoodsById(newBeeMallShoppingCartItem.getGoodsId());//添加hdfs日志信息HdfsLog hdfsLog = new HdfsLog();BeanUtils.copyProperties(user,hdfsLog);hdfsLog.setGoodsId(newBeeMallGoods.getGoodsId());hdfsLog.setGoodsIntro(newBeeMallGoods.getGoodsIntro());hdfsLog.setGoodsName(newBeeMallGoods.getGoodsName());hdfsLog.setGoodsCategoryId(newBeeMallGoods.getGoodsCategoryId());hdfsLog.setGoodsSellStatus(newBeeMallGoods.getGoodsSellStatus());Gson gson =  new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss").setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create();hdfsService.jsonToHDFS(gson.toJson(hdfsLog));return ResultGenerator.genSuccessResult();}//添加失败return ResultGenerator.genFailResult(saveResult);}

 启动项目进行测试,点击一个商品,添加到购物车添加多个商品看下hadoop日志文件

http://192.168.137.16:50070/explorer.html#/logs/shoppingLog

查看一下是不是每次点击一次添加购物车,日志中都会追加一条

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seata入门系列【18】Seata集成Mybatis-Plus多数据源

1 前言 在使用单个服务,多数据源时,也存在分布式事务问题。 当单体系统需要访问多个数据库(实例)时就会产生分布式事务。 比如:用户信 息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息&am…

驱动开发11-2 编写SPI驱动程序-点亮数码管

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/spi/spi.h>int m74hc595_probe(struct spi_device *spi) {printk("%s:%d\n",__FILE__,__LINE__);char buf[]{0XF,0X6D};spi_write(spi,buf,sizeof(buf));return 0; …

【SpringMVC篇】5种类型参数传递json数据传参

&#x1f38a;专栏【SpringMVC】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;普通参数&#x1f33a;POJO参数&#x1f33a;嵌套…

nacos 常见问题整理包含容器环境

文章目录 0. nacos客户端日志文件位置最常见的问题1. 容器环境端口开放不够导致的问题原理解析 2.服务端启用了鉴权客户端常见错误信息如下服务端报错信息如下 其他一些问题0. nacos高版本服务端是否支持旧的客户端&#xff1f;1. Error code:503,msg:server is DOWN now, plea…

【UE5】如何在UE5.1中创建级联粒子系统

1. 可以先新建一个actor蓝图&#xff0c;然后在该蓝图中添加一个“Cascade Particle System Component” 2. 在右侧的细节面板中&#xff0c;点击“模板”一项中的下拉框&#xff0c;然后点击“Cascade粒子系统&#xff08;旧版&#xff09;” 然后就可以选择在哪个路径下创建级…

前端Vue框架系列—— 学习笔记总结Day04

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

Java NIO为何导致堆外内存OOM了?

Java NIO为何导致堆外内存OOM了&#xff1f; 描述 某天报警&#xff1a;某台机器部署的一个服务突然无法访问。谨记第一反应登录机器查看日志&#xff0c;因为服务挂掉&#xff0c;很可能因OOM。这个时候在机器的日志中发现了如下的一些信息&#xff1a; nio handle failed j…

Leetcode—485.最大连续1的个数【中等】明天修改

2023每日刷题&#xff08;十五&#xff09; Leetcode—2.两数相加 迭代法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l…

Python使用got库如何写一个爬虫代码?

got库是一个Python的HTTP库&#xff0c;可以用于爬取网页数据。它提供了简单易用的API&#xff0c;支持异步请求和爬虫IP设置等功能。使用got库进行爬虫开发&#xff0c;可以快速地获取所需数据。下面是使用got库进行爬虫的基本步骤&#xff1a; 1、安装got库&#xff1a;可以使…

ruoyi框架前端修改message消失时间

修改教程 打开modal.js文件&#xff0c;找到Message.success&#xff0c;然后把参数设置进去就行。单位是10001秒。 // 可以设置的参数如下export interface ElMessageOptions {/** Message text */message: string | VNode/** Message type */type?: MessageType/** Custom …

4.5 Object类

思维导图&#xff1a; 4.5 Object类笔记总结 1. 定义和重要性 Java提供的Object类是所有Java类的根类。直接或间接&#xff0c;所有的Java类都继承自Object类。它被称为超类。 2. 默认行为 当创建一个新的类且没有显式地使用extends关键字指定一个父类时&#xff0c;该类默认…

Microsoft Edge不能工作了,可能原因不少,那么如何修复呢

Microsoft Edge打不开或不能加载网页是用户在Windows 10、Android、Mac和iOS设备上的网络浏览器上遇到的许多错误之一。其他Microsoft Edge问题可能包括浏览器窗口和选项卡冻结、网站崩溃、互联网连接错误消息以及丢失Microsoft Edge书签、收藏夹、密码和收藏。 Microsoft Edg…

金蝶云星空自定义校验器和使用

文章目录 金蝶云星空自定义校验器和使用 金蝶云星空自定义校验器和使用 1、创建类&#xff0c;并继承抽象接口 using Kingdee.BOS.Core; using Kingdee.BOS.Core.Validation; using System;namespace mm.K3.SCM.App.Service.PlugIn.SC.Validator {public class AfterOrderChe…

跨境电商大作战:2023黑色星期五准备指南

黑色星期五&#xff0c;作为全球购物狂欢的象征&#xff0c;已经成为了电商业务的一年一度的重要节点。尤其对于跨境电商来说&#xff0c;这一天意味着巨大的商机和挑战。为了在这个竞争激烈的时刻脱颖而出&#xff0c;跨境电商必须做好充分的准备。Nox聚星在这里给大家分享几个…

最新ai系统ChatGPT程序源码+详细搭建教程+以图生图+Dall-E2绘画+支持GPT4+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

Q-CTRL首次在量子市场获得ISO 27001国际标准认证

​&#xff08;图片来源&#xff1a;网络&#xff09; 国际公认的ISO 27001标准概述了信息安全管理系统&#xff08;ISMS&#xff09;的实施&#xff0c;并表现了管理风险的能力&#xff0c;包括与客户数据安全相关的风险。总部位于悉尼的Q-CTRL是第一家获得ISO 27001认证的独…

学生成绩这样分发

作为一名老师&#xff0c;经常被问到这样的问题&#xff1a;“老师&#xff0c;我的成绩什么时候发&#xff1f;”、“老师&#xff0c;我的成绩出来了吗&#xff1f;”等等。倍感烦恼&#xff0c;需要花费时间来回答这些问题&#xff0c;而且有时候学生还会因为成绩不佳而抱怨…

C++对象的内存分布和虚函数表

Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全) c中一个类中无非有四种成员&#xff1a;静态数据成员和非静态数据成员&#xff0c;静态函数和非静态函数。 1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来…

OpenSSL生成CA证书

基本概念 证书类别 根证书&#xff1a;生成服务端证书&#xff0c;客户端证书的基础。自签名。服务端证书&#xff1a;由根证书签发。配置在服务器上。客户端证书&#xff1a;由根证书签发。配置在浏览器、移动APP等客户端上。 认证方式 单向认证&#xff08;Client鉴权Serv…

jsoncpp fatal error C1083: 无法打开编译器生成的文件

使用jsoncpp库的时候&#xff0c;在Debug模式下正常&#xff0c;但是release却报错&#xff0c;开始以为是开发项目设置问题&#xff0c;于是网络搜索&#xff0c;发现是jsoncpp的编译选项问题。 修改生成静态库文件的工程的属性&#xff1a;路径为&#xff1a;菜单&#xff0…