Spark Streaming第一个示例

Spark Streaming

http://spark.apache.org/docs/latest/streaming-programming-guide.html#overview

Spark Streaming是Spark Core的进一步扩展,可以实现数据流的可扩展、高吞吐、容错处理。Spark Streaming处理的数据可以来源于多种方式,比如Kafka、Flume、Kinesis或者TCP传输等,这些流数据经过Spark Streaming进行复杂的处理加工。最终,将处理的结果保存到文件系统、数据库或者实时的展示界面。

Spark Streaming的工作原理

Spark Streaming接受实时的数据流并将数据流拆分为一个一个的批次(micro batch),通过Spark引擎处理(rdd),产生最终的结果流

实际上:流处理转批处理的过程

Spark提供了高等级的抽象,称为离散流或者DStream(DStream表现为连续的数据流)。DStream一般是通过输入的数据流进行构建(如:kafka、Flume、Kinesis)或者其它的DStream。实际上在内部,一个DStream表现为一组RDD的序列

什么是流数据?什么事批数据?

​ 流数据:类似于水流,没有范围和界限。表现为有起始,但没有终止。

​ 批数据:有范围的数据,范围可以是一个小时、一天、一个月等,也就是数据有起始,有终止

第一个Spark Streaming例子

单词计数(TCP数据服务器的访问数据)

导入Spark Streaming依赖
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.4.4</version>
    <scope>provided</scope>
</dependency>

注意:数据源如果是kafka、flume、kinesis等类型,需要额外引入spark-streaming-xyz_2.12依赖

测试代码
package example1

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object QuickExample {
  def main(args: Array[String]): Unit = {
    // StreamingContext是所有Spark Streaming应用的入口
    val conf = new SparkConf().setMaster("local[2]").setAppName("quick example")
    val ssc = new StreamingContext(conf, Seconds(5))
    // 通过TCP Source创建DStream对象
    val lines = ssc.socketTextStream("spark", 9999)
    // 将此DStream中生成的每个RDD的前十个元素打印到控制台
    lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).print()

    // 启动计算
    ssc.start()
    // 等待计算终止
    ssc.awaitTermination()
  }
}
安装Netcat,获取绑定端口的访问数据
[root@Spark spark-2.4.4]# yum install -y nc
运行Spark Streaming应用,并通过Netcat发送测试数据
[root@Spark spark-2.4.4]# nc -lk 4444
Hello Scala
Hello Hadoop
Hello Hadoop
Hello Hadoop
Hello Hadoop
Hello Hadoop

测试结果
-------------------------------------------
Time: 1562123560000 ms
-------------------------------------------
(Hello,1)
(Wolrd,1)

-------------------------------------------
Time: 1562123595000 ms
-------------------------------------------
(Hello,1)
(Spark,1)

Time: 1562123600000 ms
-------------------------------------------
(Hello,1)
(Scala,1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值