更新时间:2024-06-12 GMT+08:00
分享

快速开发Hive JDBC应用

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创建用于样例工程安全认证的集群用户。

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

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

  2. 选择系统 > 权限 > 用户,在用户名为“developuser”的操作列选择“更多 > 下载认证凭据”下载认证凭据文件,保存后解压得到该用户的“user.keytab”文件与“krb5.conf”文件。
  3. 选择“集群 > 概览 > 更多 > 下载客户端”,“选择客户端类型”设置为“仅配置文件”,单击“确定”,等待客户端文件包生成后根据浏览器提示下载客户端到本地并解压。

    例如,客户端配置文件压缩包为“FusionInsight_Cluster_1_Services_Client.tar”,解压后得到“FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles.tar”,继续解压该文件。

    1. 进入客户端配置文件解压路径“FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles\Hive\config”,获取Hive相关配置文件。
    2. 复制解压目录下的“hosts”文件中的内容到本地hosts文件中,确保本地机器能与解压目录下“hosts”文件中所列出的各主机在网络上互通。
      • 在本实践中,需要确保本地环境与MRS集群所在网络平面互通,通常可以通过绑定EIP的方式访问MRS集群,具体操作请参考配置Windows通过EIP访问集群Hive
      • Windows本地hosts文件存放路径举例:“C:\WINDOWS\system32\drivers\etc\hosts”。

获取样例工程

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

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

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

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

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

    图1 Hive样例工程示例

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

  3. 准备应用开发配置文件中获取的集群配置文件及用户认证文件放置在样例工程的“resources”目录下。
  4. 如需连接开启了Kerberos认证的MRS集群,在Hive样例工程代码中,需配置相关认证信息。

    在“com.huawei.bigdata.hive.examples”包的“JDBCExample”类中修改“USER_NAME”为实际用户名,例如developuser
    KRB5_FILE = userdir + "krb5.conf";
    System.setProperty("java.security.krb5.conf", KRB5_FILE);
    USER_NAME = "developuser";
    if ("KERBEROS".equalsIgnoreCase(auth)) {
        USER_KEYTAB_FILE = "src/main/resources/user.keytab";
        ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL = "zookeeper/" + getUserRealm();
        System.setProperty(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL);
    }
    ...

    本样例工程中,基于业务场景的开发思路如下,各功能代码片段详情说明可参考JDBC访问Hive样例程序

    1. 数据准备。
      1. 创建表,雇员信息表“employees_info”。
      2. 加载雇员信息数据到雇员信息表“employees_info”中。
    2. 数据分析。

      统计表employees_info中有多少条记录。

    3. 删除表。

编译并运行程序

  1. 编译JDBC样例程序:

    在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。

    当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。

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

  2. 在本地创建一个目录作为运行目录,如“D:\jdbc_example”,将生成的包名中含有“-with-dependencies”字段的jar包放进该路径下,并在该目录下创建子目录“src/main/resources”。将样例工程“resources”目录下的所有文件复制到该目录下。
  3. 在Windows CMD环境下执行:

    cd /d d:\jdbc_example

    java -jar hive-jdbc-example-XXX-with-dependencies.jar

  4. 样例运行成功后,运行信息如下,表示相关Hive表操作成功执行。

    ...
    2023-05-17 20:25:09,421 INFO  HiveConnection - Login timeout is 0
    2023-05-17 20:25:09,656 INFO  HiveConnection - user login success.
    2023-05-17 20:25:09,685 INFO  HiveConnection - Will try to open client transport with JDBC Uri: jdbc:hive2://192.168.64.216:21066/;principal=hive/hadoop.hadoop.com@HADOOP.COM;sasl.qop=auth-conf;serviceDiscoveryMode=zooKeeper;auth=KERBEROS;zooKeeperNamespace=hiveserver2;user.principal=developuser;user.keytab=src/main/resources/user.keytab
    2023-05-17 20:25:30,294 INFO  JDBCExample - Create table success!
    2023-05-17 20:26:34,032 INFO  JDBCExample - _c0
    2023-05-17 20:26:34,266 INFO  JDBCExample - 0
    2023-05-17 20:26:35,199 INFO  JDBCExample - Delete table success!
    ...

相关文档