Spark 数据抽象 弹性分布式数据集RDD(Resilient
实现思想
与MR实现思想一致 分而治之的思想,在Spark计算引擎中,思想与MapReduce一样,但是将输入数据、处理数据和输出数据封装抽象,称为RDD(弹性分布式数据集),便于对数据管理和对数据操作方便(调用RDD 函数即可)。
image.png
1、Hive框架: 数据封装在Table表
2、Spark:数据封装在RDD集合
3、Flik: 数据封装在DataStream集合
RDD概念
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合
- Resilient 弹性
代表集合当中的数据有容灾恢复功能,因为 多个rdd存在依赖关系 当我一个rdd 挂掉之后 我通过我的父rdd 就是直接前驱 根据 rdd的算子(逻辑)能够恢复 - distribute 分布式
集合当中的数据划分为很多部分根据分区规则 - dataset 数据集
表示是一个不可变的集合,里面的数据不允许增加或者修改
三个主要特质
image.png五个重要特性
image.png查看源码发现有五个重要特性
前3个特性,必须包含的;后2个特性,可选的。
1.每个RDD由一系列的分区partition分区组成,一个RDD有多个分区(分区组成)
2.对RDD中数据处理时,每个分区(分片)数据使用RDD的函数进行处理,1个分区数据被1个Task处理(分片计算,分布式计算)
3.每个RDD依赖于一系列其他RDD( 依赖一些列 RDD,RDD的数据容灾恢复)
RDD每次转换都会产生一个的新的RDD,所以rdd之间会产生前后依赖关系
在部分分区丢失的时候,spark 可以根据依赖关系 把数据恢复出来(spark容错机制)
4.可选 当RDD中数据类型为Key/Value(二元组),可以设置分区器Partitioner
() 把数据重新分配
5.可选 对RDD中每个分区数据进行计算时,找到最佳位置
列表
对数据计算时,考虑数据本地性,数据在哪里,尽量将Task放在哪里,快速读取数据进行处理
RDD两种创建方式
并行化集合parallelize
外部存储textFile
小文件数据的处理
第一种,将小文件合并成一个大文件
第二种,使用SparkContext中提供:wholeTextFiles
方法,专门读取小文件数据。
将每个文件作为一条KV存储在RDD中,K:文件名的绝对路径,V:文件的内容
用于解决小文件的问题,可以将多个小文件变成多个KV,自由指定分区个数