使用Hive加载HDFS数据并分析图书评分情况
MRS离线处理集群,可对海量数据进行分析和处理,形成结果数据,供下一步数据应用使用。
离线处理对处理时间要求不高,但是所处理数据量较大,占用计算存储资源较多,通常通过Hive/SparkSQL引擎或者MapReduce/Spark2x实现。
本实践基于华为云MapReduce服务,用于指导您创建MRS集群后,使用Hive对原始数据进行导入、分析等操作,展示了如何构建弹性、低成本的离线大数据分析。
基本内容如下所示:
场景描述
Hive是建立在Hadoop上的数据仓库框架,提供大数据平台批处理计算能力,能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。
Hive主要特点如下:
- 海量结构化数据分析汇总。
- 将复杂的MapReduce编写任务简化为SQL语句。
- 灵活的数据存储格式,支持JSON,CSV,TEXTFILE,RCFILE,SEQUENCEFILE,ORC(Optimized Row Columnar)这几种存储格式。
本实践以某图书网站后台用户的点评数据为原始数据,导入Hive表后通过SQL命令筛选出最受欢迎的畅销图书。
创建MRS离线查询集群
- 进入购买MRS集群页面。
- 选择“快速购买”,填写软件配置参数。
表1 软件配置(以下参数仅供参考,可根据实际情况调整) 参数项
取值
区域
华北-北京四
计费模式
按需计费
集群名称
MRS_demo
版本类型
普通版
集群版本
MRS 3.1.0
组件选择
Hadoop分析集群
可用区
可用区1
虚拟私有云
vpc-01
子网
subnet-01
企业项目
default
Kerberos认证
不开启
用户名
admin/root
密码
设置密码登录集群管理页面及ECS节点用户的密码,例如:Test!@12345。
确认密码
再次输入设置用户密码
通信安全授权
勾选“确认授权”
图1 购买Hadoop分析集群
- 单击“立即购买”,等待MRS集群创建成功。
图2 集群购买成功
将本地数据导入到HDFS中
- 在本地已获取某图书网站后台图书点评记录的原始数据文件“book_score.txt”,例如内容如下。
例如部分数据节选如下:
202001,242,3,Good! 202002,302,3,Test. 202003,377,1,Bad! 220204,51,2,Bad! 202005,346,1,aaa 202006,474,4,None 202007,265,2,Bad! 202008,465,5,Good! 202009,451,3,Bad! 202010,86,3,Bad! 202011,257,2,Bad! 202012,465,4,Good! 202013,465,4,Good! 202014,465,4,Good! 202015,302,5,Good! 202016,302,3,Good! ...
- 登录对象存储服务OBS控制台,单击“创建桶”,填写以下参数,单击“立即创建”。
表2 桶参数 参数项
取值
区域
华北-北京四
数据冗余存储策略
单AZ存储
桶名称
mrs-hive
默认存储类别
标准存储
桶策略
私有
归档数据直读
关闭
企业项目
default
标签
-
图3 创建OBS桶
等待桶创建好,单击桶名称,选择“对象 > 上传对象”,将数据文件上传至OBS桶内。
图4 上传对象
- 切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“同步”,等待约5分钟同步完成。
图5 同步IAM用户
- 将数据文件上传HDFS。
- 在“文件管理”页签,选择“HDFS文件列表”,进入数据存储目录,如“/tmp/test”。
“/tmp/test”目录仅为示例,可以是界面上的任何目录,也可以通过“新建”创建新的文件夹。
- 单击“导入数据”。
- OBS路径:选择上面创建好的OBS桶名,找到“book_score.txt”文件,勾选“我确认所选脚本安全,了解可能存在的风险,并接受对集群可能造成的异常或影响。”,单击“确定”。
- HDFS路径:选择“/tmp/test”,单击“确定”。
图6 从OBS导入数据到HDFS
- 单击“确定”,等待数据导入成功,此时数据文件已上传至MRS集群的HDFS文件系统内。
图7 数据导入成功
- 在“文件管理”页签,选择“HDFS文件列表”,进入数据存储目录,如“/tmp/test”。
创建Hive表
- 下载并安装集群全量客户端,例如在主Master节点上安装,客户端安装目录为“/opt/client”,相关操作可参考安装客户端。
也可直接使用Master节点中自带的集群客户端,安装目录为“/opt/Bigdata/client”。
- 为主Master节点绑定一个弹性IP并在安全组中放通22端口,然后使用root用户登录主Master节点,进入客户端所在目录并加载变量。
cd /opt/client
source bigdata_env
- 执行beeline -n 'hdfs'命令进入Hive Beeline命令行界面。
执行以下命令创建一个与原始数据字段匹配的Hive表:
create table bookscore (userid int,bookid int,score int,remarks string) row format delimited fields terminated by ','stored as textfile;
- 查看表是否创建成功:
+------------+ | tab_name | +------------+ | bookscore | +------------+
将原始数据导入Hive并进行分析
- 继续在Hive Beeline命令行中执行以下命令,将已导入HDFS的原始数据导入Hive表中。
load data inpath '/tmp/test/book_score.txt' into table bookscore;
- 数据导入完成后,执行如下命令,查看Hive表内容。
+-------------------+-------------------+------------------+--------------------+ | bookscore.userid | bookscore.bookid | bookscore.score | bookscore.remarks | +-------------------+-------------------+------------------+--------------------+ | 202001 | 242 | 3 | Good! | | 202002 | 302 | 3 | Test. | | 202003 | 377 | 1 | Bad! | | 220204 | 51 | 2 | Bad! | | 202005 | 346 | 1 | aaa | | 202006 | 474 | 4 | None | | 202007 | 265 | 2 | Bad! | | 202008 | 465 | 5 | Good! | | 202009 | 451 | 3 | Bad! | | 202010 | 86 | 3 | Bad! | | 202011 | 257 | 2 | Bad! | | 202012 | 465 | 4 | Good! | | 202013 | 465 | 4 | Good! | | 202014 | 465 | 4 | Good! | | 202015 | 302 | 5 | Good! | | 202016 | 302 | 3 | Good! | ...
执行以下命令统计表行数:
select count(*) from bookscore;
+------+ | _c0 | +------+ | 32 | +------+
- 执行以下命令,等待MapReduce任务完成后,筛选原始数据中累计评分最高的图书top3。
select bookid,sum(score) as summarize from bookscore group by bookid order by summarize desc limit 3;
例如最终显示内容如下:
... INFO : 2021-10-14 19:53:42,427 Stage-2 map = 0%, reduce = 0% INFO : 2021-10-14 19:53:49,572 Stage-2 map = 100%, reduce = 0%, Cumulative CPU 2.15 sec INFO : 2021-10-14 19:53:56,713 Stage-2 map = 100%, reduce = 100%, Cumulative CPU 4.19 sec INFO : MapReduce Total cumulative CPU time: 4 seconds 190 msec INFO : Ended Job = job_1634197207682_0025 INFO : MapReduce Jobs Launched: INFO : Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 4.24 sec HDFS Read: 7872 HDFS Write: 322 SUCCESS INFO : Stage-Stage-2: Map: 1 Reduce: 1 Cumulative CPU: 4.19 sec HDFS Read: 5965 HDFS Write: 143 SUCCESS INFO : Total MapReduce CPU Time Spent: 8 seconds 430 msec INFO : Completed executing command(queryId=omm_20211014195310_cf669633-5b58-4bd5-9837-73286ea83409); Time taken: 47.388 seconds INFO : OK INFO : Concurrency mode is disabled, not creating a lock manager +---------+------------+ | bookid | summarize | +---------+------------+ | 465 | 170 | | 302 | 110 | | 474 | 88 | +---------+------------+ 3 rows selected (47.469 seconds)
以上内容表示,ID为456、302、474的3本书籍,为累计评分最高的Top3图书。