
# MRS Hive对接CSS服务配置说明
#### 应用场景
利用Elasticsearch-Hadoop插件，完成Hive和CSS服务的Elasticsearch直接的数据交互，通过Hive外部表的方式，可以快速将Elasticsearch索引数据映射到Hive表中。
Elasticsearch-Hadoop (ES-Hadoop) 连接器将Hadoop海量的数据存储和深度加工能力与Elasticsearch实时搜索和分析功能结合在一起。
它能够让您快速深入了解大数据，并让您在Hadoop生态系统中更好地开展工作。
#### 方案架构
Hive是建立在Hadoop上的数据仓库框架，提供大数据平台批处理计算能力，能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据，其基本原理是将HQL语言自动转换成MapReduce任务，从而完成对Hadoop集群中存储的海量数据进行查询和分析。
图1Hive结构   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002509912508.png "点击放大")
云搜索服务（Cloud Search Service，简称CSS）是一个基于Elasticsearch、OpenSearch且完全托管的在线分布式搜索服务，为用户提供结构化、非结构化文本、以及基于AI向量的多条件检索、统计、报表。云搜索服务是华为云ELK生态的一系列软件集合，为您全方位提供托管的ELK生态云服务，兼容Elasticsearch、Logstash、Kibana、Cerebro等软件。
#### 约束与限制
- 已安装MRS的Hive服务和CSS的Elasticsearch服务，并且两个集群之间网络互通。
- 适用于MRS 3.x及之后版本。
 
#### 步骤一：配置云搜索服务索引并下载jar包
1. 在云搜索服务的"集群管理"页面上，单击集群"操作"列的"Kibana"访问集群，在Kibana的左侧导航中选择"Dev Tools"，进入Console界面，输入以下命令创建索引"ddj_study_card_ratio_v12"：
   ```
   PUT ddj_study_card_ratio_v12
   {  
   "mappings" : {
         "properties" : {
           "uniq_id" : {
             "type" : "text",
             "fields" : {
               "keyword" : {
                 "type" : "keyword",
                 "ignore_above" : 256
               }
             }
           }
         }
       }
     }
   ```
   返回如下结果表示索引创建成功：
   ```
   {
     "acknowledged" : true,
     "shards_acknowledged" : true,
     "index" : "ddj_study_card_ratio_v12"
   }
   ```
   
2. 执行以下命令向"ddj_study_card_ratio_v12"索引中插入数据：
   ```
   POST /ddj_study_card_ratio_v12/_doc/_bulk
   {"index":{}}
   {"id":"1", "uniq_id":"23323"}
   ```
   当返回结果信息中"errors"字段的值为"false"时，表示导入数据成功。
   
3. 根据当前CSS服务中的Elasticsearch版本在[Past Releases](https://www.elastic.co/cn/downloads/past-releases/#es-hadoop)下载对应的Jar包。
   例如：Elasticsearch 7.6.2对应的Jar包为"elasticsearch-hadoop-7.6.2.jar"。
   ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - Jar包版本需与CSS服务的Elasticsearch版本保持一致，本章节以开启安全模式的"Elasticsearch 7.6.2"集群为例进行相关操作，具体请以实际情况为准。
   
   - 若有额外的自定义模块，也单独打包成一份Jar包。
     
 
#### 步骤二：在MRS设置对接云搜索服务
1. MRS 3.5.0-LTS及之后版本，依次登录每个HiveServer节点，执行以下命令检查HiveServer安装目录下是否已存在elasticsearch-hadoop Jar包： **ll ${BIGDATA_HOME}/FusionInsight_HD_\*/install/FusionInsight-Hive-\*/hive-\*/lib/elasticsearch-hadoop-\*.jar**
   如果已存在elasticsearch-hadoop Jar包，则需要将其删除。
   
2. 将在Past Releases下载的对应的Jar包分别上传到所有的HiveServer所在节点的"/opt/Bigdata/third_lib/Hive"目录下，并执行以下命令修改权限。 **chown omm:wheel -R** **/opt/Bigdata/third_lib/Hive**
   
3. 登录FusionInsight Manager，选择"集群 \> 服务 \> Hive \> 实例"，勾选所有的HiveServer实例，选择"更多 \> 重启实例"，重启HiveServer实例。
4. 在[Maven中心仓](https://repo1.maven.org/maven2/commons-httpclient/commons-httpclient/3.1/)下载"commons-httpclient-3.1.jar"，并将该Jar包及在Past Releases下载的Jar包上传至集群中安装了HDFS和Hive客户端的任一的节点上。
5. 以客户端安装用户，登录上一步上传了Jar包的节点。
6. 执行以下命令认证用户。 **cd** *客户端安装目录*
   **source bigdata_env**
   **kinit** *组件业务用户*（未开启Kerberos认证的集群跳过此操作）
   
7. 执行以下命令在HDFS上创建Jar包存放目录。 **hdfs dfs -mkdir** *Jar包存放在hdfs中的路径*
   
8. 执行以下命令将在Maven中心仓下载的Jar包和在Past Releases下载的Jar包上传至HDFS中。 **hdfs dfs -put** *Jar包存放路径* *Jar包存放在hdfs中的路径*
   
9. 执行以下命令让Hive在执行命令行任务时加载指定Jar包。 **beeline**
   **add jar** *Jar包存放在hdfs中的路径* **;**（每个Jar包分别执行一次该命令）
   
10. 执行以下命令创建Elasticsearch外部表。
    ```
    CREATE EXTERNAL TABLE `ddj_study_card_ratio_v12_test`(                              
       `uniq_id` string)                                                                         
     ROW FORMAT SERDE                                                                       
       'org.elasticsearch.hadoop.hive.EsSerDe'                                              
     STORED BY                                                                              
       'org.elasticsearch.hadoop.hive.EsStorageHandler'                                     
     WITH SERDEPROPERTIES (                                                                 
       'field.delim'='',                                                                   
       'serialization.format'='')                                                               
     TBLPROPERTIES (                                                                        
       'bucketing_version'='2',                                                             
       'es.index.auto.create'='false',                                                      
       'es.mapping.date.rich'='false',                                                      
       'es.net.http.auth.pass'='Pzh6537projectx',                                           
       'es.net.http.auth.user'='elastic',                                                   
       'es.nodes'='vpcep-e0b33065-75b7-4193-8395-dbd00d10bc39.cn-east-3.huaweicloud.com',   
       'es.nodes.wan.only'='true',                                                          
       'es.port'='9200',                                                                                 
       'es.read.metadata'='true',                                                           
       'es.resource'='ddj_study_card_ratio_v12',                                            
       'es.set.netty.runtime.available.processors'='false',                                 
       'es.write.operation'='index',                                                        
       'last_modified_by'='root',                                                           
       'last_modified_time'='1655264909',                                                   
       'transient_lastDdlTime'='1655264909');
    ```
    ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
    - 关键参数说明：
      - es.net.http.auth.pass、es.net.http.auth.user：在Kibana中创建的具有[1]创建的索引的操作权限的用户密码及用户名，详细内容请参见[使用Kibana创建用户并授权](https://support.huaweicloud.com/usermanual-css/css_01_0109.html)。
      
      - es.nodes：需要连接的IP，可登录CSS管理控制台，在集群列表的"内网访问地址"列即可查看对应集群的IP地址。
      
      - es.port：外部访问Elasticsearch集群端口，默认为9200。
      
      - es.resource：[1]创建的索引名称。
      
      
      更多参数配置可参考开源社区文档<https://www.elastic.co/guide/en/elasticsearch/hadoop/6.1/hive.html>。
      
    
    - MRS 3.5.0-LTS及之后版本，如果CSS服务的Elasticsearch开启了HTTPS访问，则需要从Elasticsearch下载证书，将证书上传至各个HiveServer节点，并在创建Elasticsearch外部表命令的**TBLPROPERTIES** 参数中增加"es.net.ssl.truststore.location"，值为证书文件存放的路径，例如配置为
      ```
      'es.net.ssl.truststore.location'='file:///tmp/truststore.jks'
      ```
      
      
11. 执行以下命令查看创建的Elasticsearch外部表： **select \* from** *ddj_study_card_ratio_v12_test* **;**
    当返回结果信息中无报错信息，并且查询成功时，表示Hive成功对接CSS服务。查询结果如下所示：
    ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002541552479.png "点击放大")
    
 
