念念不忘
必会回响

将Hive表与ElasticSearch关联

现有一需求,需要将Hive的表与ElasticSearch关联起来,数据插入Hive表后,可以直接在elasticsearch中查询。

1.下载elasticsearch-hadoop依赖

请前往https://www.elastic.co/downloads/past-releases下载对应版本的依赖包,我这边的ES集群版本为5.2.2。所以下面的示例都已ES5.2.2版本来演示。

解压依赖包,将其中的elasticsearch-hadoop-5.2.2.jar上传到hive的机器上。

2.给Hive添加Elasticsearch的依赖

在hive的机器上执行hive,进入交互模式:

hive

执行如下命令,将ES的依赖添加到hive中去。

ADD JAR /var/lib/hadoop-hdfs/elasticsearch-hadoop-5.2.2.jar;

看到如下提示:

Added [/var/lib/hadoop-hdfs/elasticsearch-hadoop-5.2.2.jar] to class path
Added resources: [/var/lib/hadoop-hdfs/elasticsearch-hadoop-5.2.2.jar]

此时表示hive已经支持elasticsearch了。
接着创建hive表

CREATE EXTERNAL TABLE user_hive (
    ID  BIGINT,
    USER_ID BIGINT,
    USER_NAME STRING
) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES( 'es.mapping.id'='id','es.resource' = 'user_hive/user_info', 'es.nodes'='10.10.161.1','es.port'='9200','es.mapping.date.rich' = 'false');

其中'es.mapping.id'='id'表示将hive表中的id作为es中的索引ID。参考文档:https://www.elastic.co/guide/en/elasticsearch/hadoop/current/hive.html#_writing_data_to_elasticsearch_2
'es.resource' = 'user_hive/user_info'表示elasticsearch中的索引名称/索引类型
es.nodes表示elasticsearch的节点地址。
接着创建ElasticSearch,mapping如下:

{
   "mappings": {
      "user_info": {
		"properties": {
          "ID": {
            "type": "long"
          },
          "USER_ID": {
            "type": "integer"
          },
          "USER_NAME": {
            "type": "text"
          }
        }
      }
    }
}

在hive中执行如下命令查看数据:

insert into table user_hive select 1,2,'abc';

在Kibana中查看数据

GET user_hive/user_info/_search

{
        "_index": "user_hive",
        "_type": "user_info",
        "_id": "1",
        "_score": 1,
        "_source": {
          "ID": 1,
          "USER_ID": 2,
          "USER_NAME": "abc"
        }
}

此时将数据加载到Hive的时候,便可以通过ElasticSearch去查询了。

赞(1) 打赏
未经允许不得转载:堆上小栈 » 将Hive表与ElasticSearch关联

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册