现有一需求,需要将Hive的表与ElasticSearch关联起来,数据插入Hive表后,可以直接在elasticsearch中查询。
请前往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去查询了。





