Spark Streaming

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

基本概念

SparkStreaming 是流式处理框架,微批次,准实时,支持可扩展、高吞吐量、容错的实时数据流处理,实时数据的来源可以是:Kafka,Flume,Twitter,ZeroMQ,或者是TCP Sockets,并且可以使用高级功能的复杂算子来处理流数据,最终没处理后的数据可以放在文件系统,数据库等
Spark Streaming 程序运行起来之后,是7*24小时运行的,task也是一直运行的,比如:task将监控到的5S数据封装到一个batch中,batch没有分布式计算特性,被封装到一个RDD中,最终这个RDD被封装到一个DStream中,DStream生成之后,可以进行算子(Transformation和OutputOperator)操作。
假设每5S一个批次,但是处理完数据需要6S,则会产生加压,积压的数据存储在内存中,时间长会造成OOM,如果存储在磁盘中,则过多的IO拉低程序性能
在这里插入图片描述

Spark Streaming 与 Storm

Storm 是纯实时流处理框架,Spark Streaming是准实时流式处理框架,效率高,吞吐量大。
Storm 的事务比Spark Streaming完善。
Storm支持动态资源调度,Spark 也支持动态资源调度,充分利用集群资源。
Spark Streaming擅长处理复杂的业务,可以使用sql查询微批数据。Storm处理简单的业务

DStream

算子

Transformation

transform

Return a new DStream by applying a RDD-to-RDD function to every RDD of the source DStream. This can be used to do arbitrary RDD operations on the DStream.
可以在算子中执行其他算子,返回新的DStream

Output Operations

Window Operations

Spark Streaming WC

下载netcat
运行命令winwods: nc -l -p 9999 #linux: nc -lk 9999

import org.apache.spark.SparkConf
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Duration, Durations, StreamingContext}
//这个单独导入一下,可能会造成DStream一些方法不可用,比如reduceByKey()找不到
import org.apache.spark.streaming.StreamingContext._

object TestStreaming {
  def main(args: Array[String]): Unit = {
   val conf = new SparkConf();
    conf.setMaster("local[4]").setAppName("test")
    val sc = new StreamingContext(conf, Durations.seconds(10))

    val value = sc.socketTextStream("localhost" , 9999 , StorageLevel.MEMORY_ONLY)

    val words = value.flatMap(_.split(",")).map((_,1)).reduceByKey(_+_)

    words.print()

    sc.start()
    sc.awaitTermination()
    sc.stop()

  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值