我有一个在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运行正常。有什么想法吗?
答案 0 :(得分:1)
我会检查一些事情:
您正在使用的Elasticsearch-Hadoop火花连接器版本。确保它不是测试版。有一个与IP解决相关的固定错误。
由于9200是默认端口,因此您可以删除此行:sparkConf.set("es.port", "9200")
并检查。
检查Spark环境或配置文件中是否配置了代理。
我假设你在同一台机器上运行Elasticsaerch和Spark。您可以尝试配置机器IP地址而不是127.0.0.1
希望这有帮助! :)
答案 1 :(得分:1)
答案 2 :(得分:0)
有同样的问题,另一个问题是使用sparkConf.set()
设置的confs没有效果。但是为conf提供保存功能是可行的,就像这样:
rdd.saveToEs("spark/docs", Map("es.nodes" -> "127.0.0.1", "es.nodes.wan.only" -> "true"))