RDD(Resilient Distributed Dateset),弹性分布式数据集。
- RDD的五大特性:
1.RDD是由一系列partition组成
2.算子(函数)是作用子partition上的
3.RDD之间有依赖关系
4.分区器是作用在K,V格式的RDD上
5.partition对外提供最佳的计算位置,利于数据处理的本地化 - 问题:
1.什么是K.V格式的RDD?
RDD中的每个元素是一个个的二元组,那么这个RDD就是K.V格式的RDD
2.sc.textFile(),sparki没有直接读取HDFS文件的方法,textFile()底层调用的是MR读取HDFS文件的方法,首先会split每个split默认大小为128M,就是一个block大小,每个split对应一个partition
3.哪里体现了RDD的弹性(容错)?
1).RDD partition的个数可多可少
2).RDD之间有依赖关系
- 算子
transformations 延迟执行–针对RDD的操作
action 触发执行
简单的说就是使用transformations后并不会触发执行,也就是所谓的懒执行,只有遇到action算子后才会真正的执行
transformations算子例如map()、flapMap()、textFile()
action算子例如foreach()、count()
区分他们的方法是看返回的是不是RDD类型,如果是RDD类型就是懒执行的,如果是一个具体类型(例如Long)那就是action算子
- RDD的持久化
- cache
- persist
- checkpoint
cache()默认将数据存在内存中,只需要在textFile()方法后直接执行sc.cache()即可
persist支持手动指定持久化级别 persist(StorageLevel.MEMORY_ONLY)=cache()=persist()
cache和persist注意,
1.cache和persist 都是懒执行,需要Action算子触发执行。
2.对一个RDD cache或者persist之后可以赋值给一个变量,下次直接使用这个变量就是使用的持久化的rdd。
3.如果赋值给一个变量,那么cache和persist之后不能紧跟Action算子。
checkpoint
将数据存在磁盘中
需要先指定一个路径sc.setCheckpointDir()将数据存在该路径下
然后执行sc.checkpoint()
作用相当于游戏中的检查点
1.将数据存在磁盘中
2.解除检查点与之前的依赖关系
3.与persist(DISK_ONLY)的区别是checkpoint当程序运行完后还是会持久化在磁盘,而persist会将其回收
Spark集群搭建
- 上传后解压
- 配置./conf/slaves
- 配置./conf/spark-env.sh
SPARK_MASTER_IP=node1
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=3g
ip指master的地址 port指提交任务的端口(默认web端口为8080) cores表示worker的核心数(同时运行的线程数) memory指worker的内存大小 - 将配置好的安装包发送到其他节点
- 在master上启动集群 ./sbin/start-all.sh
- 修改master端口(可选)
法1:配置./conf/spark-env.sh
SPARK_MASTER_WEBUI_PORT=9999
法2:修改maser节点中的./sbin/start-master.sh
找到SPARK_MASTER_WEBUI_PORT=9999
法3:临时导入环境变量(重启后失效)
export SPARK_MASTER_WEBUI_PORT=9999
删除临时环境变量 export -n SPARK_MASTER_WEBUI_PORT=9999
Spark基于Yarn提交任务 在客户端./conf/spark-env.sh中配置 HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop