码迷,mamicode.com
首页 > 其他好文 > 详细

实战解析Spark运行原理和RDD解密

时间:2016-05-07 08:02:27      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

1.实战解析Spark运行原理
交互式查询(shell,sql)
批处理(机器学习,图计算)
首先,spark是基于内存的分布式高效计算框架,采用一栈式管理机制,同时支持流处理,实时交互式出,批处理三种方式,Spark特别支持迭代式计算,因此,他对机器学习,图计算具有较强的支持,为此他提供了机器学习和图计算接口。
(1)分布式:Distributed Computation
分布式多台机器运行 特征:
整个Spark有个提交程序的客户端,提交给集群,集群中中有很多台机器,作业运行在分布式节点上的,Spark程序提交到集群运行,节点一般处理一部分数据,分布式作并行化,
技术分享
客户端->集群节点
图书馆管理员查找图书,馆长Cluster manager,1000个人,分布式计算,每个书架总数多少,分布式用到并行计算

先有集群资源管理服务(Cluster Manager)和运行作业任务的结点(Worker Node),然后就是每个应用的任务控制结点Driver和每个机器节点上有具体任务的执行进程(Executor);Executor有二个优点:一个是多线程来执行具体的任务,而不是像MR那样采用进程模型,减少了任务的启动开稍。二个是Executor上会有一个BlockManager存储模块,类似于KV系统(内存和磁盘共同作为存储设备),当需要迭代多轮时,可以将中间过程的数据先放到这个存储系统上,下次需要时直接读该存储上数据,而不需要读写到hdfs等相关的文件系统里,或者在交互式查询场景下,事先将表Cache到该存储系统上,提高读写IO性能。另外Spark在做Shuffle时,在Groupby,Join等场景下去掉了不必要的Sort操作,相比于MapReduce只有Map和Reduce二种模式,Spark还提供了更加丰富全面的运算操作如filter,groupby,join等。
(2)基于内存
Spark能有效利用内存
300万条数据,1,2,3机器分别算100万条数据,数据首先考虑Memory,若只能放50万条,另外50万条磁盘,尽量放内存(速度很快)

(3) 擅长迭代式计算,是Spark的真正精髓
第一个阶段计算-》第二个阶段计算-》第三个阶段计算
计算之后可以把结果移到另一台机器——shuffle,从一个节点移到另一个节点。
Hadoop Map+Reduce两阶段(每次都要读写磁盘)
Spark可以在第一个阶段后还有很多阶段(迭代式)更加灵活(每次计算结果优先考虑放内存,下个阶段可以读内存中数据)
Spark调度器DAG Schedule Lineage

为什么还是很多公司使用Java语言开发Spark?
1. 人才问题
2. 整合更加容易,J2EE做前端程序的很多
3. 维护更加容易

技术分享

Spark SQL只能取代Hive的计算引擎,不能取代Hive的数据存储
在driver上驱动程序执行,执行在worker上
处理数据来源:HDFS、HBase、Hive、DB、S3(Amazon S3,全名为亚马逊简易储存服务(Amazon Simple Storage Service),由亚马逊公司,利用他们的亚马逊网络服务系统所提供的网络线上储存服务)
处理数据输出:HDFS、HBase、Hive、DB、S3,或返回driver(也就是程序本身)

2.RDD解密
通用的分布式弹性数据集
RDD是Spark的核心
RDD代表要处理的数据,处理的时候是分布式的
(1)一系列分片,在节点中存储,内存中,内存中放不下数据,将一部分数据放在磁盘上,自动在内存和磁盘中切换(弹性之一)
(2)第900个出错,一共1000个任务,可以从第900个重新计算,无需从头开始进行计算,提高错误恢复速度
(3)Task1000个计算步骤,第900个进行恢复,失败3-5次,默认4次
(4)Task失败,整个阶段失败,再次提交Stage,1000000-5个不会提交,只提交失败的5个Task(默认3次)
弹性之一:自动的进行内存和磁盘数据存储的切换
弹性之二:基于Lineage的高校容错
弹性之三:Task如果失败会自动进行特定次数的重试
弹性之四:Stage如果失败会自动进行特定次数的重试
技术分享

缓存时机:
1.计算任务特别耗时
2.计算链条很长(计算代价)1000个,第900个恢复
3.Shuffle之后,进行缓存,失败之后,不需要进行重新Shuffle(从其他地方抽取数据)
4.CheckPoint把数据整个放入磁盘,CheckPoint之前步骤无需重新计算

RDD是一系列数据分片,数据分片分布在不同机器的不同节点上,按partition进行管理,partition就是一个数据集合 RDD包含函数的计算
最常用的RDD在Hadoop上
启动文件系统
技术分享
启动Spark
技术分享
技术分享
技术分享
集群唯一的接口:SparkContext ,SparkContext是一切工作都要经过的地方,SparkContext创建RDD

技术分享
技术分享
自动获取,是本地还是集群

spark一切操作皆RDD,每次操作都会产生RDD
技术分享
data.textFile
是lazy的,transformation,不运行
技术分享
data.count
是action,所以会运行

hdfs分片和spark rdd的分区有什么关系?
spark读取数据时,RDD相当于HDFS的一个Block,Partion size=Block Size(128M)最后一条记录跨两个Block,128M左右

分区,可以进行hash,Range等等,不同分区策略

技术分享

技术分享

技术分享
Reduce后进行shuffle
技术分享
传入HDFS
技术分享

技术分享

Any shuffle后的数据
Process _LOCAL
技术分享

Cloudera Manager 中Spark不是最新版本的,而且不能手动更新,(开发商提供,不推荐),不推荐使用(懒人)
Spark+Tachyon+HDFS,将来是黄金组合

实战解析Spark运行原理和RDD解密

标签:

原文地址:http://blog.csdn.net/sundujing/article/details/51330170

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!