美文网首页
面试 | Spark知识点@20190105

面试 | Spark知识点@20190105

作者: digger30 | 来源:发表于2019-01-05 20:09 被阅读14次

Spark中持久化和容错checkpint的区别

checkpoint是考虑安全性,RDD可以使用persist或cache方法进行持久化。数据将会在对此action操作时进行计算,并缓存在节点的内存中。Spark的缓存具有容错机制,如果一个缓存的RDD的某个分区丢失了,Spark将按照原来的计算过程,自动重新计算并进行缓存。
持久化为了高效性。持久化到磁盘,以序列化的Java对象形式持久化到内存(可以节省空间)、跨界点复制,以off-heap的方式存储在Tachyon中。

RDD持久化工作原理

当对RDD执行持久化操作时,每个节点都会讲自己操作的RDD的partition持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存的partition。这样的话,对于针对一个RDD的反复执行多个操作的场景,就只要对RDD计算一次即可,后面直接使用该RDD,而不需要计算多次该RDD。

宽依赖和窄依赖

窄依赖:父RDD每一个分区最多被一个子RDD的分区所用;表现为一个父RDD的分区对应于一个子RDD的分区,或两个父RDD的分区对应于一个子RDD的分区。常见的窄依赖有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned)等

宽依赖:父RDD的每个分区都可能被多个字RDD分区所使用,子RDD分区通常对应所有的父RDD分区。常见的宽依赖有:groupByKey、partitionBy、reduceByKey、jon(父RDD非hash-partitioned)等

RDD的创建方式

  • 从Hadoop文件系统(如HDFS、Hive、HBase)输入创建
  • 从父RDD转换得到新RDD
  • 通过parallelize或makeRDD将单机数据创建为分布式RDD
  • 基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流创建

RDD操作

RDD支持两种操作:转化操作行动操作
转化操作是返回一个新的RDD的操作。
行动操作是向驱动器程序返回结果或把结果写入到外部系统的操作。
RDD是惰性求值的。当RDD调用转化操作的时候,操作不会立即执行,Spark会在内存记录下所要求执行的操作的相关信息,只有在调用行到操作的时候,才会开始计算。

Spark使用惰性求值,这样就可以把一些操作合并到一起来减少计算数据的步骤。

相关文章

网友评论

      本文标题:面试 | Spark知识点@20190105

      本文链接:https://www.haomeiwen.com/subject/rppdrqtx.html