SlideShare una empresa de Scribd logo
1 de 24
Spark Streaming学习分享
DM Team
徐闻春
Spark如何并行化? 答疑解惑spark streaming介绍
三个问题
Spark的是怎么实现并行化计算的?
不同层次划分依据
• Job划分:action算子
• Stage划分:shuffle操作
• Task划分:分区数
层次划分关系
Spark的是怎么实现并行化计算的?
-- RDD
• 只读的分区的集合
• 对数据计算的函数
• 计算数据的位置
• 分区器
• 依赖的RDD信息
val textFile = sc.parallelize(Seq(1, 2, 3, 4, 5, 6),3)
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)) // 数据存储
Spark的是怎么实现并行化计算的?
RDD Objects DAGScheduler TaskScheduler Executor
Spark Streaming原理
• 以时间为单位将数据流切分成离散的数据单位
• 将每批数据看做RDD,使用RDD操作符处理
• 最终结果以RDD为单位返回
连续问题离散化处理
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
Spark Streaming源码走读
Spark Streaming的DStream操作
项目 transformation action output
operation
window updateStateByKey
RDD √ √ × × ×
DStream √ √ √ √ √
Spark Streaming常见操作——Window Operation
window(windowLength, slideInterval)
• windowLength: 窗口长度
• slideInterval: 窗口操作间隔
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)
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()
}
}
Spark Streaming数据访问容错模式
• Receiver Based Approach
• Direct Approach
以kafka+spark streaming为例
Spark Streaming——基于Receiver
• 优点:使用WAL方式,能保证数据持久
化不丢失
• 缺点:重复写存储、依赖HDFS、仅能实现
at least once语义
Spark Streaming——基于Direct API
• 优点:没有重复写,不依赖hdfs,
使用offset,可以使用事务性
• 缺点:仅适用kafka,需要kafka有
足够存储
下一代Spark Streaming——Structured Streaming
新进来的数据就像新的行数据添加到表中,对流数据的操作就像操作一张表,数据抽象成没有边界的表。
下一代Spark Streaming——Structured Streaming
解疑
• 为什么有stage被skipped?
如果要计算的RDD已经被cache到内存,则对应的stage会被skip,所以skip是加速计算的现象,对结果没有影响
解疑
• 为什么coalesce没有shuffle,不是分区变化就有shuffle?
宽依赖:shuffle 窄依赖:没有shuffle,这就是coalesce算子作用
1
2
3
4
1
2
3
4
5
解疑
• join操作怎么避免shuffle?
——两个条件: 相同分区器,分区数相同
rdd1 = someRdd.reduceByKey(3)
rdd2 = someOtherRdd.reduceByKey(3)
rdd3 = rdd1.join(rdd2)
解疑
• shuffle次数越少越好吗?
不对,当单个分区数据量非常大时,造成资源利用不足和GC等问
题,使用repartition增大分区以提高并行度反而能更好利用CPU,
能加快效率。
解疑
• 了解常用HQL操作?
• 见zeppelin
解疑
• 在场同学的问题

Más contenido relacionado

La actualidad más candente

分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDLmysqlops
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案freezr
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事freezr
 
Sql基础培训
Sql基础培训Sql基础培训
Sql基础培训Ji ZHANG
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
IoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyIoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyJialinQiao
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrameChen-en Lu
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)frogd
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术冬 陈
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background宗志 陈
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现iammutex
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Mu-Fan Teng
 

La actualidad más candente (20)

分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDL
 
OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案OTN软硬件结合数据库解决方案
OTN软硬件结合数据库解决方案
 
Hbase
HbaseHbase
Hbase
 
Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
 
Sql基础培训
Sql基础培训Sql基础培训
Sql基础培训
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
IoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyIoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudy
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
SMACK Dev Experience
SMACK Dev ExperienceSMACK Dev Experience
SMACK Dev Experience
 
From Java Stream to Java DataFrame
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background
 
Mongo db 特性
Mongo db 特性Mongo db 特性
Mongo db 特性
 
IoTDB Ops
IoTDB OpsIoTDB Ops
IoTDB Ops
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
 
Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012Concurrency model for mysql data processing@rubyconf.tw 2012
Concurrency model for mysql data processing@rubyconf.tw 2012
 

Similar a Spark streaming经验介绍

Spark introduction - In Chinese
Spark introduction - In ChineseSpark introduction - In Chinese
Spark introduction - In Chinesecolorant
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲jie cao
 
Learning to Rank: An Introduction to LambdaMART
Learning to Rank: An Introduction to LambdaMARTLearning to Rank: An Introduction to LambdaMART
Learning to Rank: An Introduction to LambdaMARTJulian Qian
 
The Evolution of Data Systems
The Evolution of Data SystemsThe Evolution of Data Systems
The Evolution of Data Systems宇 傅
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)LearnWeb Taiwan
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceTrendProgContest13
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocessbabel_qi
 
Anthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceAnthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceMin Zhou
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能Rack Lin
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计mingjin
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 
給初學者的Spark教學
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學Chen-en Lu
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结ordinary2012
 
网易分布式数据库平台
网易分布式数据库平台网易分布式数据库平台
网易分布式数据库平台gettyying
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 

Similar a Spark streaming经验介绍 (20)

Spark introduction - In Chinese
Spark introduction - In ChineseSpark introduction - In Chinese
Spark introduction - In Chinese
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲
 
Learning to Rank: An Introduction to LambdaMART
Learning to Rank: An Introduction to LambdaMARTLearning to Rank: An Introduction to LambdaMART
Learning to Rank: An Introduction to LambdaMART
 
The Evolution of Data Systems
The Evolution of Data SystemsThe Evolution of Data Systems
The Evolution of Data Systems
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)
D3.js 與 Vue 框架的結合,讓圖表更具表現力(LearnWeb Taiwan Meetup #14)
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduce
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess
 
Anthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduceAnthill: A Distributed DBMS Based On MapReduce
Anthill: A Distributed DBMS Based On MapReduce
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能
 
C語言陣列與字串
C語言陣列與字串C語言陣列與字串
C語言陣列與字串
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
給初學者的Spark教學
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结
 
网易分布式数据库平台
网易分布式数据库平台网易分布式数据库平台
网易分布式数据库平台
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 

Spark streaming经验介绍

Notas del editor

  1. action : saveAsTextFile() collect() take() shuffle: by**
  2. 为什么有skip task?
  3. spark 1.2引进,所有接收的数据通过receivers写入HDFS或者S3中checkpoint目录。这样当driver失败后,executor中数据丢失后,可以通过checkpoint恢复。在更新zookeeper的offset前,receivers失败了,会导致不一致,则从zookeeper中保存的offsets开始重复消费
  4. Spark driver计算下个batch的offsets,指导executor消费对应的topics和partitions。消费Kafka消息,就像消费文件系统文件一样。如果中间出现数据处理失败,则使用事物回滚
  5. 目前SparkStreaming是直接依赖RDD,优化需要自己完成,使用DataSet和Dataframe就可以利用Tungsten引擎来进行优化。
  6. 而基于DataSet和Dataframe处理,简化API,使用更高级的SQL处理,让我们忘记流的概念,使用将会越来越简单。从2.x的设计来看,从更根本上,是为了满足更快Faster、完全容错fault-tolerant、完全的语义一致性exactly的要求。
  7. 有没shuffle主要看是父依赖还是窄依赖: 父依赖:父RDD的一个分区的数据全部到子RDD的一个分区(独身子女) 窄依赖:父RDD分区的数据分布到子RDD的多个分区(多胎) 剧烈分区变化(多到少),这时如果将shuffle设置为false,会出现并发不足,存储不够溢出可以讲shuffle设置为true。