Spark学习(七):SparkStreaming

目录

1  什么是SparkStreaming

1.1 SparkStreaming简介、

1.2 SparkStreaming与Storm的区别

2  SparkStreaming初始

2.1 官方自带的WordCount程序

2.2 IDEA编程

2.3 StreamingContext的cores配置

2.4 DStream中的transformation和action算子

2.4.1 transformation算子

2.4.2 action算子

2.5 Driver HA(Standalone或者Mesos)

3.kafka

3.1 简介:

3.2 kafka中的术语

3.3 kafka集群的部署

4  SparkStreaming+kafka

4.1 streaming和kafka整合

4.2 代码实现

4.3 streaming-kafka-wordcount


1  什么是SparkStreaming

1.1 SparkStreaming简介、

官网:http://spark.apache.org/streaming/

特点:

  • 便于使用
  • 容错
  • spark集成

SparkStreaming是流式处理框架,是Spark API的扩展,支持可扩展、高吞吐量、容错的实时数据流处理,实时数据的来源可以是:Kafka, Flume, Twitter, ZeroMQ或者TCP sockets,并且可以使用高级功能的复杂算子来处理流数据。例如:map,reduce,join,window 。最终,处理后的数据可以存放在文件系统,数据库等,方便实时展现。

和Spark基于RDD的概念很相似,Spark Streaming使用离散化流(discretized stream)作为抽象表示,叫作DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此 得名“离散化”)。

DStream 可以从各种输入源创建,比如 Flume、Kafka 或者 HDFS。创建出来的DStream 支持两种操作,一种是转化操作(transformation),会生成一个新的DStream,另一种是输出操作(output operation),可以把数据写入外部系统中。DStream 提供了许多与 RDD 所支持的操作相类似的操作支持,还增加了与时间相关的新操作,比如滑动窗口。

Discretized Stream or DStream 是 Spark Streaming 提供的基本抽象. 它代表了一个连续的数据流, 无论是从 source(数据源)接收到的输入数据流, 还是通过转换输入流所产生的处理过的数据流. 在内部, 一个 DStream 被表示为一系列连续的 RDDs, 在一个 DStream 中的每个 RDD 包含来自一定的时间间隔的数据,所以说应用与DStream的任何操作转化在底层来说都是对于RDDs的操作:如下图所示.

1.2 SparkStreaming与Storm的区别

  1. Storm是纯实时的流式处理框架,SparkStreaming是准实时的处理框架(微批处理)。因为微批处理,SparkStreaming的吞吐量比Storm要高。
  2. Storm 的事务机制要比SparkStreaming的要完善。
  3. Storm支持动态资源调度。(spark1.2开始和之后也支持)
  4. SparkStreaming擅长复杂的业务处理,Storm不擅长复杂的业务处理,擅长简单的汇总型计算。

2  SparkStreaming初始

2.1 官方自带的WordCount程序

[root@hadoop103 ~]# nc -lk 9999

-bash: nc: command not found     //如果出现这个提示

[root@hadoop103 ~]# yum -y install nc     //安装即可

 然后在另一台节点上监听hadoop103节点的9999端口,运行下面spark自带的WordCount程序

$SPARK_HOME/bin/run-example streaming.NetworkWordCount hadoop103 9999

注意:如果虚拟机的cores 只有一个,sparkstreaming的程序就不能读取数据,详解往下面看

2.2 IDEA编程

操作SparkStreaming首先导入下面的依赖

<!-- 导入SparkStreaming的依赖 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.2.0</version>
</dependency>

// 配置日志的显示级别,
Logger.getLogger("org").setLevel(Level.ERROR)   //具体日志信息问题:请点这里

def main(args: Array[String]): Unit = {
  val conf = new SparkConf().setMaster("local[*]").setAppName(this.getClass.getSimpleName)
  val sc = new SparkContext(conf)

  val ssc: StreamingContext = new StreamingContext(sc,Seconds(2))  //Seconds() 设置一个批次的时间间隔

  //读取socket端口的数据
  val textStream: ReceiverInputDStream[String] = ssc.socketTextStream("hadoop103",9999)

  //对读取到的数据进行处理
  val result: DStream[(String, Int)] = textStream.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)

  //调用action算子
  result.print()  //默认打印10

  //Spark Streaming 程序的必备
  ssc.start()
  //阻塞程序,挂起
  ssc.awaitTermination()
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值