在Spark Streaming Scala中将RDD写入Elasticsearch需要时间

时间:2018-12-09 06:53:43

标签: scala apache-spark elasticsearch spark-streaming

我开发了Spark Streaming(River方法),该方法从kafka读取数据并处理数据并写入elasticsearch。

相同的代码是用Java开发的(现在我们正在用spark scala编写相同的代码),当与Java性能进行比较时,spark效果不佳。

我观察到的是,当我们写ES时,需要花费时间。

这是我的高级代码:

val kafkaStreams: util.List[DStream[String]] = new util.ArrayList[DStream[String]]

for(i <- 0 until topic_threads){
      var data = KafkaUtils.createStream(ssc,kafkaConf,topic).map(line => line._2)
      kafkaStreams.add(data)
    }
  

//下面的union改善了spark 1.6.2的性能   文档

val unifiedStream = ssc.union(kafkaStreams)


unifiedStream.persist(StorageLevel.MEMORY_ONLY)
if(flagY){
   val dataES = unifiedStream.map(rdd => processData(rdd))
   dataES.foreachRDD(rdd => {
     ElasticUtils.saveToEs(rdd, index_Name, index_Type)
})

在processData方法中,我只是解析来自kafka的红色数据。

任何人都可以让我知道您的经验或建议,以改善火花蒸汽(scala)接收器进近性能。

由于性能低下,批次堆积起来,并且批次调度中的延迟增加。

0 个答案:

没有答案