Spark学习日志4

    xiaoxiao2021-03-26  24

    Spark Stream学习总结:

    1. Spark Stream 基于DStream,离散化数据流来处理流数据。相当于RDD对于Spark而言。

    DStream本质上是有一串时间上离散的RDD组成。

    2. 要处理流数据,首先要创建一个StreamContext, 而StreamContext在底层会创建出SparkContext,以下例子是创建一个streamContext,其中第二个参数指定了多少时间处理一次新数据的时间间隔,并用socketTextStream方法监听本地7777端口的数据流,将接收到的数据流转化为Dstream

    val ssc = newe StreamContext(conf, Seconds(1)) val = lines = ssc.socketTextStream("localhost", 7777) val errorLines = lines.filter(_.contains("error")) errrorLines.print() scc.start() //启动流计算环境 scc.awaitTermination()// 执行会在另一个进程里完成,所以要等待完成 3. Spark Stream 架构:

    Spark Streaming 使用微批次架构,将流计算当做一系列连续的小规模批处理来对待。通过将一段时间上的流数据,进行相等时间间隔的分割,形成一串离散的数据批次。 4. Dstream转化操作: 转化操作分为无状态的转化操作和有状态的转化操作。 无状态的转化操作有map,flatMap,filter,repartition, reduceByKey, groupByKey等.因为Dstream是由一串离散的RDD组成,转化操作其实会应用到每一个RDD上。 例如reduceByKey,会规约每个RDD上的键值对,不过不会跨RDD规约,如果要跨RDD则需要用到有状态的转化操作。

    有状态的转化操作:在进行有状态的转化操作时,需要设置检查点,例如streamContext.checkpoint(Dir)

    window(windowDuration:int, batchInterval:int), 接受两个参数,一个是窗口时长,另一个是滑动步长。

    window转化方法会将一个窗口时长内的RDD进行整合,比如window(Seconds(30), Seconds(10)).count会对30s的一个窗口进行计数,步长则是10s

    基于窗口的规约方法

    reduceByKeyAndWindow(

    {(x, y) => x+y},

    {(x,y) => x -y},

    Seconds(30),

    Seconds(10))

    5.不间断运行中的HA:

    设置检查点,streamContext.checkpoint(Dir)。

    检查点机制使得SparkStream将定期的把数据存储到HDFS等可靠存储中,一旦节点down了,可以通过存储在文件系统中的RDD谱系追溯到上个检查点,然后开始重新计算。

    1)如果驱动器driver失败了,如果需要HA,需要特殊的创建streamContext的方法:

    def createStreamingContext() = { ... val sc = new SparkContext(conf) val ssc = new StreamingContext(sc, Seconds(1)) ssc.checkpoint(checkpointDir) } val ssc = StreamingContext.getOrCreate(checkpointDir, createStreamingContext _) 6影响steaming的性能的几个因素:

    1. 批次和窗口大小

    2. 并行度: 增加接收器数目,提高聚合计算并行度等等方法

    转载请注明原文地址: https://ju.6miu.com/read-658754.html

    最新回复(0)