SparkStreaming介绍及mapreduce/fink框架对比

计算框架对比:

在这里插入图片描述

1. SparkStreaming 简介

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

2. SparkStreaming 与 Storm 的区别

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

3. SparkStreaming 初始理解

在这里插入图片描述

4. SparkStreaming 代码

代码注意事项:

  • 启动 socket server 服务器:nc –lk 9999
  • receiver 模式下接受数据,local 的模拟线程必须大于等于 2,一个
    线程用来 receiver 用来接受数据,另一个线程用来执行 job。
  • Durations 时间设置就是我们能接收的延迟度。这个需要根据集群
    的资源情况以及任务的执行情况来调节。
  • 创建 JavaStreamingContext 有两种方式
    (SparkConf,SparkContext)
  • 所有的代码逻辑完成后要有一个 output operation 类算子。
  • JavaStreamingContext.start() Streaming 框架启动后不能再次添
    加业务逻辑。
  • JavaStreamingContext.stop() 无参的 stop 方法将 SparkContext
    一同关闭,stop(false),不会关闭 SparkContext。
  • JavaStreamingContext.stop()停止之后不能再调用 start。
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Durations, StreamingContext}

/**
 * SparkStreaming 读取Socket中的数据进行实时wordcount统计。
 * 注意:
 * 1).nc -lk 9999 在linux中启动一个socke服务器
 * 2).本地运行SparkStreaming程序需要设置 local[2] ,如果集群中运行,需要至少两个core
 * 3).写SparkStreaming程序需要创建StreamingContext对象,创建StreamingContext对象有两种方式:
 * ①.val ssc = new StreamingContext(sc,Durations.Seconds(xxx))
 * ②.val ssc = new StreamingContext(conf,Durations.Seconds(xxx))
 * 4).Durations.seconds(5) 代表batchInterval ,我们指定的可以接受的数据延迟度。可以设置:seconds,minutes,milliseconds
 * 如何设置batchInterval 需要参照webui 调节。
 *
 * 5).SparkStreaming 启动之后,不能添加新的代码逻辑。
 * 6).SparkStreaming.stop(stopSparkContext = true),在关闭StreamingContext时,需要不需要关闭parkContext对象
 * 7).SparkStreaming.stop 之后不能再次调用SparkStreaming.start()重新将程序启动。
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    val context: StreamingContext = new StreamingContext(new SparkConf()
      .setAppName("WordCount")
      .setMaster("local[2]"), Durations.seconds(5))
    context.sparkContext.setLogLevel("Error")
    val lines: ReceiverInputDStream[String] = context.socketTextStream("node4", 9999)
    val words: DStream[String] = lines.flatMap(line => line.split(" "))
    words.map(word => (word, 1))
      .reduceByKey((v1, v2) => v1 + v2)
      .print()

    context.start()
    context.awaitTermination()
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值