更新时间:2023-07-06 GMT+08:00

Hive HCatalog应用开发快速入门

Hive是一个开源的,建立在Hadoop上的数据仓库框架,提供类似SQL的HQL语言操作结构化数据,其基本原理是将HQL语言自动转换成Mapreduce任务或Spark任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。

Hive主要特点如下:

  • 通过HQL语言非常容易的完成数据提取、转换和加载(ETL)。
  • 通过HQL完成海量结构化数据分析。
  • 灵活的数据存储格式,支持JSON、CSV、TEXTFILE、RCFILE、ORCFILE、SEQUENCEFILE等存储格式,并支持自定义扩展。
  • 多种客户端连接方式,支持JDBC接口。

Hive的主要应用于海量数据的离线分析(如日志分析,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。

MRS对外提供了基于Hive组件的应用开发样例工程,本实践用于指导您创建MRS集群后,获取并导入样例工程并在本地进行编译调测,用于实现MRS集群中的Hive表的创建、数据插入、读取等操作。

创建MRS Hive集群

  1. 创建并购买一个包含有Hive组件的MRS集群,详情请参见购买自定义集群

    本文以购买的MRS 3.1.5版本的集群为例,组件包含Hadoop、Hive组件,集群开启Kerberos认证。

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

准备应用开发配置文件

  1. 集群创建成功后,登录FusionInsight Manager创建用于创建Hive数据表及提交HCatalog程序的集群用户。

    选择“系统 > 权限 > 用户 > 添加用户”,在新增用户界面创建一个机机用户,例如hiveuser

    “用户组”需加入“hive”、“supergroup”用户组。

  2. 下载并安装集群客户端,用于运行HCatalog程序,例如安装目录为“/opt/client”。

获取样例工程

  1. 通过开源镜像站获取样例工程。

    下载样例工程的Maven工程源码和配置文件,并在本地配置好相关开发工具,可参考通过开源镜像站获取样例工程

    根据集群版本选择对应的分支,下载并获取MRS相关样例工程。

    例如本章节场景对应示例为“hcatalog-example”样例,获取地址:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.1.5/src/hive-examples/hcatalog-example

  2. 本地使用IDEA工具导入样例工程,等待Maven工程下载相关依赖包,具体操作可参考配置并导入样例工程

    图1 Hive HCatalog样例工程示例

    本地配置好Maven及SDK相关参数后,样例工程会自动加载相关依赖包。

编译并运行程序

  1. 编译HCatalog样例程序:

    1. 在IDEA Maven工具窗口,选择clean生命周期,执行Maven构建过程。
    2. 选择package生命周期,执行Maven构建过程。
      图2 打包样例程序

      当输出“BUILD SUCCESS”,表示编译成功。

      编译成功后将会在样例工程的“target”目录下生成jar包“hcatalog-example-XXX.jar”。

      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time:  03:30 min
      [INFO] Finished at: 2023-05-17T20:22:44+08:00
      [INFO] ------------------------------------------------------------------------

  2. 登录Hive Beeline命令行,创建用于HCatalog程序分析的源表及数据表。

    source /opt/client/bigdata_env

    kinit hiveuser

    beeline

    create table t1(col1 int);

    create table t2(col1 int,col2 int);

    向源数据表t1中插入测试数据:

    insert into table t1 select 1 union all select 1 union all select 2 union all select 2 union all select 3;

    select * from t1;

    +----------+
    | t1.col1  |
    +----------+
    | 1        |
    | 1        |
    | 2        |
    | 2        |
    | 3        |
    +----------+

  3. 将导出的jar包上传至集群客户端所在的Linux节点指定路径,例如“/opt/hive_demo”
  4. 为方便后续操作,将样例程序目录、客户端组件目录等配置为公共变量。

    退出Beeline命令行,执行以下命令:

    export HCAT_CLIENT=/opt/hive_demo

    export HADOOP_HOME=/opt/client/HDFS/hadoop

    export HIVE_HOME=/opt/client/Hive/Beeline

    export HCAT_HOME=$HIVE_HOME/../HCatalog

    export LIB_JARS=$HCAT_HOME/lib/hive-hcatalog-core-XXX.jar,$HCAT_HOME/lib/hive-metastore-XXX.jar,$HCAT_HOME/lib/hive-standalone-metastore-XXX.jar,$HIVE_HOME/lib/hive-exec-XXX.jar,$HCAT_HOME/lib/libfb303-XXX.jar,$HCAT_HOME/lib/slf4j-api-XXX.jar,$HCAT_HOME/lib/jdo-api-XXX.jar,$HCAT_HOME/lib/antlr-runtime-XXX.jar,$HCAT_HOME/lib/datanucleus-api-jdo-XXX.jar,$HCAT_HOME/lib/datanucleus-core-XXX.jar,$HCAT_HOME/lib/datanucleus-rdbms-fi-XXX.jar,$HCAT_HOME/lib/log4j-api-XXX.jar,$HCAT_HOME/lib/log4j-core-XXX.jar,$HIVE_HOME/lib/commons-lang-XXX.jar,$HIVE_HOME/lib/hive-exec-XXX.jar

    export HADOOP_CLASSPATH=$HCAT_HOME/lib/hive-hcatalog-core-XXX.jar:$HCAT_HOME/lib/hive-metastore-XXX.jar:$HCAT_HOME/lib/hive-standalone-metastore-XXX.jar:$HIVE_HOME/lib/hive-exec-XXX.jar:$HCAT_HOME/lib/libfb303-XXX.jar:$HADOOP_HOME/etc/hadoop:$HCAT_HOME/conf:$HCAT_HOME/lib/slf4j-api-XXX.jar:$HCAT_HOME/lib/jdo-api-XXX.jar:$HCAT_HOME/lib/antlr-runtime-XXX.jar:$HCAT_HOME/lib/datanucleus-api-jdo-XXX.jar:$HCAT_HOME/lib/datanucleus-core-XXX.jar:$HCAT_HOME/lib/datanucleus-rdbms-fi-XXX.jar:$HCAT_HOME/lib/log4j-api-XXX.jar:$HCAT_HOME/lib/log4j-core-XXX.jar:$HIVE_HOME/lib/commons-lang-XXX.jar:$HIVE_HOME/lib/hive-exec-XXX.jar

    LIB_JARS和HADOOP_CLASSPATH中指定的jar包的版本号“XXX”需要根据实际环境的版本号进行修改。

  5. 使用Yarn客户端提交任务。

    yarn --config $HADOOP_HOME/etc/hadoop jar $HCAT_CLIENT/hcatalog-example-XXX.jar com.huawei.bigdata.HCatalogExample -libjars $LIB_JARS t1 t2

    ...
    2023-05-18 20:05:56,691 INFO mapreduce.Job: The url to track the job: https://host-192-168-64-122:26001/proxy/application_1683438782910_0008/
    2023-05-18 20:05:56,692 INFO mapreduce.Job: Running job: job_1683438782910_0008
    2023-05-18 20:06:07,250 INFO mapreduce.Job: Job job_1683438782910_0008 running in uber mode : false
    2023-05-18 20:06:07,253 INFO mapreduce.Job:  map 0% reduce 0%
    2023-05-18 20:06:15,362 INFO mapreduce.Job:  map 25% reduce 0%
    2023-05-18 20:06:16,386 INFO mapreduce.Job:  map 50% reduce 0%
    2023-05-18 20:06:35,999 INFO mapreduce.Job:  map 100% reduce 0%
    2023-05-18 20:06:42,048 INFO mapreduce.Job:  map 100% reduce 100%
    2023-05-18 20:06:43,136 INFO mapreduce.Job: Job job_1683438782910_0008 completed successfully
    2023-05-18 20:06:44,118 INFO mapreduce.Job: Counters: 54
    ...

  6. 作业任务运行完成后,进入Hive Beeline命令行,查询t2表数据内容,查看数据分析结果。

    select * from t2;

    +----------+----------+
    | t2.col1  | t2.col2  |
    +----------+----------+
    | 1        | 2        |
    | 2        | 2        |
    | 3        | 1        |
    +----------+----------+