hive创建ES外部表过程中的问题

一、缺少jar包:httpclient

报错:

"HiveServer2-Handler-Pool: Thread-696" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/protocol/ProtocolSocketFactory

需要加载commons-httpclient-3.1.jar

二、缺少jar包:eshadoop

报错:

FAILED: SemanticException Cannot find class 'org.elasticsearch.hadoop.hive.EsStorageHandler'

需要加载与正在使用的ES版本相同的版本号的:elasticsearch-hadoop-7.6.1.jar

三、在hive创建ES外表之后无法正常查询

  报错:

Error: java.io.IOException: org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: Expected to find keystore file at [hdfs:///path/to/esh.keystore] but was unable to. Make sure that it is available on the classpath, or if not, that you have specified a valid file URI. (state=,code=0)

   这里使用的是将keystore放在hdfs上的方式,

  在建表语句中需要指定属性:'es.nodes.wan.only'='true',

具体解释:

配置“es.nodes.wan.only”在https://www.elastic.co/guide/en/elasticsearch/hadoop/master/configuration.html可以找到其详细的信息:    

    其意思也就是通过公网我访问云上或者一些限制性网络上的ES实例时,如AWS,通过声明该配置就会禁用发现其它节点的行为,后续的读和写都只会通过这个指定的节点进行操作,增加了该属性就可以访问云上或者受限制网络中的ES,但是也因为读写都是通过这个节点,因而性能上会受到比较大的影响。

参考:https://blog.csdn.net/fenglibing/article/details/80478551

四、从本地加载keystore

原文地址:https://www.cnblogs.com/1394htw/p/13037124.html