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

猜你喜欢

转载自blog.csdn.net/qq_44696532/article/details/134708040