文档首页/ MapReduce服务 MRS/ 最佳实践/ 数据分析/ 使用Hive加载HDFS数据并分析图书评分情况
更新时间:2024-08-03 GMT+08:00

使用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等存储格式。

Hive作为一个基于HDFS和MapReduce架构的数据仓库,其主要能力是通过对HQL(Hive Query Language)编译和解析,生成并执行相应的MapReduce任务或者HDFS操作。

图1 Hive结构
  • Metastore:对表,列和Partition等的元数据进行读写及更新操作,其下层为关系型数据库。
  • Driver:管理HQL执行的生命周期并贯穿Hive任务整个执行期间。
  • Compiler:编译HQL并将其转化为一系列相互依赖的Map/Reduce任务。
  • Optimizer:优化器,分为逻辑优化器和物理优化器,分别对HQL生成的执行计划和MapReduce任务进行优化。
  • Executor:按照任务的依赖关系分别执行Map/Reduce任务。
  • ThriftServer:提供thrift接口,作为JDBC的服务端,并将Hive和其他应用程序集成起来。
  • Clients:包含WebUI和JDBC接口,为用户访问提供接口。

操作流程

本实践以某图书网站后台用户的点评数据为原始数据,导入Hive表后通过SQL命令筛选出最受欢迎的图书。

基本操作流程如下所示:

  1. 步骤1:创建MRS离线查询集群
  2. 步骤2:将本地数据导入到HDFS中
  3. 步骤3:创建Hive表
  4. 步骤4:将原始数据导入Hive并进行分析

步骤1:创建MRS离线查询集群

  1. 进入购买MRS集群页面
  2. 选择“快速购买”,填写软件配置参数。

    表1 软件配置(以下参数仅供参考,可根据实际情况调整)

    参数名称

    参数说明

    取值样例

    区域

    选择区域。

    不同区域的云服务产品之间内网互不相通。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

    中国-香港

    计费模式

    选择待创建的MRS集群的计费模式。

    按需计费

    集群名称

    待创建的MRS集群名称。

    MRS_demo

    版本类型

    待创建的MRS集群版本类型。

    普通版

    集群版本

    待创建的MRS集群版本。

    MRS 3.1.0

    组件选择

    选择待创建的MRS集群配套的组件。

    Hadoop分析集群

    可用区

    选择集群工作区域下关联的可用区。

    可用区1

    虚拟私有云

    选择需要创建集群的VPC,单击“查看虚拟私有云”进入VPC服务查看已创建的VPC名称和ID。如果没有VPC,需要创建一个新的VPC。

    vpc-01

    子网

    选择需要创建集群的子网,可进入VPC服务查看VPC下已创建的子网名称和ID。如果VPC下未创建子网,请单击“创建子网”进行创建。

    subnet-01

    企业项目

    选择集群所属的企业项目。

    default

    Kerberos认证

    登录Manager管理页面时是否启用Kerberos认证。

    不开启

    用户名

    Manager管理员用户,目前默认为admin用户。

    admin/root

    密码

    配置Manager管理员用户的密码。

    设置密码登录集群管理页面及ECS节点用户的密码,例如:Test!@12345。

    确认密码

    再次输入Manager管理员用户的密码。

    再次输入设置用户密码

    通信安全授权

    若不开启通信安全授权,MRS将无法创建集群。

    勾选“确认授权”

    图2 购买Hadoop分析集群

  3. 单击“立即购买”,等待MRS集群创建成功。

    图3 集群购买成功

步骤2:将本地数据导入到HDFS中

  1. 在本地已获取某图书网站后台图书点评记录的原始数据文件“book_score.txt”,例如内容如下。

    字段信息依次为:用户ID、图书ID、图书评分、备注信息。

    例如部分数据节选如下:
    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!
    ...

  2. 登录对象存储服务OBS控制台,单击“并行文件系统 > 创建并行文件系统”,填写以下参数,单击“立即创建”。

    表2 并行文件系统参数

    参数名称

    参数说明

    取值样例

    区域

    桶所属区域。

    中国-香港

    数据冗余存储策略

    • 多AZ存储:数据冗余存储至多个可用区(AZ),可靠性更高。
    • 单AZ存储:数据仅存储在单个可用区(AZ),成本更低。

    单AZ存储

    文件系统名称

    文件系统的名称,需全局唯一,不能与已有的任何文件系统名称重复。

    mrs-hive

    策略

    文件系统的读写权限控制。

    私有

    归档数据直读

    通过归档数据直读,您可以直接下载存储类别为归档存储的对象,而无需提前恢复。

    关闭

    企业项目

    将桶加入到企业项目中统一管理。

    default

    标签

    可选。标签用于标识OBS中的桶,以此达到对OBS中的桶进行分类的目的。

    -

    等待文件系统创建好,单击文件系统名称,选择“文件 > 上传文件”,将数据文件上传至OBS并行文件系统内。

  3. 切换回MRS控制台,单击创建好的MRS集群名称,进入“概览”,单击“IAM用户同步”所在行的“同步”,等待约5分钟同步完成。

    图4 同步IAM用户

  4. 将数据文件上传HDFS。

    1. 在“文件管理”页签,选择“HDFS文件列表”,进入数据存储目录,如“/tmp/test”。

      “/tmp/test”目录仅为示例,可以是界面上的任何目录,也可以通过“新建”创建新的文件夹。

    2. 单击“导入数据”。
      • OBS路径:选择上面创建好的OBS并行文件系统名,找到“book_score.txt”文件,勾选“我确认所选脚本安全,了解可能存在的风险,并接受对集群可能造成的异常或影响。”,单击“确定”。
      • HDFS路径:选择“/tmp/test”,单击“确定”。
      图5 从OBS导入数据到HDFS
    3. 单击“确定”,等待数据导入成功,此时数据文件已上传至MRS集群的HDFS文件系统内。
      图6 数据导入成功

步骤3:创建Hive表

  1. 下载并安装集群全量客户端,例如在主Master节点上安装,客户端安装目录为“/opt/client”,相关操作可参考安装客户端

    也可直接使用Master节点中自带的集群客户端,安装目录为“/opt/Bigdata/client”。

  2. 为主Master节点绑定一个弹性IP并在安全组中放通22端口,然后使用root用户登录主Master节点,进入客户端所在目录并加载变量。

    cd /opt/client

    source bigdata_env

  3. 执行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;

  4. 查看表是否创建成功:

    show tables;

    +------------+
    |  tab_name  |
    +------------+
    | bookscore  |
    +------------+

步骤4:将原始数据导入Hive并进行分析

  1. 继续在Hive Beeline命令行中执行以下命令,将已导入HDFS的原始数据导入Hive表中。

    load data inpath '/tmp/test/book_score.txt' into table bookscore;

  2. 数据导入完成后,执行如下命令,查看Hive表内容。

    select * from bookscore;

    +-------------------+-------------------+------------------+--------------------+
    | 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   |
    +------+

  3. 执行以下命令,等待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图书。