2017-01-23 47 views
0

我試圖用pyspark來查詢Elasticsearch指數,但沒有成功:用pyspark查詢Elasticsearch索引:如何指定es.nodes?

] ./bin/pyspark --driver-class-path=jars/elasticsearch-hadoop-2.2.0.jar 

在IPython中,火花2.0.1版:

In [1]: es_read_conf = { "es.resource" : "test/docs" , "es.nodes" : ["xx.xx.xx.aa","xx.xx.xx.bb","xx.xx.xx.cc"],"es.port" : "9200", "es.net.http.auth.user": "myusername", "es.net.http.auth.pass": "mypassword"} 
es_rdd = sc.newAPIHadoopRDD(inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",keyClass="org.apache.hadoop.io.NullWritable", valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", conf=es_read_conf) 

我得到以下錯誤:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.newAPIHadoopRDD. 
: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String 

看來,將es.nodes的python列表轉換爲Java字符串存在問題。我試過用字符串只由我elasticsearch主節點的地址(「xx.xx.xx.aa」),但我得到另一個錯誤:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.newAPIHadoopRDD. 
: org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: [HEAD] on [test/docs] failed; server[xx.xx.xx.bb:9202] returned [502|Bad Gateway:] 

有時錯誤是指數據節點BB,有時CC。有趣的是,如果我多次運行相同的命令,它會發生,我沒有得到任何錯誤(也許這是當查詢只對主節點運行?)。用localhost作爲唯一的es.nodes運行命令沒有問題。

回答

0

看到ES-的Hadoop文檔enter link description here

你需要設置以下屬性引發的conf:

conf.set("es.nodes","<your host>") 
+0

謝謝您的回答利奧爾。我嘗試了你的建議,但是IR提出了同樣的錯誤。 – Patrick

+0

你應該把只有一個節點ES有自我發現能力.. 傳遞它作爲字符串(不是一個列表) –

+0

這就是我最初做的,但我也嘗試了一個節點列表。沒有成功。 – Patrick

相關問題