商务智能方法与应用第二章实验手册

文章导航

«返回课程汇总页面

【实验手册版本】

当前版本号v20200330

版本修改说明
v20200330增加了 Hive 优化参数
v20200325第10步第(4)小题增加了提示
v20200323更正实验第10步第(3)小题错误
v20200228初始化版本

实验2.1:Hive 数据仓库的建立和分析

【实验名称】

Hive 数据仓库的建立

【实验目的】

【实验原理】

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

Hive 是一个构建于 Hadoop 顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。某种程度上可以将 Hive 看作是用户编程接口。Hive 本身不存储和处理数据,依赖分布式文件系统 HDFS 存储数据,依赖分布式并行计算模型MapReduce 处理数据。Hive 定义了简单的类似 SQL 的查询语言——HiveQL。用户可以通过编写的 HiveQL 语句运行 MapReduce 任务,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。Hive 是一个可以有效、合理、直观的数据分析工具。

【实验环境】

提示:可以使用 Spark 课程的虚拟机镜像完成。或者使用之前 Hadoop课程的虚拟机镜像

【实验资源】

实验报告模板下载

https://pan.baidu.com/s/1qqhcPcQotylS3PNP4f-edg#提取码vidt

实验数据

https://pan.baidu.com/s/1leU7OjPBmX0h_QV3N8ZeRw#提取码u4sq

【Hive优化参数配置和解决常见问题】

  1. 解决Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient问题。

这通常是由于 Hive 的 MetaStore Server校验 Schema 出错导致的。只需要关闭校验选项即可。找到Hive安装目录/conf/hive-site.xml,增加以下选项配置。

<property>
     <name>hive.metastore.schema.verification</name>
     <value>false</value>
</property>
  1. 优化 Hive 执行卡顿的参数配置。启动 Hive 以后,可以在 Hive 终端执行以下参数设置,优化运行效率。
#100%执行完 map 再执行 reduce,避免运行 map 同时又运行 reduce,占用太多资源。
hive>set mapreduce.job.reduce.slowstart.completedmaps=1.0;

# 设置 mapreduce 执行内存为 2048MB,可视虚拟机资源情况自行调整。
hive>set mapreduce.map.memory.mb=2048;

# 设置 mapreduce CPU 执行核数为2,可视虚拟机资源情况自行调整。
hive>set mapreduce.map.cpu.vcores=2;
  1. 使用 Hive 日志进行错误诊断。

Hive 的日志默认是在/tmp/{用户名}/hive.log。如果是使用Node0虚拟机镜像的Hadoop用户,则是在/tmp/hadoop/hive.log

如果需要调整 hive 的日志路径,可以在Hive安装目录/conf/下修改日志配置。

cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

vim hive-exec-log4j2.properties

修改property.hive.log.dir选项

#property.hive.log.dir = ${sys:java.io.tmpdir}/${sys:user.name}
property.hive.log.dir = /opt/hive/logs

【实验步骤】

实验须知:本实验默认使用 Spark 课程虚拟机镜像完成,可能个别命令与你环境有区别,请注意识别。

  1. 启动 Hadoop,如果使用其他镜像可以使用start-all.sh启动。
start-hdp.sh
  1. 检查 Hadoop 是否正常启动,必须具有以下进程。
DataNode
ResourceManager
Jps
NodeManager
NameNode
SecondaryNameNode
  1. 从上文实验资源链接下载实验数据文件user_table.csv,上传到/home/hadoop目录下。

  2. user_table.csv上传到HDFS目录/biexp/001,请注意替换001为你的学号最后三位。(关键步骤,如果没有此步骤实验报告不得分)

hdfs dfs -mkdir -p /biexp/001
hdfs dfs -put /home/hadoop/user_table.csv /biexp/001
  1. 查看是否成功上传文件
hadoop fs -ls /biexp/001
  1. 启动 Hive。
hive
  1. 在 Hive 命令行终端输入以下命令,创建数据库。请注意替换001为你的学号最后三位。
create database db001;
use db001;
  1. 创建外部表user001并导入数据。请注意替换以下语句中001为你的学号最后三位。
create external table db001.user001 (id INT, uid string, item_id string, behavior_type INT, user_geohash string, item_category string, visit_date DATE,province string) COMMENT 'Welcome to xmu dblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/biexp/001/';

表列说明:

注释
id自增ID
uid用户ID
item_id商品ID
behavior_type操作类型;1表示查看浏览;2表示收藏;3表示加购物车;4表示购买
user_geohash用户地理位置哈希值
item_category商品目录
visit_date用户操作日期
province用户所在省份
  1. 查询user表,查看是否有数据。
select * from db001.user001 limit 10;
  1. 完成以下 HiveQL 语句。

(1)查询所有用户加购物车的次数。

#结果
8560

(2)查询江浙沪(zhejiang,jiangsu,shanghai)用户购买物品的次数总和。

#结果
305

(3)查询全部省份用户浏览次数,按次数从高到低排序。

#结果
shanxi	16490
xinjiang	8525
tianjin	8490
zhejiang	8488
guangxi	8456
guangdong	8451
shanghai	8442
beijing	8431
hebei	8424
xianggang	8391
anhui	8390
hainan	8389
helongjiang	8379
qinghai	8370
fujian	8368
aomen	8354
neimenggu	8351
hunan	8337
gansu	8335
jilin	8327
xizang	8323
guizhou	8319
henan	8311
shandong	8309
liaoning	8296
yunnan	8272
jiangsu	8261
chongqing	8258
ningxia	8246
taiwan	8241
hubei	8192
jiangxi	8152
sichuan	8148

(4)查询用户收藏过并且购买了的商品的数量。

#结果
427

提示1:可以使用user001自己和自己连接。

提示2:注意这里前提是同一个用户,收藏并且购买。

提示3:用户收藏且购买的相同商品数量有可能有多个。例如用户(uid=103234309)收藏且购买的商品(item_id=395194106)有3个。

(5)查询广东(guangdong)购物数量最多的前10位用户的ID和购物数量,按数量从高到低排序。

102612580	5
101970481	5
101922121	4
103995979	3
102616570	3
101982646	3
10095384	3