首页 文章

为什么启动StreamingContext失败并出现“IllegalArgumentException:要求失败:没有注册输出操作,所以无需执行”? [重复]

提问于
浏览
3

这个问题在这里已有答案:

我在火花上部署了主人和 Worker . 当我尝试使用SparkStreaming进行某些计算时,它会失败 . 我在sbt控制台中创建了StreamingContext .

请参阅下面的错误消息,示例代码,build.sbt以及运行该程序的命令


错误消息

ERROR StreamingContext: Error starting the context, 
marking it as stopped
java.lang.IllegalArgumentException: requirement failed: No output operations 
registered, so nothing to execute
at scala.Predef$.require(Predef.scala:224)
...

代码

/* StreamingEx.scala */
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.streaming.{ Seconds, StreamingContext }

val conf = new SparkConf().setMaster("spark://169.254.112.244:7077").setAppName("TestingStreaming")
val ssc = new StreamingContext(conf, Seconds(1))
val lines = ssc.socketTextStream("localhost", 5577)
val words = lines.flatMap(_.split(" "))
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)
ssc.start()
ssc.awaitTermination()

built.sbt

name := "StreamingEx"

version := "1.0"

scalaVersion := "2.11.11"
val sparkVersion = "2.1.1"

libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion
libraryDependencies += "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided"

1 回答

  • 2

    java.lang.IllegalArgumentException:要求失败:未注册任何输出操作,因此无需执行任何操作

    这就是问题,即"no output operations registered",这是使用 DStream "actions"注册的操作,如print(突出显示我的) .

    print():Unit打印在此DStream中生成的每个RDD的前十个元素 . 这是一个输出操作符,因此这个DStream将被注册为输出流并在那里实现 .

    有了它,可以归结为 ssc.start() 之前的以下行:

    wordCounts.print()
    

    请参阅Spark官方文档的Output Operations on DStreams

    输出操作允许将DStream的数据推送到外部系统,如数据库或文件系统 . 由于输出操作实际上允许外部系统使用转换后的数据,因此它们会触发所有DStream转换的实际执行(类似于RDD的操作) .

相关问题