配色: 字号:
part0-spark生态系统及rdd基本概念
2018-06-18 | 阅:  转:  |  分享 
  
1、spark生态系统12、spark易被忽略的知识点23、spark与hadoop的差别34、RDD的抽象概念35、RDD容错机制51
、spark生态系统Spark生态系统称为伯利克里数据分析栈(BDAS)(1)简写(2)伯利克里数据分析栈(BDAS)BlinkD
B:采样近似计算查询引擎。MlBase:是以Mlib为底层的具有机器学习功能的系统。2、spark易被忽略的知识点一个RDD是分布
在集群中不同的节点上的,一个节点可以有多个分区,而一个分区只能分布在一个节点上。Spark是由Scala开发的,并运行在Java虚
拟机(jvm)上。RDD的四大操作:创建操作(惰性)、转换操作(惰性)、控制操作(惰性,单独开启线程来处理)、行动操作。RDD的两
种创建方式:(1)读取外部文件(2)读取驱动器程序中的集合每调用一个新的行动操作,整个RDD都会从头操作,这种行为是低效的,要尽量
避免,可以将计算的中间结果进行持久化。Collect一般不适合用于大规模的集群中。Collect能够将RDD中的全部数据拉取出
来,一般我们会经过如filter算子先对rdd中的数据进行过滤,这样所获得的RDD中的数据就会减少,然后在再使用collect()
。使用Collect前提是内存能够放得下,collect()要求所有数据都必须能一同放入单台机器的内存中(driver端)。对r
dd进行持久化操作(内存)后,当第一次对RDD进行计算操作时仍然是从磁盘中读取,而第二次再对rdd进行计算才会从内存中读取数据。虽
然转化操作是惰性求值的,但还是可以随时通过运行一个行动操作来强制Spark执行RDD的转化操作,比如使用count()。这
是一种对你所写的程序进行部分测试的简单方法。Action算子可以分成三种类型:存储数据到文件存储系统saveAstextFile(
);将结果数据返回到驱动器端(driver端)collect();即不将结果返回到driver又不存储到外部存储系统中foreac
h()一个程序中,每执行一个action操作,整个程序都会从头计算一次spark中的lazy操作Spark中转换操作都属于l
azy操作,这个操作本质是先进行逻辑划分,并没有真正执行,只用等到action操作时,整个代码才会真正执行。如果Spark在我
们运行lines=sc.textFile(...)时就把文件中所有的行都读取并存储起来,就会消耗很多存储空间,而我们马上就
要筛选掉其中的很多数据。相反,一旦Spark了解了完整的转化操作链之后,它就可以只计算求结果时真正需要的数据。事实上,在行动操
作first()中,Spark只需要扫描文件直到找到第一个匹配的行为止,而不需要读取整个文件。3、spark与hadoop的
差别spark是一站式通用大数据计算框架,而hadoop是插拔式大数据计算框架。Spark的核心技术弹性分布市数据集,提供了比ha
doop更加丰富的MR模型,拥有HadoopMapReduce所具有的所有优点。Sparkle中Job的中间输出和结果可以保持在内
存中,从而可以基于内存快速的对数据集进行多次迭代,来支持复杂的机器学习,图计算和准实时流处理等,效率更高速度更快。Spark在内存
中运行的速度比hadoop快100倍,spark在磁盘上运行的速度比hadoop快10倍。4、RDD的抽象概念RDD的内部函数R
DD本身是一个抽象类,其内部实现有5个部分。其中前3是必备的。getPartitions方法:分区列表(数据块列表)(2)com
puter方法:计算每个分片的函数我们之前说过spark的转换操作都是惰性的,也就是说都包含找逻辑规划,这个逻辑规划就存储在co
mputer方法中,当执行action算子的时候,程序就会去执行computer来实现rdd的转化操作(3)getDependen
cies:对父RDD的依赖列表由于可以有多个父RDD,因此有对应父RDD的一个依赖库(4)partitioner:键值对类型的RD
D的分区器(5)getPreferredLocation:每个数据分片的预定义地址列表注:其中前3个用于描述RDD间的Lineag
e(血缘关系)信息,后两个用于优化执行。5、RDD容错机制Rdd的容错机制需要从两个角度来说:对于窄依赖的RDD,其子rdd
的分区与其父rdd的分区一一对应,因此当节点发生故障使得子rdd中的某个分区丢失,则系统可以根据血缘关系,重新计算丢失的那个分区,
并且可以在任意节点上执行这个恢复(一个RDD是分布在不同节点上的,但该rdd的内部的每个独立的完整的分区都是位于同一个节点上,不同
分区可以分布在不同的节点上。同一个节点可以包含不同的分区)。对于宽依赖的RDD,由于子rdd的一个分区依赖于所用的父rdd的分区,
因此当子rdd的一个分区丢失,相当于所有的父rdd都都会丢失部分的分区,因此需要全部重新计算。一般我们采取chickpoint()机制进行数据恢复,避免重新计算。
献花(0)
+1
(本文系实习生101首藏)