一、缺少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,但是也因为读写都是通过这个节点,因而性能上会受到比较大的影响。