map和reduce分析以及调优参考以及yarn

6.3 map端计算结果缓存处理





1、bypassMergeThreshold:传递reduce端再做合并(merge)操作的阈值。如果partition的数量小于bypassmergethreshold的值,则不需要在Executor执行聚合和排序操作,只需要将各个partitation直接写到Executor的存储文件,最后再reduce端再做串联。通过配置spark.shuffle.sort.bypassMergeThreshold可以修改bypassMergeThreshold的大小,在分区数量小的时候提升计算引擎的性能。bypassMergeThreshold的默认值是200.

2、bypassMergeSort:标记是否传递到reduce端再做合并和排序,即是否直接将各个partitation直接写到Exeutor的存储文件,当没有定义aggregator、ordering函数,并且partition的数量小于等于bypassMergeThreshod时,bypassMergeSort为true。如果bypassMergeSort为true,map中间结果将直接输出到磁盘,此时不会占用太多的内存,避免了内存撑爆问题。

3、map端对计算结果在缓存中执行聚合和排序。

4、map不适用缓存,也不执行聚合排序,直接调用spillToPartitionFiles将各个partition直接写到自己的存储文件(即bypassMergeSort为true的情况),最后由reduce端对计算结果执行合并和排序。spillToPartitionFiles的实现

5、map端对计算结果简单缓存

map端计算结果缓存聚合

一个任务的分区数量通常很多,如果只是简单讲数据存储到Executor上,在执行reduce任务时会存在大量的网络I/O操作,这是网络I/O将成为系统性能的瓶颈,reduce任务读取map任务的计算结果变慢,导致其他想要分配到被这些map任务占用的节点的任务不得不等待或者降低本地化选择分配到更远的节点上,对于更远节点的I/O本身会更慢,因此还会导致更多的任务得不到分配或者无法高效本地化。经过这样的恶性循环,整个集群将变得迟钝,新的任务长时间得不到执行或者执行变慢。

通过在map端对计算结果在缓存中执行聚合和排序,能够节省I/O操作,进而提升系统性能。这种情况下,必须定义聚合器(aggregator)函数,以便对计算结果按照partitionID和key聚合后排序。

map端计算结果持久化

writePartitionedFile用于持久化计算结果。此方法有两个分支:

溢出到分区文件后合并:将内存中缓存的多个partition的计算结果分别写入到临时block文件,然后将这些block文件的内容全部写入正式的block输出文件中。

内存中排序合并:将缓存的中间计算结果按照partition分组后写入Block输出文件。此种方式还需要更新此任务与内存、磁盘有关测量的数据。

6.4.1溢出分区文件

spillToPartitionFiles用于将内存中的集合数据按照每个partition创建一个临时Block文件,为每个临时Block文件生成一个DiskBlockObjectWriter,并且用DiskBlockObjectWriter将计算结果分别写入这些临时Block文件中。createTempShuffleBlock方法创建临时的Bloc

6.5.2划分本地与远程Block

无论是本地还是从MapOutputTrackerMaster获取的状态信息,都需要按照地址划分且转换为BlockId。ShuffleBlockFetcherIterator是读取中间结果的关键。

6.7map端与reduce端组合分析

6.7.1在map端溢出分区文件,在reduce端合并组合

bypassMergeSort标记是否传递到reduce端再做合并和排序,此种情况不适用缓存,而是现将数据按照partition写入不同的文件,最后按partition顺序合并写入同一文件中。当没有hiding聚合、排序函数,且partition数量较小时,一般采用这种方式。此种方式将多个bucket合并到同一个文件,通过减少map输出的文件数量,节省了磁盘的I/O,最终提升了性能。


6.7.2 在map端简单缓存,排序分组,在reduce端合并组合

此种情况在缓存中利用指定的排序函数对数据按照partition或者key进行排序,最后按partition顺序合并写入同一文件。当没有指定聚合函数,且partition数量大时,一般采用这种方式,此种方式将多个bucket合并到同一个文件,通过减少map输出的文件数量,节省了磁盘I/O,提升了性能;对SizeTrackingPairBuffer的缓存进行溢出判断,当超出myMemoryThreshold的大小时,将数据写入磁盘,防止内存溢出。


6.7.3在map端缓存中聚合、排序分组、在reduce端组合

此种情况在缓存中对数据按照key聚合,并且利用指定的排序函数对数据按照partition或者key进行排序,最后按partition顺序合并写入同一文件。当指定了聚合函数时,一般采用这种方式,见下图,此种方式将多个bucket合并到同一文件,通过减少map输出的文件数量,节省了磁盘I/O,提升了性能;对中间输出数据不是一次性读取,而是逐条放入AppendOnlyMap的缓存对数据进行聚合,减少了中间结果占用的内存大小;对AppendOnlyMap的缓存进行溢出判断,当超出myMemoryThreshold的大小时候,将数据写入磁盘,防止内存溢出。

内核分配策略:

1、构造ProcessBuilder,进程主类是CoarseGainedExecutorBackend,有关buildProcessBuilder的实现

2、为ProcessBuilder设置执行目录、环境变量

3、启动ProcessBuilder,生成线程。

4、重定向进程的文件输出流与错误流为executorDir目录下的stdout与stderr。

5、等待获取进程的退出状态,一旦收到退出状态,则向Worker发送ExecutorStateChanged消息

7.5.1YARN

mrv1的运行时环境由jobtracker和TaskTracker两类服务组成,JobTracker负责资源和任务的管理与调度,TaskTracker负责单个节点的资源管理与任务执行。在YARN中,JobTracker被分为两部分:ResourceManager(RM)和ApplicationMaster(AM)RM负责资源管理和调度,AM负责具体应用程序的任务划分、调度等工作

ResourceManager(RM):全局资源管理器,负责整个系统的资源管理与分配。RM由调度器和应用程序管理器组成。调度器将系统资源分配给各个应用程序,而是Container是对CPU,内存等资源的封装。应用程序管理器负责整个系统的应用程序,如何处理程序提交,与调度器沟通后为应用程序启动applicationMaster

ApplicationMaster(AM):用户提交的每个任务都有一个AM,它会与RM通信获取资源,将任务划分为更加细粒度的任务,与NodeManager(NM)通信启动或停止任务,


spark提交给yarn任务顺序:

1)将spark提供的Application在Yarn集群中启动

2)ApplicationMaster向ResourceManager申请containner。

3)申请COntainner成功后,向具体的NodeManager发送指令启动Container

4)ApplicationMaster启动对各个运行的ContainerExecutor进行监控。

ApplicationMaster给Application分配资源主要借助YarnAllocationHandler

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容