
# 快速开发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集群，详情请参见[购买自定义集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0513.html)。
   ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   本文以购买的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"文件中所列出的各主机在网络上互通。
      ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - 在本实践中，需要确保本地环境与MRS集群所在网络平面互通，通常可以通过绑定EIP的方式访问MRS集群，具体操作请参考[配置Windows通过EIP访问集群Hive](https://support.huaweicloud.com/devg3-mrs/mrs_07_110043.html)。
      
      - Windows本地hosts文件存放路径举例："C:\\WINDOWS\\system32\\drivers\\etc\\hosts"。
        
   
   
   
   
 
#### 获取样例工程
1. 通过开源镜像站获取样例工程。 
   下载样例工程的Maven工程源码和配置文件，并在本地配置好相关开发工具，可参考[通过开源镜像站获取样例工程](https://support.huaweicloud.com/devg3-mrs/mrs_07_010002.html)。
   根据集群版本选择对应的分支，下载并获取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工程下载相关依赖包，具体操作可参考[配置并导入样例工程](https://support.huaweicloud.com/devg3-mrs/mrs_07_110008.html)。
   
   图1Hive样例工程示例   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001600884785.png)
   本地配置好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样例程序](https://support.huaweicloud.com/devg3-mrs/mrs_07_110051.html)：
   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!
   ...
   ```
   
   
 
