我的代码如下:
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("Spark-Hbase").setMaster("local[2]")
.set("es.index.auto.create", "true")
.set("es.resource", "test")
.set("es.nodes", "127.0.0.1")
.set("es.output.json", "true")
/* More code */
DStream.map {
_._2
}.foreachRDD { (rdd: RDD[String]) =>
EsSpark.saveJsonToEs(rdd, "127.0.0.1")
}
我不断收到elastic search
es.nodes属性的错误消息:
Caused by: org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: invalid pattern given 127.0.0.1/
at org.elasticsearch.hadoop.util.Assert.isTrue(Assert.java:50)
at org.elasticsearch.hadoop.serialization.field.AbstractIndexExtractor.compile(AbstractIndexExtractor.java:51)
at org.elasticsearch.hadoop.rest.RestService.createWriter(RestService.java:398)
at org.elasticsearch.spark.rdd.EsRDDWriter.write(EsRDDWriter.scala:40)
at org.elasticsearch.spark.rdd.EsSpark$$anonfun$saveToEs$1.apply(EsSpark.scala:67)
at org.elasticsearch.spark.rdd.EsSpark$$anonfun$saveToEs$1.apply(EsSpark.scala:67)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
... 3 more
通过127.0.0.1
我做错了什么?我尝试将端口设为127.0.0.1:9200
,但仍然无效。有没有人有任何指针?感谢。
答案 0 :(得分:1)
没关系我弄清楚了。这种方法saveJsonToEs
:
EsSpark.saveJsonToEs(rdd, "127.0.0.1")
不使用弹性搜索群集的IP地址,而是使用弹性搜索中的索引将String
rdd保存到。
所以它应该是这样的:
EsSpark.saveJsonToEs(rdd, "test/sampleApp") /* Where `test` is the `index` and `sampleApp` is the `type` */
第二个参数必须是Requires the format <index>/<type>
类型。索引和类型可以是对您的特定应用程序有意义的任何内容。请注意,索引不必在先前的弹性搜索中出现。您可以使用Spark Conf
对象上的属性:set("es.index.auto.create", "true")
自动创建它。如我上面的属性所示。
供参考:https://www.elastic.co/guide/en/elasticsearch/hadoop/current/spark.html
在Command + f上方的链接中搜索Writing existing JSON to Elasticsearch
。