Spark应用程序无法写入在docker中运行的elasticsearch集群

时间:2016-07-11 16:29:36

标签: elasticsearch apache-spark docker containers docker-compose

我有一个在127.0.0.1:9200上监听的elasticsearch docker镜像,我使用sense和kibana测试它,它工作正常,我能够索引和查询文档。现在,当我尝试从火花App

写入它
val sparkConf = new SparkConf().setAppName("ES").setMaster("local")
sparkConf.set("es.index.auto.create", "true")
sparkConf.set("es.nodes", "127.0.0.1")
sparkConf.set("es.port", "9200")
sparkConf.set("es.resource", "spark/docs")


val sc = new SparkContext(sparkConf)
val sqlContext = new SQLContext(sc)
val numbers = Map("one" -> 1, "two" -> 2, "three" -> 3)
val airports = Map("arrival" -> "Otopeni", "SFO" -> "San Fran")
val rdd = sc.parallelize(Seq(numbers, airports))

rdd.saveToEs("spark/docs")

无法连接,并继续重试

16/07/11 17:20:07 INFO HttpMethodDirector: I/O exception (java.net.ConnectException) caught when processing request: Operation timed out 16/07/11 17:20:07 INFO HttpMethodDirector: Retrying request

我尝试使用docker inspect给出的IP地址来获取elasticsearch图像,这也不起作用。但是,当我使用elasticsearch的本机安装时,Spark App运行正常。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我会检查一些事情:

  • 您正在使用的Elasticsearch-Hadoop火花连接器版本。确保它不是测试版。有一个与IP解决相关的固定错误。

  • 由于9200是默认端口,因此您可以删除此行:sparkConf.set("es.port", "9200")并检查。

  • 检查Spark环境或配置文件中是否配置了代理。

  • 我假设你在同一台机器上运行Elasticsaerch和Spark。您可以尝试配置机器IP地址而不是127.0.0.1

希望这有帮助! :)

答案 1 :(得分:1)

另外,设置配置

es.nodes.wan.onlytrue

如果您在写入ES时遇到问题,请参阅此answer

答案 2 :(得分:0)

有同样的问题,另一个问题是使用sparkConf.set()设置的confs没有效果。但是为conf提供保存功能是可行的,就像这样:

rdd.saveToEs("spark/docs", Map("es.nodes" -> "127.0.0.1", "es.nodes.wan.only" -> "true"))