Spark技术内幕


Spark技术内幕 张安站 2015 什么是Spark ? • 分布式计算框架 • 基于内存的调度和运算模型 • 兼容Hadoop生态环境 – 数据存储格式 – Works with Hdfs/Yarn/Hive/Hbase/kafka… etc. • 丰富的应用场景 – batch /streaming – SQL / 机器学习/ 图计算 快速发展的生态环境 • 快速从Apache Incubator项目毕业成为Apache顶级项 目 • 大数据解决方案提供商的支持 – Cloudera / MapR / Hortonworks / Pivotal / SAP … – 华为 / 星环科技 • 应用 – 百度/阿里/腾讯/爱奇艺/优酷/京东… • 2014年大数据领域最活跃的开源项目 核心组件 代码规模 BDAS 整体架构 Spark的目标 • 高效和通用的编程模型 – 相比MapReduce,更加适用于两种类型的应用 •迭代算法类(机器学习,图计算) •交互式数据挖掘 – 相似的编程接口 • 良好的用户体验 •编程效率:基于Scala的核心模块,并提供 Java/python编程接口 •功能强大的API,丰富的操作算子 •交互式的解释执行接口(调试,学习) 相似的编程接口 val conf = new SparkConf() val ssc = new StreamingContext(conf, Seconds(1)) val lines = ssc.textFileStream(args(1)) val words = lines.flatMap(_.split(" ")) val result = words.map(x => (x, 1)).reduceByKey(_ + _).collect() ssc.start() val conf = new SparkConf() val sc = new SparkContext(conf) val lines = sc.textFile(args(1)) val words = lines.flatMap(_.split(" ")) val result = words.map(x => (x, 1)).reduceByKey(_ + _).collect() 仅仅是因为内存? Step Step Step Step Step Client Step Step Step Step Step Client 从Word Count开始 • 代码实现 • RDD • 资源分配 • 任务划分 • 任务调度 • 任务执行 – Shuffle的具体实现 Word Count的代码实现 RDD • Resilient distributed dataset,弹性分布式数据集 • 不可变的,按分区组织的数据对象 • 支持多种转换 + 动作 • 可以通过多种数据源创建RDD • 缓存 + 检查点 • 容错, 数据本地性, 可扩展性 RDD的缓存 lines = spark.textFile(“hdfs://...”) errors = lines.filter(_.startsWith(“ERROR”)) messages = errors.map(_.split(„\t‟)(2)) cachedMsgs = messages.cache() Block 1 Block 2 Block 3 Work er Work er Work er Drive r cachedMsgs.filter(_.contains(“wordseg”)).count cachedMsgs.filter(_.contains(“wordrank”)).count . . . tasks results Cache 1 Cache 2 Cache 3 Base RDD Transformed RDD Action RDD的不同依赖 union groupByKey join with inputs not co-partitioned join with inputs co- partitioned map, filter 窄依赖: 宽依赖: 资源的分配 任务调度 rdd1.join(rdd2) .groupBy(…) .filter(…) RDD Objects build operator DAG agnostic to operators! doesn’t know about stages DAGScheduler split graph into stages of tasks submit each stage as ready DAG TaskScheduler TaskSet launch tasks via cluster manager retry failed or straggling tasks Cluster manager Worker execute tasks store and serve blocks Block manager Threads Task stage failed DAG的划分 join union groupBy map Stage 3 Stage 1 Stage 2 A: B: C: D: E: F: G: = previously computed partition Task •由DAGScheduler 完成DAG不同 Stage的划分 •最大化pipeline •尽可能的减少 Shuffle Task的生成 •根据Final Stage的Partition生成ResultTask ,每个Partition对应于一个Task •其余的Stage的每个Partition生成一个 ShuffleMapTask Task的执行 • TaskScheduler会将任务发送到Executor • Executor开始每个Task的执行 y HadoopRDD MappedRDD[String] List(new oneToOneDependcy(oneParen t)) Visit() words=lines.flatMap( x=> x.split(“ ”)) wordCounts=words. map(x=> (x,1)) lines=ssc.textFile(“fil epath”) result=wordCounts.r educeByKey(_ + _) result.saveAsTextFile (“output_filepath”) FlatMappedRDD[Strin g] List(new oneToOneDependcy(oneParen t)) Visit() PairRDD List(new oneToOneDependcy(oneParen t)) FlatMap List(new oneToOneDependcy(oneParen t)) MapPartitionRDD Visit() reduc eByKe y ShuffledRDD List(new ShuffleDependcy(prev,part,se rializerClass)) MapPartitionRDD List(new oneToOneDependcy(oneParen t)) List(new oneToOneDependcy(oneParen t)) PairRDDFunction Visit() Word Count Base Shuffle Write Consolidate Shuffle Write Sort Based Shuffle - Shuffle Writer Hash Based VS Sort Based Shuffle Read Shuffle Pluggable 框架 存储的实现 Important But not Covered • Scala • Spark SQL • Tachyon & RAMCloud • Spark Best Practice(performance tuning) • Spark in Industry • Spark Ecosystem Q&A
还剩29页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

wukong212

贡献于2016-08-09

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf