欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Spark中为什么需要RDD/DataSet

时间:2023-05-27

没有RDD、Dataset之前,做wordcount或别的大数据计算使用:

原生的python集合:比如python的list、set、map,但是只支持单机版,不支持分布式。如果要做分布式计算,需要做很多额外的工作,比如线程/进程的通信,容错,自动负载均衡。。等很麻烦。所以诞生了框架。

还可以用MapReduce:运行效率低下,开发效率也低下。

诞生了Spark/Flink,参考了原生的scala集合的设计,抽象出了新的数据类型-RDD/Dataset

RDD其实就是分布式集合,支持函数操作。。使用起来跟本地集合一样简单。开发速度快。底层基于分布式内存计算,是MR的100倍。

 

RDD到底是什么

弹性分布式数据集

弹性:【内存】和【CPU】都是可以扩展。中间数据存在【内存】,如果内存不够,可以溢写到【磁盘】

分布式:【存储】和【计算】都是分布式多节点上的

数据集:一个很大的抽象容器,使用起来跟python集合一样简单,支持【函数式】编程。

 

 

核心设计要点

不可变:集合的元素内部都不能改变,但是可以转换成新的集合。

可分区:RDD划分成几个部分区域。

并行计算:每个分区被一个任务处理,各任务并行计算。

源码中记录的RDD的5大特性

有一个分区列表:将【所有的数据】划分成合理的分区数。

计算函数:每个分区的数据上都有【函数】

依赖列表:RDD转换成新的RDD,也记录了依赖关系。

【可选】分区器:当RDD的元素是【键值对】时,可以指定分区器,规定了如何按key来分组到不同的分区中。默认是Hash分区器

【可选】最佳位置:记录了计算的最佳位置(移动代码比移动数据更划算)比如HDFS的block位置。

 

 

RDD的5大特性其实就是说明了:

数据在哪里? 在哪里计算?有哪些分区?使用什么分区器?使用什么函数计算?

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。