1.Spark安装分为:Local(本地模式),Standalon(Spark独立集群模式),Yarn模式
2.Standalon模式 和 Yarn模式区别:
Standalon有自己独立的Master 和 Worker节点作为资源管理
Yarn模式使用Yarn中的ResourceManager 和 NodeManager进行资源管理
3.端口号:
Master 内部通信端口号:7077
Spark-shell 运行端口号:4040
Standalon 模式下,WEB-UI端口号:8080
Spark历史服务器:18080
Yarn运行情况:8088
4.Spark中组件主要分为Driver 和Excetor
5.Driver 主要作用:
将用户的程序转化为一个一个任务
跟踪excetor运行情况
在excetor间调度任务
6.Excetor 主要作用:
执行Driver分配的任务
向Driver 反馈任务执行情况
7.有向无环图
把任务和任务之间的联系用图形和线连起来,组成一个有方向,但是不能回连成环的图
8.Spark提交流程
用户运行main方法,Driver 会执行两个步骤:
1.会像Yarn申请资源
2.会把用户程序划分为任务,然后把任务task发给excetor
9.Yarn部署有两种模式,区别在于:Driver 的执行地方
1.client模式,Driver在提交程序的机器上执行
2.cluster模式,Driver在NodeManager上的ApplicationMaster上运行
10.Spark有三大数据结构
RDD
累加器
广播变量
11.RDD
RDD是Spark中一段数据处理逻辑,类似于java中的IO,字节流到字符流,应用了java中的装饰者设计模式,这个模式,只会包装逻辑,一层RDD包装一层RDD,简单逻辑组成复杂逻辑,但是只有在最后使用的时候才会执行这条计算链
特点:
存储的弹性:内存与磁盘存储切换
容错的弹性:数据丢失,可恢复
计算的弹性:计算出错,可以重试
分片的弹性:可以重新分片(分区)
RDD不保存数据,只是封装了计算逻辑,一个RDD不会改变,不会变化,计算只会产生新的RDD
可以分区,并行计算
12.RDD的属性
分区:分区可以让RDD 并行执行度,
分区计算:每个分区都会计算同样的逻辑
依赖关系:RDD都会存在依赖关系(多个RDD之间的依赖关系)
分区器
13.RDD的创建:
内存中makeRDD
textfile文件中
new
从一个RDD中
14.若不指定excetor的数量,那么默认是1,并且每个excetor中默认的core是1
15.在用内存中创建RDD的时候,可以指定分区数,也就是这个RDD计算逻辑时的并行度,若是不指定默认是当前执行机器的core数量,如果指定那么就是指定的数量的并行度
16.在用内存创建RDD的时候,数据会根据数据的长度和 并行度来确定数据分配在那个分区里
数据量是 n个,并行度指定是m个,那么第一个分区数据则是原始数据的(包头不包尾) (0*n/m,1*n/m] ,最后一个是((n-1)*n/m,n*n/m]
17.读取文件数据时,分区是:如果不传分区,min(2,当前机器的core),2和当前机器的core数取最小值,为最小分区数量,如果指定数量,那么指定的就是最小分区数,但这并不是最终的分区数
18.那么,Spark读取文件数据时,到底有多少分区呢?
安照文件的字节总大小total,每个分区包含字节数 total/partion,这就是每个分区的字节数量大小,如果有余数,如果余数大于 每个分区字节数的 10%,那么就分到一个新的分区,如果小于10%,那么归并到前一个分区
19.读取文件时,数据如何分配,通过偏移量分配数据。也是按字节量来分配,但是每行的换行也都占两个字节,但是每次都是读取一行的,(和hadoop中的mapreduce读取数据分区是一样的),比如第一个分区,需要读取total/partion 个字节,如果最后一个字节数不是这一行的末尾,那么这一行数据所有的都读到这个partion内,下一个分区,还是从 total/partion * 2(第二个分区),开始读,如果有部分数据在上一行中读到了第一个分区中,那么就往第二行开始读,直至读完total/parition
如果是读的目录,那么按总字节大小计算分区字节数,然后一个一个文件按标准来读