大数据处理与应用(Hive技术)(0/100分)
1.本地开发工具连接Hadoop集群
1.本次环境版本为Hadoop2.7.7,对应eclips插件存放于云主机master:/usr/package277/中。
2.本机映射名为hadoop000,云主机Hadoop/Hive的hosts文件中IP需要修改为内网IP,需要修改为实际内网IP(服务器地址有内外网之分),本地eclipse所在主机需要使用外网IP设置映射;
Linux/Mac系统下文件地址:/etc/hosts
Windows系统下文件地址:C:\Windows\System32\drivers\etc\hosts
2.云主机搭建的Hadoop集群,集群之间通过内网通信,本地eclipse开发工具需要使用域名进行访问。
Hadoop配置文件是以内网IP作为机器间通信的IP。在这种情况下,我们能够访问到namenode机器,namenode会给我们数据所在机器的IP地址供我们访问数据传输服务,但是当写数据的时候,NameNode和DataNode是通过内网通信的,返回的是datanode内网的IP,我们无法根据该IP访问datanode服务器。将默认的通过IP访问,改为通过域名方式访问。
// 使用hdfs的fs功能,客户端就会访问core-site.xml配置文件
// 设置客户端访问datanode使用hostname来进行访问
conf.set("dfs.client.use.datanode.hostname", "true");
// 设置core-site.xml中的属性fs.defaultFS和属性值,注意主机名必须和设置的hosts主机名一致
conf.set("fs.defaultFS","hdfs://hadoop000:9000");
2.Hive安全配置 (20 / 20分)
为了大数据集群稳定性,类似非全等join(非inner join)是禁止的,禁用了SemanticException笛卡尔产品。
FAILED: SemanticException Cartesian products are disabled for safety reasons. If you know what you are doing, please sethive.strict.checks.cartesian.product to false and that hive.mapred.mode is not set to ‘strict’ to proceed. Note that if you may get errors or incorrect results if you make a mistake while using some of the unsafe features.
hive> set hive.strict.checks.cartesian.product;
# 首先查看hive.strict.checks.cartesian.product
hive> set hive.strict.checks.cartesian.product=false;
# 设置hive.strict.checks.cartesian.product为false
本次环境为单节点伪集群环境,环境中已经安装JDK1.8、Hadoop2.7.7、Mysql5.7、hive2.3.4。---1.环境中已经安装/root/software/hadoop-2.7.7,格式化HDFS,开启集群,查看集群状态。(HDFS端口为9000,其他端口默认)
# 对文件系统进行格式化
hadoop namenode -format
# 启动Hadoop集群查看各节点服务
start-all.sh
> yes2.环境中已经安装/root/software/apache-hive-2.3.4-bin,需要开启mysql服务,初始化数据库,即可开启Hive客户端。# 开启mysql服务
systemctl status mysqld
systemctl start mysqld# 初始化数据库,启动metastore服务
schematool -dbType mysql -initSchema
hive --service metastore &# 进入hive,创建hive数据库
hive
> create database hive;本步骤用于开启集群环境,用于后续数据分析(Hadoop Mapreduce/Hive)使用。
区域热门商品分析 (80 / 80分)
项目背景
本项目针对电商网站运营,对每个领域用户关心的商品进行统计分析,支持用户决策。分析各区域对产品的不同需求,进行差异化研究,例如A地区用户喜欢电子,B地区用户喜欢汽车。
需求分析
1.热门商品即通过用户对商品的点击量来衡量商品热度。
2.如何获取区域信息数据:
通过用户点击日志,获取访问IP,进而获取区域信息。
通过数据库中的订单关联用户表,获取用户的地域信息
数据说明
product(商品)表:(/root/shop/product.txt)
列名 | product_id | product_name | marque | barcode | price | brand_id | market_price | stock | status |
---|---|---|---|---|---|---|---|---|---|
描述 | 商品号 | 商品名称 | 商品型号 | 仓库条码 | 商品价格 | 商品品牌 | 市场价格 | 库存 | 状态 |
数据类型 | string | string | string | string | double | string | double | int | int |
补充说明:
status: 下架-1,上架0,预售1
area(地区信息)表:(/root/shop/area.txt)
列名 | area_id | area_name |
---|---|---|
描述 | 地区编号 | 地区名称 |
数据类型 | string | string |
user_click(用户点击信息)表:(/root/shop/user_click.txt)
列名 | user_id | user_ip | url | click_time | action_type | area_id |
---|---|---|---|---|---|---|
描述 | 用户ID | 用户IP | 用户点击 | URL | 用户点击时间 | 动作名称 |
数据类型 | string | string | string | string | string | string |
补充说明:
action_type: 1 收藏,2 加购物车,3 购买
area_id:这里的地区信息已经通过IP地址(user_ip)进行解析
clicklog(用户点击商品日志表)表:
列名 user_id user_ip product_id click_time action_type area_id
描述 用户ID 用户IP URL解析对应商品ID 用户点击时间 动作名称 地区ID
数据类型 string string string string string string
补充说明:
根据user_click中用户点击URL进行解析,得到product_id
示例:URL数据`http://mystore.jsp/?productid=1`中product_id为1
area_hot_product(区域热门商品)表:
列名 area_id area_name product_id product_name pv
描述 地区ID 地区名称 商品ID 商品名称 访问量
数据类型 string string string string BIGINT
# 1. 进入Hive客户端,创建shop数据库(前提开启Hadoop集群)
create database shop;
# 创建商品表product,并上传本地数据至表内
use shop;CREATE TABLE product(product_id string,product_name string,marque string,barcode string,price double,brand_id string,market_price double,stock int,status int
)row format delimited fields terminated by ',';
# 上传本地数据至表内
LOAD DATA LOCAL INPATH '/root/shop/product.txt' INTO TABLE product;# 3.创建地区表area,并上传本地数据至表内
CREATE TABLE area(area_id string,area_name string
)row format delimited fields terminated by ',';
# 上传本地数据至表内
LOAD DATA LOCAL INPATH '/root/shop/area.txt' INTO TABLE area;# 4.创建用户点击信息user_click,并上传本地数据至表内
CREATE TABLE user_click(user_id string,user_ip string,url string,click_time string,action_type string,area_id string
)row format delimited fields terminated by ',';
# 上传本地数据至表内
LOAD DATA LOCAL INPATH '/root/shop/user_click.txt' INTO TABLE user_click;# 5.创建用户点击商品日志表clicklog,解析user_click用户点击信息表中的product_id
CREATE TABLE clicklog(user_id string,user_ip string,product_id string,click_time string,action_type string,area_id string
)row format delimited fields terminated by ',';# 解析user_click用户点击信息表中的product_id
SELECT parse_url(concat(url),'QUERY','productid') as product_id FROM user_click;# 将查询结果 插入clicklog
INSERT INTO TABLE clicklog
SELECT user_id, user_ip, parse_url(concat(url),'QUERY','productid') as product_id, click_time,action_type,area_id FROM user_click;# 6.创建结果分析区域热门商品表area_hot_product,统计各地区热门商品访问量pvCREATE TABLE area_hot_product(area_id string,area_name string,product_id string,product_name string,pv BIGINT
)row format delimited fields terminated by ',';# 将查询结果 插入clicklog
INSERT INTO TABLE area_hot_product
SELECT collect_set(c.area_id)[0] as area_id, collect_set(a.area_name)[0] as area_name, collect_set(c.product_id)[0] as product_id, collect_set(p.product_name)[0] as product_name, COUNT(c.user_id) as pv
FROM clicklog c
JOIN area a ON c.area_id = a.area_id
JOIN product p ON c.product_id = p.product_id
GROUP BY a.area_id, p.product_id;# 7.查询表area_hot_product全部数据,结果写入本地目录/root/data/shop/area_hot_product
INSERT OVERWRITE LOCAL DIRECTORY '/root/data/shop/area_hot_product'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT * FROM area_hot_product;