O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Spark streaming经验介绍

关于spark并行化的解释、spark streaming介绍及问题答疑

  • Seja o primeiro a comentar

Spark streaming经验介绍

  1. 1. Spark Streaming学习分享 DM Team 徐闻春
  2. 2. Spark如何并行化? 答疑解惑spark streaming介绍 三个问题
  3. 3. Spark的是怎么实现并行化计算的? 不同层次划分依据 • Job划分:action算子 • Stage划分:shuffle操作 • Task划分:分区数 层次划分关系
  4. 4. Spark的是怎么实现并行化计算的? -- RDD • 只读的分区的集合 • 对数据计算的函数 • 计算数据的位置 • 分区器 • 依赖的RDD信息 val textFile = sc.parallelize(Seq(1, 2, 3, 4, 5, 6),3)
  5. 5. Spark的是怎么实现并行化计算的? val textFile = sc.textFile(args(1)) // 构造RDD val result = textFile .flatMap(line => line.split(“s+”)) .map(word => (word, 1)) .reduceByKey(_ + _) // 计算逻辑 result.saveAsTextFile(args(2)) // 数据存储
  6. 6. Spark的是怎么实现并行化计算的? RDD Objects DAGScheduler TaskScheduler Executor
  7. 7. Spark Streaming原理 • 以时间为单位将数据流切分成离散的数据单位 • 将每批数据看做RDD,使用RDD操作符处理 • 最终结果以RDD为单位返回 连续问题离散化处理
  8. 8. Spark Streaming运行架构 Driver JobScheduler Job Generator BlockManagerMaster Executor BlockManager Task Receiver ExecutorExecutor Receiver Task BlockManager Message Queue Sub Job Put Block Put Block Receiver Tracker getBlocksOfBatch Block ID JobSet Clock Tick
  9. 9. Spark Streaming源码走读
  10. 10. Spark Streaming的DStream操作 项目 transformation action output operation window updateStateByKey RDD √ √ × × × DStream √ √ √ √ √
  11. 11. Spark Streaming常见操作——Window Operation window(windowLength, slideInterval) • windowLength: 窗口长度 • slideInterval: 窗口操作间隔
  12. 12. Spark Streaming常见操作——UpdateStateByKey • updateStateByKey • mapWithState 根据新进来的信息来更新过去维持的状态信息。 val addFunc = (currValues: Seq[Int], prevValueState: Option[Int]) => { val currentCount = currValues.sum val previousCount = prevValueState.getOrElse(0) Some(currentCount + previousCount) } val totalWordCounts = pairs.updateStateByKey[Int](addFunc)
  13. 13. Spark Streaming常见操作——Output Operaion 就像RDD计算中的action操作会引起真正的执行,Dstream中Output Operatiion引起transformation真正的执行, 注意对于foreachRDD算子,里面必须有rdd的action操作,否则数据被接收后直接忽略不处理。 • print() 用于开发和debug • saveAsHadoopFiles(prefix, [suffix]) 输出数据持久化 • foreachRDD(func) 用于将RDD执行任意操作,如写redis(func函数在driver执行) dstream.foreachRDD { rdd => rdd.foreachPartition { partitionOfRecords => val connection = createNewConnection() partitionOfRecords.foreach(record => connection.send(record)) connection.close() } }
  14. 14. Spark Streaming数据访问容错模式 • Receiver Based Approach • Direct Approach 以kafka+spark streaming为例
  15. 15. Spark Streaming——基于Receiver • 优点:使用WAL方式,能保证数据持久 化不丢失 • 缺点:重复写存储、依赖HDFS、仅能实现 at least once语义
  16. 16. Spark Streaming——基于Direct API • 优点:没有重复写,不依赖hdfs, 使用offset,可以使用事务性 • 缺点:仅适用kafka,需要kafka有 足够存储
  17. 17. 下一代Spark Streaming——Structured Streaming 新进来的数据就像新的行数据添加到表中,对流数据的操作就像操作一张表,数据抽象成没有边界的表。
  18. 18. 下一代Spark Streaming——Structured Streaming
  19. 19. 解疑 • 为什么有stage被skipped? 如果要计算的RDD已经被cache到内存,则对应的stage会被skip,所以skip是加速计算的现象,对结果没有影响
  20. 20. 解疑 • 为什么coalesce没有shuffle,不是分区变化就有shuffle? 宽依赖:shuffle 窄依赖:没有shuffle,这就是coalesce算子作用 1 2 3 4 1 2 3 4 5
  21. 21. 解疑 • join操作怎么避免shuffle? ——两个条件: 相同分区器,分区数相同 rdd1 = someRdd.reduceByKey(3) rdd2 = someOtherRdd.reduceByKey(3) rdd3 = rdd1.join(rdd2)
  22. 22. 解疑 • shuffle次数越少越好吗? 不对,当单个分区数据量非常大时,造成资源利用不足和GC等问 题,使用repartition增大分区以提高并行度反而能更好利用CPU, 能加快效率。
  23. 23. 解疑 • 了解常用HQL操作? • 见zeppelin
  24. 24. 解疑 • 在场同学的问题

    Seja o primeiro a comentar

    Entre para ver os comentários

  • flei_98

    Feb. 21, 2017
  • rainerdun

    Aug. 29, 2017

关于spark并行化的解释、spark streaming介绍及问题答疑

Vistos

Vistos totais

243

No Slideshare

0

De incorporações

0

Número de incorporações

1

Ações

Baixados

25

Compartilhados

0

Comentários

0

Curtir

2

×