
# Hive客户端使用实践
#### 操作场景
该任务指导用户在运维场景或业务场景中使用Hive客户端。
#### 前提条件
已安装客户端，具体请参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0090.html)章节。例如安装目录为"/opt/hadoopclient"，以下操作的客户端目录只是举例，请根据实际安装目录修改。
#### 操作视频
本视频为您演示开启Kerberos认证的MRS集群创建成功并安装客户端后，通过Hive客户端创建存储在HDFS中的外表、插入数据、查询数据、删除表等操作。
因不同版本操作界面可能存在差异，相关视频供参考，具体以实际环境为准。
<video controls="controls" preload="none" id="object10341744174713" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/mrs-video/1677747827509245947.mp4" title="使用Hive客户端创建外部表" poster="https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002352436654.jpg" height="300.0000" width="600.0000"></video>
#### 使用Hive客户端
1. 以客户端安装用户，登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   ```
   cd /opt/hadoopclient
   ```
   
   
3. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
4. 根据集群认证模式，完成Hive客户端登录。 
   - MRS 3.6.0-LTS之前版本，如果当前集群已启用Kerberos认证（安全模式），则执行以下命令，完成用户认证并登录Hive客户端，用户需具有创建Hive表的权限**，** 例如，该用户属于"hive"、"hadoop"用户组，主组为"hive"。创建用户具体操作请参见[创建Hive用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0949.html#mrs_01_0949__section15172119027)。
     认证用户：
     ```
     kinit 组件业务用户
     ```
     登录Hive客户端：
     ```
     beeline
     ```
     
   
   - MRS 3.6.0-LTS及之后版本，集群已启用Kerberos认证（安全模式）可以选择以下任意一种认证方式登录，用户需具有创建Hive表的权限**，** 例如，该用户属于"hive"、"hadoop"用户组，主组为"hive"。创建用户具体操作请参见[创建Hive用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0949.html#mrs_01_0949__section15172119027)。
     - Kerberos认证方式 认证用户：
       ```
       kinit 组件业务用户
       ```
       登录Hive客户端：
       ```
       beeline
       ```
       
     
     - 用户名和密码认证方式（已参考[配置在Hive客户端使用用户名和密码认证连接HiveServer](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300649.html)章节开启用户名和密码认证功能）
       ```
       beeline -n ${username} -p '${password}'
       ```
       其中*${username}* 和*${password}*需修改为业务使用的用户名和用户密码。
       
      
   
   - 如果当前集群未启用Kerberos认证（普通模式），则执行以下命令，登录Hive客户端，如果不指定组件业务用户，则会以当前操作系统用户登录。
     ```
     beeline -n组件业务用户
     ```
     
   
   
   
   
5. 执行以下命令创建表，例如"test"： 
   ```
   create table test(id int,name string);
   ```
   
   
6. 执行以下命令向表中插入数据： 
   ```
   insert into table test(id,name) values("11","A");
   ```
   
   
7. 执行以下命令查询表数据： 
   ```
   select * from test;
   ```
   
   
8. 执行以下命令删除Hive表： 
   ```
   drop table test;
   ```
   
   
9. 执行以下命令退出Hive客户端。 
   ```
   !q
   ```
   - 退出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客户端常用命令
- 也可使用HCatalog客户端执行Hive表相关操作，命令为：
  ```
  hcat -e "cmd"
  ```
  其中"*cmd*"必须为Hive DDL语句，例如：
  ```
  hcat -e "show tables"
  ```
  需注意：
  - 如果要使用HCatalog客户端，必须从服务页面选择"更多 \> 下载客户端"，下载全部服务的客户端。Beeline客户端不受此限制。
  
  - 由于权限模型不兼容，使用HCatalog客户端创建的表，在HiveServer客户端中不能访问，但可以使用WebHCat客户端访问。
  
  - 在未启用Kerberos认证的集群中使用HCatalog客户端，系统将以当前登录操作系统用户来执行DDL命令。
   
- 常用的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"格式的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查询，并将结果打印到标准输出。                                                                                |
     
  
 
