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

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

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异常(java.net.ConnectException):操作超时
16/07/11 17:20:07 INFO HttpMethodDirector:重试请求

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

最佳答案 我会检查几件事情:

>您正在使用的Elasticsearch-Hadoop火花连接器版本.确保它不是测试版.有一个与IP解决相关的固定错误.
>由于9200是默认端口,您可以删除此行:sparkConf.set(“es.port”,“9200”)并检查.
>检查Spark环境或配置文件中是否未配置代理.
>我假设你在同一台机器上运行Elasticsaerch和Spark.您可以尝试配置机器IP地址而不是127.0.0.1

希望这可以帮助! 🙂

点赞