=============
RDD
MapReduce的不足:
计算之间数据共享只有一个办法,写入到文件系统如hdfs,引入了磁盘IO,序列化等开销,从而占据了大部分的执行时间。
RDD:
RDD类型
- 创建操作,从内存或外部系统创建,或转换操作生成新的rdd
- 转换操作,惰性操作,只是定义了一个新的RDD,并没有立即执行
- 控制操作,进行RDD持久化,保存在内存或磁盘中,避免二次计算
- 行动操作,触发Spark运行的操作,如collect,count,或将rdd保存到外部文件系统或数据库中
RDD实现
1)作业调度
- 当对RDD进行转换操作时,调度器会根据RDD的血统来构建若干调度阶段(Stage)组成有向无环图(DAG),每个调度阶段包含尽可能多的连续窄依赖转换。
- 延时调度机制,分配任务时根据数据存储位置来把任务分配给较佳位置的节点,如需要处理的某个分区刚好存储在某个节点的内存中,则该任务会分配给该节点。
以宽依赖划分Stage
dataset1 = a group by a.biz_code 【group宽依赖】
dataset2 = b.map(_.*) union c 【b map 操作为窄依赖, union 也是窄依赖】
finaldataset = dataset1 join dataset2 on id 【join操作为宽依赖】
判断是宽依赖还是窄依赖:子集数据的分区仅从父集数据的某一个分区而来就是窄依赖,否则为宽依赖,如map操作,将一行数据 进行转换操作,生成一行新的数据,这就是窄依赖
上述代码可以划分为3个阶段
stage1: group by
stage2: map + union,虽然这两个操作都是窄依赖,但是结果将与stage1进行join,因此单独一个stage
stage3: join
只要父数据集还在,就可以快速、并行的计算出丢失的分区
内存管理
3种存储策略
- 未序列化Java对象在内存中
- 序列化的数据存于内存中
- 存储在磁盘中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。