走向JAVA(二)spark

一:RDD

spark中的第一个数据抽象,代表一个不可变,可分区,里面的元素可以并行计算的集合。
1.可存在磁盘或者内存中。
2.RDD的分区可变。
RDD的五大特性
1.1.A list of partitions:一个分区列表,RDD中的数据都存储在一个分区列表中。 是由一系列partition组成。

2.A function for computing each split:作用在每一个分区中的函数

3.A list of dependencies on other RDDs:一个RDD依赖于其他多个RDD,这个点很重要,RDD的容错机制就是依据这个特性而来的

4.Optionally,a Partitioner for key-value RDDs(eg:to say that the RDD is hash-partitioned):可选的,针对于kv类型的RDD才有这个特性,作用是决定了数据的来源以及数据处理后的去向。 pairRDD,kv形式的RDD。

5.可选项,数据本地性,数据位置最优。根据hdfs的block位置,移动计算而不是移动数据。

二:Spark常用算子

action 算子
reduce()
cache()
transformation算子
reduceByKey()
map():用于遍历RDD,将函数应用于每一个元素,返回新的RDD (transformation算子)
mapPartition():是我们函数传入的参数是整个分区数据的迭代器,这样避免了创建过多的临时链接等,提升了性能。用于遍历操作RDD中的每一个分区,返回生成一个新的RDD(transformation算子每次处理一个分区的数据,这个分区的数据处理完后,原RDD中分区的数据才能释放,可能导致OOM
当内存空间较大的时候建议使用mapPartition(),以提高处理效率.

Foreach与ForeachPartition都是在每个partition中对iterator进行操作,
不同的是,foreach是直接在每个partition中直接对iterator执行foreach操作,而传入的function只是在foreach内部使用(action算子)
foreachPartition是在每个partition中把iterator给传入的function,让function自己对iterator进行处理(可以避免内存溢出)(action算子)
RDD的每个分区的iterator:
iterator.foreach(foreachFunction)
foreachPartitionFunction(iterator)
这就很明显了,假如我们的Function中有数据库,网络TCP等IO连接,文件流等等的创建关闭操作,采用foreachPartition方法,针对每个分区集合进行计算,更能提高我们的性能。
flatmap(split):增加行数,扁平化,输入的是集合类RDD

三 宽窄依赖,stage划分,DAG有向无环图

四 计算模式

pipeline

五 RDD缓存

六 RDD共享变量

第二个数据抽象

七 内存泄漏问题

八 数据倾斜

九 zookeeper

十 spark 部署模式

十一 spark组件

worker

十二spark 基本内容

与hadoop
shuffle

referencc:
https://blog.csdn.net/Lwj879525930/article/details/82559596
http://www.cnblogs.com/jxhd1/p/6528540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值