我必须为我的流媒体作业写一个输出文件。
问题:我的工作什么时候才会停止?我杀死了服务器但没有工作。 我想从命令行停止我的工作(如果可能的话)
代码:
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.streaming.dstream
import org.apache.spark.streaming.Duration
import org.apache.spark.streaming.Seconds
import org.apache.spark._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import scala.collection.mutable.ArrayBuffer
object MAYUR_BELDAR_PROGRAM5_V1 {
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(10))
val lines = ssc.socketTextStream("localhost", args(0).toInt)
val words = lines.flatMap(_.split(" "))
val class1 = words.filter(a => a.charAt(0).toInt%2==0).map(a => a).filter(a => a.length%2==0)
val class2 = words.filter(a => a.charAt(0).toInt%2==0).map(a => a).filter(a => a.length%2==1)
val class3 = words.filter(a => a.charAt(0).toInt%2==1).map(a => a).filter(a => a.length%2==0)
val class4 = words.filter(a => a.charAt(0).toInt%2==1).map(a => a).filter(a => a.length%2==1)
class1.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class1","txt")
class2.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class2", "txt")
class3.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class3","txt")
class4.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class4","txt")
ssc.start() // Start the computation
ssc.awaitTermination()
ssc.stop()
}
}
答案 0 :(得分:1)
根据定义,流没有结束,因此除非您调用停止该方法的方法,否则它不会停止。在我的情况下,我有一个业务条件来告知该过程何时完成,所以到达这一点时,我将调用方法JavaStreamingContext.close()。我还有一个监视器,用于检查该进程在过去几分钟内是否未收到任何数据,在这种情况下,它还会关闭流。
为了累积数据,您必须使用方法updateStateByKey(在PairDStream上)。此方法需要启用检查点。
我检查了Spark代码,发现saveAsTextFiles使用foreachRDD,因此最后它将分别保存每个RDD,因此不会考虑以前的RDD。使用updateStateByKey仍将保存多个文件,但是每个文件都将考虑之前处理过的所有RDD。