Scala 火花流MQTT
我一直在使用spark从卡夫卡传输数据,这非常简单 我认为使用MQTT UTIL也很容易,但这不是出于某种原因 我正在尝试执行下面的代码Scala 火花流MQTT,scala,apache-spark,mqtt,spark-streaming,Scala,Apache Spark,Mqtt,Spark Streaming,我一直在使用spark从卡夫卡传输数据,这非常简单 我认为使用MQTT UTIL也很容易,但这不是出于某种原因 我正在尝试执行下面的代码 val sparkConf = new SparkConf(true).setAppName("amqStream").setMaster("local") val ssc = new StreamingContext(sparkConf, Seconds(10)) val actorSystem = ActorSystem() implic
val sparkConf = new SparkConf(true).setAppName("amqStream").setMaster("local")
val ssc = new StreamingContext(sparkConf, Seconds(10))
val actorSystem = ActorSystem()
implicit val kafkaProducerActor = actorSystem.actorOf(Props[KafkaProducerActor])
MQTTUtils.createStream(ssc, "tcp://localhost:1883", "AkkaTest")
.foreachRDD { rdd =>
println("got rdd: " + rdd.toString())
rdd.foreach { msg =>
println("got msg: " + msg)
}
}
ssc.start()
ssc.awaitTermination()
奇怪的是spark记录了我在控制台中发送的消息,而不是我的println
它记录了如下内容:
19:38:18.803[循环计时器-块生成器]调试
o、 a.s.s.receiver.BlockGenerator-中的最后一个元素
输入-0-1435790298600是一些消息
foreach
是一个分布式操作,因此您的println可能正在worker上执行。如果您想看到一些本地打印出来的消息,可以使用数据流上的内置print
功能,或者代替foreachRDD
将一些元素收集(或提取)回驱动程序并在那里打印。希望这对Spark Streaming有所帮助,祝您好运:)如果您只想打印传入的消息,请尝试这样的方法,而不是使用for_(从工作的Python版本翻译,所以一定要检查Scala打字错误):
我刚刚意识到我的问题在于MQTT流。使用Kafka Stream,我甚至可以使用.master(“local”)运行嵌入式spark版本并调试我的应用程序。运行MQTT流,我无法测试它。在集群节点中测试,它可以工作=(如果要在本地模式下运行,请尝试使用“local[4]”主控键,以便接收器和其他设备也可以运行。
val mqttStream = MQTTUtils.createStream(ssc, "tcp://localhost:1883", "AkkaTest")
mqttStream.print()