一、缺少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