快速开发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集群
- 购买一个包含有Hive组件的MRS集群,详情请参见购买自定义集群。
本文以购买的MRS 3.1.5版本的集群为例,组件包含Hadoop、Hive组件,集群开启Kerberos认证。
- 单击“立即购买”,等待MRS集群创建成功。
准备应用开发配置文件
- 集群创建成功后,登录FusionInsight Manager创建用于创建Hive数据表及提交HCatalog程序的集群用户。
选择“系统 > 权限 > 用户 > 添加用户”,在新增用户界面创建一个机机用户,例如hiveuser。
“用户组”需加入“hive”、“supergroup”用户组。
- 下载并安装集群客户端,用于运行HCatalog程序,例如安装目录为“/opt/client”。
获取样例工程
- 通过开源镜像站获取样例工程。
下载样例工程的Maven工程源码和配置文件,并在本地配置好相关开发工具,可参考通过开源镜像站获取样例工程。
根据集群版本选择对应的分支,下载并获取MRS相关样例工程。
例如本章节场景对应示例为“hcatalog-example”样例,获取地址:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.1.5/src/hive-examples/hcatalog-example。
- 本地使用IDEA工具导入样例工程,等待Maven工程下载相关依赖包,具体操作可参考配置并导入样例工程。
图1 Hive HCatalog样例工程示例
本地配置好Maven及SDK相关参数后,样例工程会自动加载相关依赖包。
编译并运行程序
- 编译HCatalog样例程序:
- 在IDEA Maven工具窗口,选择clean生命周期,执行Maven构建过程。
- 选择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] ------------------------------------------------------------------------
- 登录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 | +----------+
- 将导出的jar包上传至集群客户端所在的Linux节点指定路径,例如“/opt/hive_demo”。
- 为方便后续操作,将样例程序目录、客户端组件目录等配置为公共变量。
退出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”需要根据实际环境的版本号进行修改。
- 使用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 ...
- 作业任务运行完成后,进入Hive Beeline命令行,查询t2表数据内容,查看数据分析结果。
select * from t2;
+----------+----------+ | t2.col1 | t2.col2 | +----------+----------+ | 1 | 2 | | 2 | 2 | | 3 | 1 | +----------+----------+