弹性搜索无效模式

时间:2016-07-20 16:57:04

标签: scala elasticsearch apache-spark

我的代码如下:

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,但仍然无效。有没有人有任何指针?感谢。

1 个答案:

答案 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