shuffle

https://www.cnblogs.com/arachis/p/Spark_Shuffle.html

https://zhuanlan.zhihu.com/p/70331869

https://www.educba.com/spark-shuffle/

https://lmrzero.blog.csdn.net/article/details/106015264?spm=1001.2014.3001.5502

https://blog.csdn.net/zp17834994071/article/details/107887292

https://zhuanlan.zhihu.com/p/431015932

0 shuffle是什么,什么时候shuffle

what:多个partition的数据流向一个partition

when:宽依赖会有shuffle

shuffle分为两个阶段:shuffle read , shuffle write

map端-》shuffle read-》 shuffle write-》reduce端

1 mapreduce shuffle

2 spark shuffle

1 简介

2 分类

https://www.51cto.com/article/703950.html#

过去hash shuffle ,现在sort shuffle

1.Hash Shuffle

2.Sort Shuffle

1 普通机制的SortShuffleManager

2 bypass

此时task会为每个reduce端的task都创建一个临时磁盘文件,并将数据按key进行hash,然后根据key的hash值,将key写入对应的磁盘文件之中。当然,写入磁盘文件时也是先写入内存缓冲,缓冲写满之后再溢写到磁盘文件的。最后,同样会将所有临时磁盘文件都合并成一个磁盘文件,并创建一个单独的索引文件。
该过程的磁盘写机制其实跟未经优化的HashShuffleManager是一模一样的,因为都要创建数量惊人的磁盘文件,只是在最后会做一个磁盘文件的合并而已。因此少量的最终磁盘文件,也让该机制相对未经优化的HashShuffleManager来说,shuffle read的性能会更好。

3 总结

bypass与普通SortShuffleManager运行机制的不同在于:
第一,磁盘写机制不同;
第二,不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销。

3 对比

https://www.zhihu.com/question/27643595

4 优化

因此在我们的开发过程中,能避免则尽可能避免使用会进行shuffle的算子,尽量使用非shuffle算子

1 shuffle算子:

https://blog.csdn.net/py_tamir/article/details/95457813

reduceByKey、join、distinct、repartition

2 非shuffle算子

map,flatMap

spark部署方式

https://blog.csdn.net/qq_37163925/article/details/106260434

https://spark.apache.org/docs/latest/cluster-overview.html

https://book.itheima.net/course/1269935677353533441/1270998166728089602/1270999667882074115

通过设置mater来选择部署方式。这是Spark程序需要连接的集群管理器所在的URL地址。如果这个属性在提交应用程序的时候没设置,程序将会通过System.getenv(“MASTER”)来获取MASTER环境变量;但是如果MASTER环境变量没有设定,那么程序将会把master的值设定为local[*]

local为单机

standalone是Spark自身实现资源调度

yarn为使用hadoop yarn来实现资源调度

1 local

本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境

local【N】:N为线程数量,通常N为cpu的core的数量

local【*】:cpu的core数量

跑local可以不依赖hadoop

https://blog.csdn.net/wangmuming/article/details/37695619

https://blog.csdn.net/bettesu/article/details/68512570

2 Standalone

https://sfzsjx.github.io/2019/08/26/spark-standalone-%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86

2.1 client

执行流程

  1. client 模式提交任务后,会在客户端启动Driver进程。
  2. Driver 会向Master申请启动Application启动资源。
  3. 资源申请成功后,Driver端会将task发送到worker端执行。
  4. worker端执行成功后将执行结果返回给Driver端

2.2 cluster

执行流程:

  1. 客户端使用命令spark-submit –deploy-mode cluster 后会启动spark-submit进程
  2. 此进程为Driver向Master 申请资源。
  3. Master会随机在一台Worker节点来启动Driver进程。
  4. Driver启动成功后,spark-submit关闭,然后Driver向Master申请资源。
  5. Master接收到请求后,会在资源充足的Worker节点上启动Executor进程。
  6. Driver分发Task到Executor中执行。

2.3 高可用HA

3 Mesos

a general cluster manager that can also run Hadoop MapReduce and service applications. (Deprecated)

4 YARN

为什么要YARN?

Spark On YARN是有两种运行模式的,一种是Cluster模式一种是Client模式.这两种模式的区别就是Driver运行的位置.

Cluster模式即:Driver运行在YARN容器内部, 和ApplicationMaster在同一个容器内

Client模式即:Driver运行在客户端进程中, 比如Driver运行在spark-submit程序的进程中

4.1 cluster

具体流程步骤如下:
1)、任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver;
3)、Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程;
4)、Executor进程启动后会向Driver反向注册;
5)、Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行;

4.2 client

具体流程步骤如下:
1)、Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster;
2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存;
3)、ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程;
4)、Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数;
5)、之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。

5 Kubernetes

an open-source system for automating deployment, scaling, and management of containerized applications.

GNN核心构成

GNN种类很多,包括GCN,GAEs,RecGNNs等,他们的差异在于图结构,消息传递

1.图结构

同构图,异构图,结点和边的设计等

同构图:只有一种类型的节点和边

异构图:可以有不同类型的节点和边

2.消息传递

消息传递是实现GNN的一种通用框架和编程范式。包含以下两个过程:

1 Message Propagation

聚合邻居节点的特征,形成一个消息向量

2 Representation Updating

更新当前时刻的节点表示

参考

https://docs.dgl.ai/guide/message.html#

https://zhuanlan.zhihu.com/p/352510643

https://aclanthology.org/2020.acl-main.547.pdf

https://zhuanlan.zhihu.com/p/350900048

https://docs.dgl.ai/guide_cn/graph-heterogeneous.html#guide-cn-graph-heterogeneous

https://zhuanlan.zhihu.com/p/376062090

BertGCN Transductive Text Classification by Combining GCN and BERT

origin paper: https://arxiv.org/abs/2105.05727

ori code git: https://github.com/ZeroRin/BertGCN

官方知乎: https://zhuanlan.zhihu.com/p/378798855

TextGCN: https://arxiv.org/abs/1809.05679

图结构

we construct a heterogeneous graph containing both word nodes and document nodes following TextGCN. 如下图

node :word nodes and document nodes

edge : We build edges among nodes based on word occurrence in documents (document-word edges) and word co-occurrence in the whole corpus (word-word edges)

edge weight

也和TextGCN一样

node data

不同

重点是解决了TextGCN和BERT一起联调的收敛问题

 GNN GCN
  

:D 一言句子获取中...