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

khr*_*hai 6 containers elasticsearch docker apache-spark docker-compose

我有一个 elasticsearch docker 镜像在 127.0.0.1:9200 上监听,我使用 sense 和 kibana 对其进行了测试,它工作正常,我能够索引和查询文档。现在,当我尝试从 Spark 应用程序写入它时

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")
Run Code Online (Sandbox Code Playgroud)

连接失败,一直重试

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 给出的 IPAddress 来获取 Elasticsearch 映像,但这也不起作用。但是,当我使用 Elasticsearch 的本机安装时,Spark 应用程序运行良好。有任何想法吗?

Eya*_*ari 1

我会检查几件事:

  • 您正在使用的 Elasticsearch-Hadoop Spark 连接器版本。确保它不是测试版。修复了与 IP 解析相关的错误。

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

  • 检查您的 Spark 环境或配置文件中是否没有配置代理。

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

希望这可以帮助!:)