繁体   English   中英

rdd操作将在DStream foreachRDD函数中暂停

[英]rdd action will be suspended in DStream foreachRDD function

我遇到了错误:rdd操作将在DStream foreachRDD函数中挂起。

请参考以下代码。

import _root_.kafka.common.TopicAndPartition
import _root_.kafka.message.MessageAndMetadata
import _root_.kafka.serializer.StringDecoder
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka._


object StreamingTest {
  def main(args: Array[String]) {
    val conf = new SparkConf().setMaster("local[4]").setAppName("NetworkWordCount")
    val sc = new SparkContext(conf)
    val ssc = new StreamingContext(sc, Seconds(5))

    val kafkaParams = Map("metadata.broker.list" -> "localhost:9092")

    val topicOffset = Map(TopicAndPartition("test_log",0)->200000L)
    val messageHandler = (mmd: MessageAndMetadata[String, String]) => mmd.message
    val kafkaStream = KafkaUtils.createDirectStream[String,String,StringDecoder,StringDecoder,String](ssc,kafkaParams,topicOffset,messageHandler)

    kafkaStream.foreachRDD(rdd=>{
      println(rdd.count())
      val collected = rdd.collect()
    })

    ssc.start()
    ssc.awaitTermination()
  }
}

错误:

函数rdd.count()rdd.collect()将被挂起。

我正在使用spark版本是1.4.1。

我使用方式有误吗?

提前致谢。

如果我们未从kafka设置maxRatePerPartition,它将尝试读取所有数据,因此看起来就像是已暂停。 但是实际上它正忙于读取数据。

设置以下配置后

spark.streaming.kafka.maxRatePerPartition=1000

它将打印日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM