
# Hive客户端使用实践
#### 操作场景
该任务指导用户在运维场景或业务场景中使用Hive客户端。
#### 前提条件
- 已安装客户端，例如安装目录为"/opt/hadoopclient"，以下操作的客户端目录只是举例，请根据实际安装目录修改。
- 各组件业务用户由MRS集群管理员根据业务需要创建。安全模式下，"机机"用户需要下载keytab文件。"人机"用户第一次登录时需修改密码。
 
#### 使用Hive客户端（MRS 3.x之前版本）
1. 安装客户端，具体请参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0091.html)章节。
2. 以客户端安装用户，登录安装客户端的节点。
3. 执行以下命令，切换到客户端安装目录。 
   **cd** **/opt/hadoopclient**
   
   
4. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
5. 根据集群认证模式，完成Hive客户端登录。 
   - 安全模式，则执行以下命令，完成用户认证并登录Hive客户端。 **kinit** *组件业务用户*
     **beeline**
     
   
   - 普通模式，则执行以下命令，登录Hive客户端，如果不指定组件业务用户，则会以当前操作系统用户登录。 **beeline -n** *组件业务用户*
     
   
   
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   进行beeline连接后，可以编写并提交HQL语句执行相关任务。如需执行Catalog客户端命令，需要先执行**!q**命令退出beeline环境。
   
   
6. 使用以下命令，执行HCatalog的客户端命令。 
   **hcat -e** *"cmd"*
   其中*"cmd"* 必须为Hive DDL语句，如**hcat -e "show tables"**。
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 若要使用HCatalog客户端，必须从"组件管理"页面单击"下载客户端"，下载全部服务的客户端。Beeline客户端不受此限制。
   
   - 由于权限模型不兼容，使用HCatalog客户端创建的表，在HiveServer客户端中不能访问，但可以使用WebHCat客户端访问。
   
   - 在普通模式下使用HCatalog客户端，系统将以当前登录操作系统用户来执行DDL命令。
   
   - 退出beeline客户端时请使用**!q**命令，不要使用"Ctrl + c"。否则会导致连接生成的临时文件无法删除，长期会累积产生大量的垃圾文件。
   
   - 在使用beeline客户端时，如果需要在一行中输入多条语句，语句之间以";"分隔，需要将"entireLineAsCommand"的值设置为"false"。 设置方法：如果未启动beeline，则执行**beeline --entireLineAsCommand=false** 命令；如果已启动beeline，则在beeline中执行**!set entireLineAsCommand false**命令。
     设置完成后，如果语句中含有不是表示语句结束的";"，需要进行转义，例如**select concat_ws('\\;', collect_set(col1)) from tbl**。
     
    
   
   
 
#### 使用Hive客户端（MRS 3.x及之后版本）
1. 安装客户端，具体请参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0090.html)章节。
2. 以客户端安装用户，登录安装客户端的节点。
3. 执行以下命令，切换到客户端安装目录。 
   **cd** **/opt/hadoopclient**
   
   
4. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
5. 根据集群认证模式，完成Hive客户端登录。 
   - 安全模式，则执行以下命令，完成用户认证并登录Hive客户端。 **kinit** *组件业务用户*
     **beeline**
     
   
   - 普通模式，则执行以下命令，登录Hive客户端，如果不指定组件业务用户，则会以当前操作系统用户登录。 **beeline -n** *组件业务用户*
     
   
   
   
   
6. 使用以下命令，执行HCatalog的客户端命令。 
   **hcat -e** *"cmd"*
   其中*"cmd"* 必须为Hive DDL语句，如**hcat -e "show tables"**。
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 若要使用HCatalog客户端，必须从服务页面选择"更多 \> 下载客户端"，下载全部服务的客户端。Beeline客户端不受此限制。
   
   - 由于权限模型不兼容，使用HCatalog客户端创建的表，在HiveServer客户端中不能访问，但可以使用WebHCat客户端访问。
   
   - 在普通模式下使用HCatalog客户端，系统将以当前登录操作系统用户来执行DDL命令。
   
   - 退出beeline客户端时请使用**!q**命令，不要使用"Ctrl + C"。否则会导致连接生成的临时文件无法删除，长期会累积产生大量的垃圾文件。
   
   - 在使用beeline客户端时，如果需要在一行中输入多条语句，语句之间以";"分隔，需要将"entireLineAsCommand"的值设置为"false"。 设置方法：如果未启动beeline，则执行**beeline --entireLineAsCommand=false** 命令；如果已启动beeline，则在beeline中执行**!set entireLineAsCommand false**命令。
     设置完成后，如果语句中含有不是表示语句结束的";"，需要进行转义，例如**select concat_ws('\\;', collect_set(col1)) from tbl**。
     
    
   
   
 
#### Hive客户端常用命令
常用的Hive Beeline客户端命令如下表所示。
更多命令可参考<https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-BeelineCommands>。
表1Hive Beeline客户端常用命令 
| 命令                                                                                                                                                                                          | 说明                                                                                                   |
|:---|:---|
| set \<key\>=\<value\>                                                                                                                                                                       | 设置特定配置变量（键）的值。 说明： 若变量名拼错，Beeline不会显示错误。 |
| set                                                                                                                                                                                         | 打印由用户或Hive覆盖的配置变量列表。                                                                                 |
| set -v                                                                                                                                                                                      | 打印Hadoop和Hive的所有配置变量。                                                                                |
| add FILE\[S\] \<filepath\> \<filepath\>\* add JAR\[S\] \<filepath\> \<filepath\>\* add ARCHIVE\[S\] \<filepath\> \<filepath\>\* | 将一个或多个文件、JAR文件或ARCHIVE文件添加至分布式缓存的资源列表中。                                                              |
| add FILE\[S\] \<ivyurl\> \<ivyurl\>\* add JAR\[S\] \<ivyurl\> \<ivyurl\>\* add ARCHIVE\[S\] \<ivyurl\> \<ivyurl\>\*              | 使用"ivy://group:module:version?query_string"格式的lvy URL，将一个或多个文件、JAR文件或ARCHIVE文件添加至分布式缓存的资源列表中。        |
| list FILE\[S\] list JAR\[S\] list ARCHIVE\[S\]                                                                                   | 列出已添加至分布式缓存中的资源。                                                                                     |
| list FILE\[S\] \<filepath\>\* list JAR\[S\] \<filepath\>\* list ARCHIVE\[S\] \<filepath\>\*                                       | 检查给定的资源是否已添加至分布式缓存中。                                                                                 |
| delete FILE\[S\] \<filepath\>\* delete JAR\[S\] \<filepath\>\* delete ARCHIVE\[S\] \<filepath\>\*                              | 从分布式缓存中删除资源。                                                                                         |
| delete FILE\[S\] \<ivyurl\> \<ivyurl\>\* delete JAR\[S\] \<ivyurl\> \<ivyurl\>\* delete ARCHIVE\[S\] \<ivyurl\> \<ivyurl\>\*         | 从分布式缓存中删除使用\<ivyurl\>添加的资源。                                                                          |
| reload                                                                                                                                                                                      | 使HiveServer2发现配置参数指定路径下JAR文件的变更"hive.reloadable.aux.jars.path"（无需重启HiveServer2）。更改操作包括添加、删除或更新JAR文件。 |
| dfs \<dfs command\>                                                                                                                                                                         | 执行dfs命令。                                                                                             |
| \<query string\>                                                                                                                                                                            | 执行Hive查询，并将结果打印到标准输出。                                                                                |
   
