【实验手册版本】
当前版本号v20200330
版本 | 修改说明 |
---|---|
v20200330 | 增加了 Hive 优化参数 |
v20200325 | 第10步第(4)小题增加了提示 |
v20200323 | 更正实验第10步第(3)小题错误 |
v20200228 | 初始化版本 |
实验2.1:Hive 数据仓库的建立和分析
【实验名称】
Hive 数据仓库的建立
【实验目的】
- 1.熟悉 Linux、MySQL、Hive、HDFS 等系统和软件的安装和使用。
- 2.了解建立数据仓库的基本流程。
- 3.熟悉数据预处理方法。
【实验原理】
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
Hive 是一个构建于 Hadoop 顶层的数据仓库工具,支持大规模数据存储、分析,具有良好的可扩展性。某种程度上可以将 Hive 看作是用户编程接口。Hive 本身不存储和处理数据,依赖分布式文件系统 HDFS 存储数据,依赖分布式并行计算模型MapReduce 处理数据。Hive 定义了简单的类似 SQL 的查询语言——HiveQL。用户可以通过编写的 HiveQL 语句运行 MapReduce 任务,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到 Hadoop 平台上。Hive 是一个可以有效、合理、直观的数据分析工具。
【实验环境】
- 1.Ubuntu 16.04 操作系统;
- 2.Hadoop;
- 3.Hive。
【实验资源】
实验报告模板下载
https://pan.baidu.com/s/1qqhcPcQotylS3PNP4f-edg#提取码vidt
实验数据
https://pan.baidu.com/s/1leU7OjPBmX0h_QV3N8ZeRw#提取码u4sq
【Hive优化参数配置和解决常见问题】
- 解决
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>
- 优化 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;
- 使用 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 课程虚拟机镜像完成,可能个别命令与你环境有区别,请注意识别。
- 启动 Hadoop,如果使用其他镜像可以使用
start-all.sh
启动。
start-hdp.sh
- 检查 Hadoop 是否正常启动,必须具有以下进程。
DataNode
ResourceManager
Jps
NodeManager
NameNode
SecondaryNameNode
从上文实验资源链接下载实验数据文件
user_table.csv
,上传到/home/hadoop
目录下。把
user_table.csv
上传到HDFS目录/biexp/001
,请注意替换001为你的学号最后三位。(关键步骤,如果没有此步骤实验报告不得分)
hdfs dfs -mkdir -p /biexp/001
hdfs dfs -put /home/hadoop/user_table.csv /biexp/001
- 查看是否成功上传文件
hadoop fs -ls /biexp/001
- 启动 Hive。
hive
- 在 Hive 命令行终端输入以下命令,创建数据库。请注意替换001为你的学号最后三位。
create database db001;
use db001;
- 创建外部表
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 | 用户所在省份 |
- 查询user表,查看是否有数据。
select * from db001.user001 limit 10;
- 完成以下 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