一、基础准备
1,查看es对应版本,下载版本号一样的jar包, 测试环境用的es7.8.0
下载地址https://jar-download.com/artifacts/org.elasticsearch/elasticsearch-hadoop-hive
2,将下载好的jar包elasticsearch-hadoop-hive-7.8.0.jar上传到hdfs中
放在存储hive udf的目录下。
3,引入jar包
先查看已经引入的jar包有哪些
list jars;
引入jelasticsearch-hadoop-hive-7.8.0.jar
add jar hdfs://nameservice1/user/hive/udf/elasticsearch-hadoop-hive-7.8.0.jar
创建hive表并导入测试数据
CREATE EXTERNAL TABLE test.dxt_test_to_es (
order_zhu string,
order_zi string,
create_time string,
jifei_status string,
fuwufei string,
num_id string,
zhubo_id string,
neirong_id string,
zhubo_nick string
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'dxt_test_to_es/info',
'es.index.auto.create' = 'false',
'es.nodes' = 'es.xxxx.com',
'es.nodes.wan.only'='true',
'es.read.metadata'='true',
'es.port'='80',
'es.mapping.names'='order_zhu:order_zhu, order_zi:order_zi, create_time:create_time, jifei_status:jifei_status, fuwufei:fuwufei, num_id:num_id, zhubo_id:zhubo_id, neirong_id:neirong_id, zhubo_nick:zhubo_nick'
);
insert overwrite table test.dxt_test_to_es select order_zhu,order_zi,create_time,jifei_status,fuwufei,num_id,zhubo_id,neirong_id,zhubo_nick from v_tese_order
报错1
org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: Cannot detect ES version - typically this happens if the network/Elasticsearch cluster is not accessible or when targeting a WAN/Cloud instance without the proper setting 'es.nodes.wan.only'
去linux中使用命令交互方式操作hive,发现是连接es服务超时被拒绝,因为9200被Nginx代理了,不能直接访问9200,通过域名+80端口的方式可以通过。
继续 insert overwrite
报错2
Task with the most failures(4):
-----
Task ID:
task_1602569057109_12652_m_000000
URL:
http://0.0.0.0:8088/taskdetails.jsp?jobid=job_1602569057109_12652&tipid=task_1602569057109_12652_m_000000
-----
Diagnostic Messages for this Task:
Error: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/Credentials
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:169)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:465)
&nbs