WANG LH , Research & Development

阿里云上 Hive 同步数据到 Es 过程

2021.05.31 22:05

下载es-hadoop

下载 es-hadoop,解压会有多个jar包,我们只使用这个elasticsearch-hadoop-6.3.2.jar

创建hadoop和es关联表

打开hive控制台

-- 亲测这种无效 (原因待查)
add jar /root/xuminghao/jars/elasticsearch-hadoop-6.4.3.jar;

-- 创建表
-- 'es.nodes.wan.only'='true', 集群设置
CREATE EXTERNAL TABLE tmp.es_product1(
    product_id string, 
    product_name string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.resource' = 'hive/product', 
'es.nodes'='172.21.194.82(阿里云内网ip地址)',
'es.port'='9200',
'es.nodes.wan.only'='true',
'es.mapping.id' = 'product_id',
'es.write.operation'='upsert',
'es.index.auto.create'='true',
'es.net.http.auth.user'='****',
'es.net.http.auth.pass'='****'
);

-- 插入数据,es即可查询到数据
INSERT into TABLE tmp.es_product1 select product_id,  product_name from tmp.product;

排坑,版本相关问题

hive控制台add jar命令无效,可以使用这二种方式永久添加jar,但其实这并不是产生问题的原因

$ bin/hive -hiveconf hive.aux.jars.path=/path/elasticsearch-hadoop.jar

接着继续insert,一直报错,Unsupported/Unknown Elasticsearch version 6.3.2 ,经过排查发现阿里云使用es-hadoop版本是5.5.3的。阿里云5.5.3的es-hadoop jar包放在这里 /opt/apps/extra-jars/ 然后将所有节点目录的旧版本替换到新版本elasticsearch-hadoop-6.3.2.jar即可,最终数据就成功同步了。

来两张结果图

总结

万万没想到阿里云这么方便的把es-hadoop也集成进来了,就是版本不太符合。以后如果再使用跟阿里云相关的服务,如果对版本要求不高,可以尽量去查看已有的服务的版本支持,少走弯路,由于自己对hadoop生态的不熟,这次排除jar包的问题花了很久时间。