45
Spark Introduction 蘑菇街 FST - 天火

Spark introduction - In Chinese

Embed Size (px)

Citation preview

Page 1: Spark introduction - In Chinese

Spark  Introduction

蘑菇街 FST - 天火

Page 2: Spark introduction - In Chinese

¡  分布式计算框架  

¡  等等,关我什么事?  §  太多的分布式计算框架  

¡  因为它很Cool  

¡  所以你不想Out?  

Page 3: Spark introduction - In Chinese

¡  出身背景很Cool  §  UC  Berkeley  AMPLab实验室  

¡  主要开发者很Cool  §  DataBricks  §  Intel  /  Yahoo  /  Cloudera    

¡  应用场景很Cool  §  ETL、OLAP、机器学习、基因⼯工程  

¡  开发语⾔言很Cool  §  scala  

 

Page 4: Spark introduction - In Chinese
Page 5: Spark introduction - In Chinese

¡  很Cool的背景  §  理论架构的先进性  §  性能  

¡  很Cool的开发团队  §  持续发展的动⼒力源泉    

¡  很Cool的应用场景  §  活跃的社区  §  不⾄至于成为屠龙之技  

¡  很Cool的开发语⾔言  §  开发效率  §  ⾼高(zhuang)逼格的资本 lol  

Page 6: Spark introduction - In Chinese

¡  快速从Apache  Incubator项目毕业成为Apache顶级项目  

¡  ⼤大数据解决⽅方案提供商的支持  §  Cloudera  /  MapR    /  Hortonworks  /  Pivotal  /  SAP  …  §  华为  /  星环科技  

¡  应用  §  阿里/百度/爱奇艺/优酷/京东…  

¡  2014年⼤大数据领域最活跃的开源项目  

Page 7: Spark introduction - In Chinese
Page 8: Spark introduction - In Chinese

¡  分布式计算框架  ¡  基于内存的调度和运算模型  ¡  兼容Hadoop⽣生态环境  

§  数据存储格式  § Works  with  Hdfs/Yarn/Hive/Hbase/kaQa…  etc.  

¡  丰富的应用场景  §  离线处理 /  实时计算  §  SQL  /  机器学习 /  图计算  

Page 9: Spark introduction - In Chinese
Page 10: Spark introduction - In Chinese
Page 11: Spark introduction - In Chinese
Page 12: Spark introduction - In Chinese
Page 13: Spark introduction - In Chinese

¡  更加⾼高效和通用的编程模型  §  相比MapReduce模型,更加适用于两种类型的

应用  ▪  迭代算法类(机器学习,图计算)  ▪  交互式数据挖掘  

¡  良好的用户体验  ▪  编程效率:基于Scala的核⼼心模块,提供Java/python编

程接⼝口  ▪  功能强⼤大的API,丰富的操作算⼦子  ▪  交互式的解释执⾏行接⼝口(调试,学习)  

Page 14: Spark introduction - In Chinese

 

Step Step Step Step Step

Client  

Step Step Step Step Step

Client  

Page 15: Spark introduction - In Chinese

¡  计算模型固定  ¡  每个MapReduce阶段之间需要落盘  ¡  容错性好

Map  

Map  

Map  

Reduce  

Reduce  

Input   Output  

Page 16: Spark introduction - In Chinese

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  

Page 17: Spark introduction - In Chinese

!

Page 18: Spark introduction - In Chinese

¡  Resilient  distributed  datasets  (RDDs)  ¡  http://dl.acm.org/citation.cfm?id=2228301  

§  不可变的,按分区组织的数据对象  §  ⼀一个RDD可以通过各种(map,  filter,  groupBy,  Join…)操作转换为另⼀一个RDD  

§  源头的RDD的数据来源可以是外部存储,如HDFS,也可以动态⽣生成  

§  可以采用各种缓存⽅方式加速处理  §  容错,  数据本地性,  可扩展性  

Page 19: Spark introduction - In Chinese

¡  分布式运算环境下的数据容错模型往往是影响整个系统的核⼼心机制之⼀一  

¡  其它基于内存的类似计算框架系统采用细颗粒度的数据备份或者LOG机制  

¡  RDD采用基于⾎血统关系(Lineage)的容错模型  §  Lineage记录的是粗颗粒度的数据变换操作⾏行为  §  当RDD的部分分区数据丢失时,它可以通过Lineage

信息重新运算和恢复丢失的数据分区。  §  这种粗颗粒的数据模型,限制了Spark的运用场合,

但同时相比细颗粒度的数据模型,也带来了性能的提升。

Page 20: Spark introduction - In Chinese

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(...))  

Page 21: Spark introduction - In Chinese

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  

Page 22: Spark introduction - In Chinese
Page 23: Spark introduction - In Chinese

¡  围绕RDD的概念,实现核⼼心运⾏行调度逻辑  §  Scheduler:作业和任务的调度管理  §  BlockManager:RDD/Shuffle等数据块的管理  §  RDD:各种RDD数据结构表达和算法实现  §  Shuffle:管理Shuffle逻辑和相关数据流程  §  NetWork:跨节点数据通讯相关  §  Yarn:  基于Yarn的任务调度管理模块  §  其它…  

Page 24: Spark introduction - In Chinese

¡  其它各种上层模块都是基于Core的衍⽣生  §  RDD核⼼心思想在不同领域的拓展和定制化实现  §  RDD数据模型的通用性和灵活性,从本质上决

定了它很容易被应用到各种具体的编程模型上

Page 25: Spark introduction - In Chinese

¡  本质上是Micro-­‐batches  RDDs的处理  §  相比于小Batch的Hadoop  Job,Task启动代价小,latency低  

§  近实时(相比Storm)  ▪  默认200ms⼀一个批次  

§  吞吐率⾼高  §  相对于其它模块,最早在业界得到应用  

Page 26: Spark introduction - In Chinese

§  与普通RDD批处理统⼀一的编程模型  §  基于Lineage的容错模型  §  丰富的数据源  

 

Page 27: Spark introduction - In Chinese

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()

Page 28: Spark introduction - In Chinese

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  

Page 29: Spark introduction - In Chinese

n First  released  in  Spark  1.0  (May,  2014)  n Initial  committed  by  Michael  Armbrust  &  Reynold  Xin  from  Databricks  

Page 30: Spark introduction - In Chinese

¡  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  

Page 31: Spark introduction - In Chinese

¡  Bagel  :  Spark  0.6,  2013-­‐08  ¡  Graphx-­‐Branch  :  Spark  0.8,  2013-­‐09¡  Graphx-­‐Alpha  :  Spark  0.9,  2014-­‐03  

Page 32: Spark introduction - In Chinese
Page 33: Spark introduction - In Chinese

¡  图计算的模型  §  类Pregel的思想  §  Super  Step  ▪  更新Vertex和Edge  

¡  图切割  §  实现分布式的关键所在  §  Move  vertex  to  Edge  

¡  本质上是在RDD基础上构建  §  合理的数据表达⽅方式  §  针对性的API设计  

Page 34: Spark introduction - In Chinese

¡  用于交互式运⾏行测试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  

Page 35: Spark introduction - In Chinese
Page 36: Spark introduction - In Chinese

¡  Pluggable  shuffl゚e  Interface  §  Hash  -­‐>  Sort  ▪  Memory/performance  etc.

¡  Improved  Data  transfer  mechanism  §  Pluggable  §  Employ  Netty  

¡  Others  §  pySpark  /  JDBC  server  /  Dynamic  metric  …  

Page 37: Spark introduction - In Chinese

¡  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”  

¡  稳定性和可扩展性

Page 38: Spark introduction - In Chinese

¡  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.

Page 39: Spark introduction - In Chinese

¡  以推荐算法所需数据源的处理流程为例  §  Log⽂文件  /  KaQa  /  HDFS  /  MapReduce  /  Hive  /  Hbase  /  DB  /  Solr  /  Redis  

§  战线漫长,模块众多,关系复杂,模式各异  ¡  离线模型训练  

§  计算密集型,迭代运算  ¡  实时推荐  

§  离线和实时计算模型统⼀一?  

Page 40: Spark introduction - In Chinese

¡  目前主要问题?  

¡  相关项目  §  Tez  /  Dryad  /  Flink

Page 41: Spark introduction - In Chinese
Page 42: Spark introduction - In Chinese
Page 43: Spark introduction - In Chinese
Page 44: Spark introduction - In Chinese
Page 45: Spark introduction - In Chinese

蘑菇街 天火 [email protected] Weibo: @冷冻蚂蚁

http://blog.csdn.net/colorant