Spark学习笔记-Streaming-1<转>

 Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Engine,也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备。Spark Streaming属于Spark的核心api,它支持高吞吐量、支持容错的实时流数据处理。它可以接受来自Kafka, Flume, Twitter, ZeroMQ和TCP Socket的数据源,使用简单的api函数比如 mapreducejoinwindow等操作,还可以直接使用内置的机器学习算法、图算法包来处理数据。


Spark Streaming基本操作:

[plain]  view plain copy
  1. import org.apache.log4j.Level  
  2. import org.apache.spark.SparkContext  
  3. import org.apache.spark.streaming.StreamingContext  
  4. import org.apache.spark.streaming.Seconds  
  5. import org.apache.spark.streaming.StreamingContext._  
  6. import org.apache.hadoop.io.LongWritable  
  7. import org.apache.hadoop.io.Text  
  8. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat  
  9.   
  10. object SparkStreaming {  
  11.   
  12.   def main(args: Array[String]) {  
  13.   
  14.     val sc = new SparkContext("spark://centos.host1:7077", "Spark Streaming")  
  15.   
  16.     //创建StreamingContext,20秒一个批次  
  17.     val ssc = new StreamingContext(sc, Seconds(20))  
  18.   
  19.     //获得一个DStream来负责TCP连接(监听端口:地址)  
  20.     val serverIP = "localhost"  
  21.     val serverPort = 9999  
  22.     val lines = ssc.socketTextStream(serverIP, serverPort)  
  23.   
  24.     val rdd1 = lines.flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)  
  25.     //打印到控制台  
  26.     rdd1.print()  
  27.       
  28.     //获得一个InputDStream来负责监听文件目录  
  29.     val dataDirectory = "/user/hadoop/data/temp/streaming/";  
  30.   
  31.     val inputDStream1 = ssc.fileStream[LongWritable, Text, TextInputFormat](dataDirectory)  
  32.     val rdd2 = inputDStream1.flatMap(_._2.toString().split(" ")).map(word => (word, 1)).reduceByKey(_ + _)  
  33.     rdd2.print()  
  34.       
  35.     val inputDStream2 = ssc.textFileStream(dataDirectory)  
  36.     val rdd3 = inputDStream2.flatMap(_.toString().split(" ")).map(word => (word, 1)).reduceByKey(_ + _)  
  37.     rdd3.print()  
  38.       
  39.     //特定的窗口操作,窗口操作涉及两个参数:一个是滑动窗口的宽度(Window Duration);另一个是窗口滑动的频率(Slide Duration)  
  40.     val inputDStream3 = ssc.fileStream[LongWritable, Text, TextInputFormat](dataDirectory)  
  41.     val rdd4 = inputDStream3.flatMap(_._2.toString().split(" ")).map(word => (word, 1)).reduceByKeyAndWindow(  
  42.         (x:Int, y:Int) => (x + y), Seconds(40), Seconds(20))  
  43.     rdd4.print()  
  44.       
  45.     //保存流的内容,文件默认会保存在用户的目录下  
  46.     //保存流的内容为SequenceFile, 文件目录名 : "prefix-TIME_IN_MS.suffix" rdd-1411894750000.seq   
  47.     rdd4.saveAsObjectFiles("/user/hadoop/data/temp/rdd", "seq")      
  48.     //保存流的内容为TextFile, 文件目录名 : "prefix-TIME_IN_MS.suffix" rdd-1411894750000.txt  
  49.     rdd4.saveAsTextFiles("/user/hadoop/data/temp/rdd", "txt")         
  50.     //保存流的内容为HadoopFile, 文件目录名 : "prefix-TIME_IN_MS.suffix" rdd-1411894750000.hadoop  
  51.     //这个API暂时没有正确使用出来  
  52.     //rdd4.saveAsHadoopFiles("/user/hadoop/data/temp/rdd", "hadoop")  
  53.     //rdd4.saveAsHadoopFiles("/user/hadoop/data/temp/rdd", "hadoop", Text.class, IntWritable.class, TextOutputFormat.class, conf)  
  54.       
  55.     //开始运行  
  56.     ssc.start()  
  57.     //计算完毕退出  
  58.     ssc.awaitTermination()  
  59.   
  60.     sc.stop()  
  61.   }  
  62.     
  63. }  

你可能感兴趣的:(Spark学习笔记-Streaming-1<转>)