1.RDD
弹性分布式数据集,是可以分区的数据集合,每一个分区都会有一个对应的task处理计算。
2.RDD的来源
2.1.从hadoop文件系统中加载过来,如hdfs,hive,hbase等等。
2.2.从其他的变换中得来,比如各类RDD转换操作得到新的RDD。
3.RDD的两大类算子
3.1.一类是transformation算子,记录RDD的变换操作,不实际执行这些变换,比如map,flatMap等等。
3.2.另一类是action算子,会实际触发真正的运算,比如collect,reduce,saveAs....等等。
4.spark程序的提交方式
分为local,yarn-client,yarn-master。
local是以本地方式运行spark程序,本地调试会用到,实际集群中不用。
yarn-client:以提交spark程序的那台集群作为driver端。
yarn-master:根据集群情况选取其中一台作为driver端。
5.共享变量
spark实现线程之间变量的共享有两种方式,一种是累加变量,一种是广播变量。
6.持久化
为了提高程序的执行效率和RDD的重用,可以把一些需要重复使用的RDD持久化到内存中(有多种策略可以选择),当再次使用时,直接读取内存中的RDD即可。
7.内存分配
spark 内存管理把内存分为storage使用,shuffle使用,计算使用。调优的时候根据性能瓶颈会调整这三部分的内存占比。
8.shuffle混洗
这一块通常是制约spark性能最大的瓶颈,把不同分区的相同的key聚合到一起,就会产生大量的磁盘读写操作。