发表的东西仅为个人理解,如有不同意见可评论交流
Spark的Shuffle的几种方式
四种方式
未优化的HashShuffle
Executor中的ask会有自己的缓冲区,每个缓冲区会有一一对应的磁盘文件。所以生成的磁盘文件数量=mapTask*resultTask
优化了的HashShuffle
优化后mapTask生成的文件会根据spark core的数量来决定,比如一个spark core就生成一个磁盘文件,两个core就两个磁盘文件。生成磁盘文件数量的公式不变,mapTask减少,总的磁盘文件减少
SortShuffle
在HashShuffle的基础上多了对磁盘文件的合并(mapTask端),以及写入内存缓冲区时进行排序。
ByPass
比SortShuffle大体一致,但时ByPass不经过排序,而是直接写入内存缓冲区。开启的话需要设置阈值,设置为200
Redis的持久化
rdb
redis默认的持久化方式。
当时间与键的更新数量达到预设的值的时候,进行快照拍摄。
缺点:可能还没达到快照拍摄的条件就redis已经变为不可用了,所以会丢失数据。
aof
像namenode的Edits一样,对每一次键的更新操作进行记录,redis启动后可以通过aof文件进行重新推演。
缺点:每一次都记录,会造成资源开销较大
优点:数据不会丢失
Spark On Yarn?
cluster模式
1.客户端提交一个application并在客户端启动一个Driver进程
2.Driver进程会向RS发送请求,启动AM
3.RS收到了客户端的请求,随机选一台NM启动Am
4.AM启动后,向RS请求资源用于启动Executor
5.RS发送一批可用的NM给AM
6.AM向NM发送命令启动Executor
7.Executor启动后会在Client的Driver上反向注册,Driver端可以查看任务的运行状态
client模式
Cluster的原理与Client基本一致,不同的就是,客户端提交王application后,Driver是在集群上面启动的。