一.简介
1.便于使用
Spark Streaming将Apache Spark的 语言集成API 引入流处理,使您可以像编写批处理作业一样编写流式作业。它支持Java,Scala和Python。
2.容错
Spark Streaming可以开箱即用,恢复丢失的工作和操作状态【例如滑动窗口】,而无需任何额外的代码。
3.Spark集成
将流式传输与批量交互式查询相结合。通过在Spark上运行,Spark Streaming允许您重复使用相同的代码进行批处理,将流加入历史数据,或者在流状态下运行即席查询。构建强大的交互式应用程序,而不只是分析。
4.部署选项
Spark Streaming可以从HDFS, Flume,Kafka, Twitter和 ZeroMQ读取数据 。您还可以定义自己的自定义数据源。
在Spark的独立集群模式 或其它受支持的集群资源管理器上运行Spark Streaming 。它还包括一个本地运行模式进行开发。在生产中,Spark Streaming使用ZooKeeper和HDFS实现高可用性。
二.启动nc
1.简介
NetCat简称nc,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
2.启动
执行命令:nc -lk 9999
三.代码实现
package big.data.analyse.streaming import org.apache.log4j.{Level, Logger} import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} /** * Created by zhen on 2017/11/19. */ object StreamingDemo { Logger.getLogger("org").setLevel(Level.WARN) // 设置日志级别 def main(args: Array[String]) { val conf = new SparkConf().setMaster("local[2]").setAppName("StreaingTest") val ssc = new StreamingContext(conf,Seconds(10)) val lines = ssc.socketTextStream("master",9999) // 与nc端口对应 val words = lines.flatMap(_.split(" ")) val pairs = words.map(word=>(word,1)).reduceByKey(_+_) pairs.foreachRDD(row => row.foreach(println)) ssc.start() ssc.awaitTermination() ssc.stop() } }
四.效果
nc端:
Spark Streaming端: