Upload
colorant
View
480
Download
7
Embed Size (px)
Citation preview
Spark Introduction
蘑菇街 FST - 天火
¡ 分布式计算框架
¡ 等等,关我什么事? § 太多的分布式计算框架
¡ 因为它很Cool
¡ 所以你不想Out?
¡ 出身背景很Cool § UC Berkeley AMPLab实验室
¡ 主要开发者很Cool § DataBricks § Intel / Yahoo / Cloudera
¡ 应用场景很Cool § ETL、OLAP、机器学习、基因⼯工程
¡ 开发语⾔言很Cool § scala
¡ 很Cool的背景 § 理论架构的先进性 § 性能
¡ 很Cool的开发团队 § 持续发展的动⼒力源泉
¡ 很Cool的应用场景 § 活跃的社区 § 不⾄至于成为屠龙之技
¡ 很Cool的开发语⾔言 § 开发效率 § ⾼高(zhuang)逼格的资本 lol
¡ 快速从Apache Incubator项目毕业成为Apache顶级项目
¡ ⼤大数据解决⽅方案提供商的支持 § Cloudera / MapR / Hortonworks / Pivotal / SAP … § 华为 / 星环科技
¡ 应用 § 阿里/百度/爱奇艺/优酷/京东…
¡ 2014年⼤大数据领域最活跃的开源项目
¡ 分布式计算框架 ¡ 基于内存的调度和运算模型 ¡ 兼容Hadoop⽣生态环境
§ 数据存储格式 § Works with Hdfs/Yarn/Hive/Hbase/kaQa… etc.
¡ 丰富的应用场景 § 离线处理 / 实时计算 § SQL / 机器学习 / 图计算
¡ 更加⾼高效和通用的编程模型 § 相比MapReduce模型,更加适用于两种类型的
应用 ▪ 迭代算法类(机器学习,图计算) ▪ 交互式数据挖掘
¡ 良好的用户体验 ▪ 编程效率:基于Scala的核⼼心模块,提供Java/python编
程接⼝口 ▪ 功能强⼤大的API,丰富的操作算⼦子 ▪ 交互式的解释执⾏行接⼝口(调试,学习)
Step Step Step Step Step
Client
Step Step Step Step Step
Client
¡ 计算模型固定 ¡ 每个MapReduce阶段之间需要落盘 ¡ 容错性好
Map
Map
Map
Reduce
Reduce
Input Output
Dryad-‐like DAGs Pipelines functions within a stage Cache-‐aware work reuse & locality Partitioning-‐aware to avoid shuffles
join
union
groupBy
map
Stage 3
Stage 1
Stage 2
A: B:
C: D:
E:
F:
G:
= cached data partition
!
¡ Resilient distributed datasets (RDDs) ¡ http://dl.acm.org/citation.cfm?id=2228301
§ 不可变的,按分区组织的数据对象 § ⼀一个RDD可以通过各种(map, filter, groupBy, Join…)操作转换为另⼀一个RDD
§ 源头的RDD的数据来源可以是外部存储,如HDFS,也可以动态⽣生成
§ 可以采用各种缓存⽅方式加速处理 § 容错, 数据本地性, 可扩展性
¡ 分布式运算环境下的数据容错模型往往是影响整个系统的核⼼心机制之⼀一
¡ 其它基于内存的类似计算框架系统采用细颗粒度的数据备份或者LOG机制
¡ RDD采用基于⾎血统关系(Lineage)的容错模型 § Lineage记录的是粗颗粒度的数据变换操作⾏行为 § 当RDD的部分分区数据丢失时,它可以通过Lineage
信息重新运算和恢复丢失的数据分区。 § 这种粗颗粒的数据模型,限制了Spark的运用场合,
但同时相比细颗粒度的数据模型,也带来了性能的提升。
RDDs maintain lineage information that can be used to reconstruct lost partitions
Ex:
messages = textFile(...).filter(_.startsWith(“ERROR”)) Result = messages.map(_.split(‘\t’)(2))
HDFS File Filtered RDD Mapped RDD filter
(func = _.startsWith(...)) map
(func = _.split(...))
lines = spark.textFile(“hdfs://...”)
errors = lines.filter(_.startsWith(“ERROR”))
messages = errors.map(_.split(‘\t’)(2))
cachedMsgs = messages.cache()
Block 1
Block 2
Block 3
Worker
Worker
Worker
Driver
cachedMsgs.filter(_.contains(“foo”)).count
cachedMsgs.filter(_.contains(“bar”)).count
. . .
tasks
results
Cache 1
Cache 2
Cache 3
Base RDD
Transformed RDD
Action
¡ 围绕RDD的概念,实现核⼼心运⾏行调度逻辑 § Scheduler:作业和任务的调度管理 § BlockManager:RDD/Shuffle等数据块的管理 § RDD:各种RDD数据结构表达和算法实现 § Shuffle:管理Shuffle逻辑和相关数据流程 § NetWork:跨节点数据通讯相关 § Yarn: 基于Yarn的任务调度管理模块 § 其它…
¡ 其它各种上层模块都是基于Core的衍⽣生 § RDD核⼼心思想在不同领域的拓展和定制化实现 § RDD数据模型的通用性和灵活性,从本质上决
定了它很容易被应用到各种具体的编程模型上
¡ 本质上是Micro-‐batches RDDs的处理 § 相比于小Batch的Hadoop Job,Task启动代价小,latency低
§ 近实时(相比Storm) ▪ 默认200ms⼀一个批次
§ 吞吐率⾼高 § 相对于其它模块,最早在业界得到应用
§ 与普通RDD批处理统⼀一的编程模型 § 基于Lineage的容错模型 § 丰富的数据源
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.fl゚atMap(_.split(" "))val result = words.map(x ハ=> ハ(x, ハ1)).reduceByKey(_ + _).collect()
n Hive-‐like interface(JDBC Service / CLI)
n Both Hive QL & Simple SQL dialects are Supported
n DDL is 100% compatible with Hive Metastore
n Hive QL aims to 100% compatible with Hive DML Spark Core
Spark Execution Operators
Catalyst
Hive QL Simple SQL
SQL API CLI
User Application
JDBC Service
Data Analyst
Hive Meta Store Simple Catalog
n First released in Spark 1.0 (May, 2014) n Initial committed by Michael Armbrust & Reynold Xin from Databricks
¡ MLlib 机器学习算法库: § Initial contribution from AMPLab, UC Berkeley § Shipped with Spark since version 0.8 (Sep 2013)
¡ 数据类型 § Dense § Sparse ( Since 1.0) ▪ 现实世界中,众多的数据集都是稀疏的
¡ 算法集 § Classification / Regression /collaborative filtering / Clustering / Decomposition
¡ Bagel : Spark 0.6, 2013-‐08 ¡ Graphx-‐Branch : Spark 0.8, 2013-‐09¡ Graphx-‐Alpha : Spark 0.9, 2014-‐03
¡ 图计算的模型 § 类Pregel的思想 § Super Step ▪ 更新Vertex和Edge
¡ 图切割 § 实现分布式的关键所在 § Move vertex to Edge
¡ 本质上是在RDD基础上构建 § 合理的数据表达⽅方式 § 针对性的API设计
¡ 用于交互式运⾏行测试Spark程序 § 便于快速测试程序局部逻辑
¡ 构建在Scala Repl的基础上 § Repl:读取 执⾏行 打印 循环 § 拓展: ▪ Modified wrapper code generation so that each line
typed has references to objects for its dependencies ▪ Distribute generated classes over the network
¡ Pluggable shuffl゚e Interface § Hash -‐> Sort ▪ Memory/performance etc.
¡ Improved Data transfer mechanism § Pluggable § Employ Netty
¡ Others § pySpark / JDBC server / Dynamic metric …
¡ Core § Pluggable Storage Interface ▪ To support various Storage type, SSD,HDFS Cache etc ハ
¡ Spark ハSQL § 更多的数据源的支持 ▪ (Cassandra, MongoDB) RDMS (SAP/Vertica/Oracle)
§ 性能优化(code gen, faster joins, etc) § 语法增强(towards SQL92)
¡ Graphx § Move graphx out of “Alpha”
¡ 稳定性和可扩展性
¡ Better Yarn Integration § Security § Dynamic resource adjustment
¡ More Algorithms for Mllib § On June, 15+ § Should Double quickly.
¡ Spark ハStreaming§ Streaming SQL / More data source etc.
¡ 以推荐算法所需数据源的处理流程为例 § Log⽂文件 / KaQa / HDFS / MapReduce / Hive / Hbase / DB / Solr / Redis
§ 战线漫长,模块众多,关系复杂,模式各异 ¡ 离线模型训练
§ 计算密集型,迭代运算 ¡ 实时推荐
§ 离线和实时计算模型统⼀一?
¡ 目前主要问题?
¡ 相关项目 § Tez / Dryad / Flink
蘑菇街 天火 [email protected] Weibo: @冷冻蚂蚁
http://blog.csdn.net/colorant