【发布时间】:2018-10-18 14:09:06
【问题描述】:
我正在尝试将简单的数据写入 ElasticSearch 示例。但是,我不断收到此错误:
EsHadoopIllegalArgumentException: Cannot detect ES version - typically this happens if the network/Elasticsearch cluster is not accessible or when targeting a WAN/Cloud instance without the proper setting 'es.nodes.wan.only
我对 Spark 和 ElasticSearch 的依赖项:
scalaVersion := "2.11.5"
val sparkVersion = "2.3.0"
resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"com.typesafe" % "config" % "1.3.0",
"org.elasticsearch" %% "elasticsearch-spark-20" % "6.2.4"
)
这是我的示例代码:
object App {
def main(args: Array[String]) {
val sparkConf = new SparkConf()
.setMaster(args(0))
.setAppName("KafkaSparkStreaming")
sparkConf.set("es.index.auto.create", "true")
val sparkSession = SparkSession
.builder()
.config(sparkConf)
.getOrCreate()
val streamingContext = new StreamingContext(sparkSession.sparkContext, Seconds(3))
val sparkContext = streamingContext.sparkContext
sparkContext.setLogLevel("ERROR")
val sqlContext = new SQLContext(sparkContext)
val numbers = Map("one" -> 1, "two" -> 2, "three" -> 3)
val airports = Map("arrival" -> "Otopeni", "SFO" -> "San Fran")
sparkContext.makeRDD(Seq(numbers, airports)).saveToEs("spark/docs")
streamingContext.start()
streamingContext.awaitTermination()
}
}
我使用 docker 映像运行 ElasticSearch。这是我的 docker-compose.yml 文件:
version: '3.3'
services:
kafka:
image: spotify/kafka
ports:
- "9092:9092"
environment:
- ADVERTISED_HOST=localhost
elasticsearch:
image: elasticsearch
kibana:
image: kibana
ports:
- "5601:5601"
什么可能导致此异常?非常感谢您的帮助。
【问题讨论】:
-
我看到了。而且它没有为这个问题提供任何解决方案
标签: scala apache-spark elasticsearch spark-streaming