Hadoop系列——Shuffle过程详解

一道看似简单的阿里前端算法题 博主本次介绍的题目是真实来自阿里前端CBU部门招聘实习生的一道前端算法题,这道题并不是LeetCode上的找出数组中第K大的元素这道题模,而是在这道题目的基础上进行了改编,让我们一起来探索下这道题目该如何解决。 题目描述 题目分析 我们以下面这个数组为例,我们首先要明白题目中的第2大的元素指的是4,第3大的元素指的是3,也就是说指的是去重后的数组中的排序。我们之所以要建立一个哈希表是因为我们需要知道第k大和第m大的元素总共出现了几次,因为最后需要进行求和。 [1, 2, 4, 4, 3, 5] . 阅读详情
/**
* author : 冶秀刚
* mail     : dennyy99@gmail.com
*/


        Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混。前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟。考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能试着把Shuffle说清楚,让每一位想了解它原理的朋友都能有所收获。如果你对这篇文章有任何疑问或建议请留言到后面,谢谢!

        Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序。如果你不知道MapReduce里Shuffle是什么,那么请看这张图:




        这张是官方对Shuffle过程的描述。但我可以肯定的是,单从这张图你基本不可能明白Shuffle的过程,因为它与事实相差挺多,细节也是错乱的。后面我会具体描述Shuffle的事实情况,所以这里你只要清楚Shuffle的大致范围就成-怎样把map task的输出结果有效地传送到reduce端。也可以这样理解, Shuffle描述着数据从map task输出到reduce task输入的这段过程。

        在Hadoop这样的集群环境中,大部分map task与reduce task的执行是在不同的节点上。当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果。如果集群正在运行的job有很多,那么task的正常执行对集群内部的网络资源消耗会很严重。这种网络消耗是正常的,我们不能限制,能做的就是最大化地减少不必要的消耗。还有在节点内,相比于内存,磁盘IO对job完成时间的影响也是可观的。从最基本的要求来说,我们对Shuffle过程的期望可以有:
  • 完整地从map task端拉取数据到reduce 端。
  • 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。
  • 减少磁盘IO对task执行的影响。

        OK,看到这里时,大家可以先停下来想想,如果是自己来设计这段Shuffle过程,那么你的设计目标是什么。我想能优化的地方主要在于减少拉取数据的量及尽量使用内存而不是磁盘。

        我的分析是基于Hadoop0.21.0的源码,如果与你所认识的Shuffle过程有差别,不吝指出。我会以WordCount为例,并假设它有8个map task和3个reduce task。从上图看出,Shuffle过程横跨map与reduce两端,所以下面我也会分两部分来展开。

        先看看map端的情况,如下图:



      

        上图可能是某个map task的运行情况。拿它与官方图的左半边比较,会发现很多不一致。官方图没有清楚地说明partition, sort与combiner到底作用在哪个阶段。我画了这张图,希望让大家清晰地了解从map数据输入到map端所有数据准备好的全过程。

        整个流程我分了四步。简单些可以这样说,每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。

        当然这里的每一步都可能包含着多个步骤与细节,下面我对细节来一一说明:
1.        在map task执行时,它的输入数据来源于HDFS的block,当然在MapReduce概念中,map task只读取split。Split与block的对应关系可能是多对一,默认是一对一。在WordCount例子里,假设map的输入数据都是像“aaa”这样的字符串。

2.        在经过mapper的运行后,我们得知mapper的输出是这样一个key/value对: key是“aaa”, value是数值1。因为当前map端只做加1的操作,在reduce task里才去合并结果集。前面我们知道这个job有3个reduce task,到底当前的“aaa”应该交由哪个reduce去做呢,是需要现在决定的。

        MapReduce提供Partitioner接口,它的作用就是根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理。默认对key hash后再以reduce task数量取模。默认的取模方式只是为了平均reduce的处理能力,如果用户自己对Partitioner有需求,可以订制并设置到job上。

        在我们的例子中,“aaa”经过Partitioner后返回0,也就是这对值应当交由第一个reducer来处理。接下来,需要将数据写入内存缓冲区中,缓冲区的作用是批量收集map结果,减少磁盘IO的影响。我们的key/value对以及Partition的结果都会被写入缓冲区。当然写入之前,key与value值都会被序列化成字节数组。

        整个内存缓冲区就是一个字节数组,它的字节索引及key/value存储结构我没有研究过。如果有朋友对它有研究,那么请大致描述下它的细节吧。

3.        这个内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写,字面意思很直观。这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。

        当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对序列化的字节做的排序。

        在这里我们可以想想,因为map task的输出是需要发送到不同的reduce端去,而内存缓冲区没有对将发送到相同reduce端的数据做合并,那么这种合并应该是体现是磁盘文件中的。从官方图上也可以看到写到磁盘中的溢写文件是对不同的reduce端的数值做过合并。所以溢写过程一个很重要的细节在于,如果有很多个key/value对需要发送到某个reduce端去,那么需要将这些key/value值拼接到一块,减少与partition相关的索引记录。

        在针对每个reduce端而合并数据时,有些数据可能像这样:“aaa”/1, “aaa”/1。对于WordCount例子,就是简单地统计单词出现的次数,如果在同一个map task的结果中有很多个像“aaa”一样出现多次的key,我们就应该把它们的值合并到一块,这个过程叫reduce也叫combine。但MapReduce的术语中,reduce只指reduce端执行从多个map task取数据做计算的过程。除reduce外,非正式地合并数据只能算做combine了。其实大家知道的,MapReduce中将Combiner等同于Reducer。

        如果client设置过Combiner,那么现在就是使用Combiner的时候了。将有相同key的key/value对的value加起来,减少溢写到磁盘的数据量。Combiner会优化MapReduce的中间结果,所以它在整个模型中会多次使用。那哪些场景才能使用Combiner呢?从这里分析,Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。Combiner的使用一定得慎重,如果用好,它对job执行效率有帮助,反之会影响reduce的最终结果。

4.        每次溢写会在磁盘上生成一个溢写文件,如果map的输出结果真的很大,有多次这样的溢写发生,磁盘上相应的就会有多个溢写文件存在。当map task真正完成时,内存缓冲区中的数据也全部溢写到磁盘中形成一个溢写文件。最终磁盘中会至少有一个这样的溢写文件存在(如果map的输出结果很少,当map执行完成时,只会产生一个溢写文件),因为最终的文件只有一个,所以需要将这些溢写文件归并到一起,这个过程就叫做Merge。Merge是怎样的?如前面的例子,“aaa”从某个map task读取过来时值是5,从另外一个map 读取时值是8,因为它们有相同的key,所以得merge成group。什么是group。对于“aaa”就是像这样的:{“aaa”, [5, 8, 2, …]},数组中的值就是从不同溢写文件中读取出来的,然后再把这些值加起来。请注意,因为merge是将多个溢写文件合并到一个文件,所以可能也有相同的key存在,在这个过程中如果client设置过Combiner,也会使用Combiner来合并相同的key。

        至此,map端的所有工作都已结束,最终生成的这个文件也存放在TaskTracker够得着的某个本地目录内。每个reduce task不断地通过RPC从JobTracker那里获取map task是否完成的信息,如果reduce task得到通知,获知某台TaskTracker上的map task执行完成,Shuffle的后半段过程开始启动。

        简单地说,reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件。见下图:




        如map 端的细节图,Shuffle在reduce端的过程也能用图上标明的三点来概括。当前reduce copy数据的前提是它要从JobTracker获得有哪些map task已执行结束,这段过程不表,有兴趣的朋友可以关注下。Reducer真正运行之前,所有的时间都是在拉取数据,做merge,且不断重复地在做。如前面的方式一样,下面我也分段地描述reduce 端的Shuffle细节:
1.        Copy过程,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求map task所在的TaskTracker获取map task的输出文件。因为map task早已结束,这些文件就归TaskTracker管理在本地磁盘中。

2.        Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活,它基于JVM的heap size设置,因为Shuffle阶段Reducer不运行,所以应该把绝大部分的内存都给Shuffle用。这里需要强调的是,merge有三种形式:1)内存到内存  2)内存到磁盘  3)磁盘到磁盘。默认情况下第一种形式不启用,让人比较困惑,是吧。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件。

3.        Reducer的输入文件。不断地merge后,最后会生成一个“最终文件”。为什么加引号?因为这个文件可能存在于磁盘上,也可能存在于内存中。对我们来说,当然希望它存放于内存中,直接作为Reducer的输入,但默认情况下,这个文件是存放于磁盘中的。至于怎样才能让这个文件出现在内存中,之后的性能优化篇我再说。当Reducer的输入文件已定,整个Shuffle才最终结束。然后就是Reducer执行,把结果放到HDFS上。

        上面就是整个Shuffle的过程。细节很多,我很多都略过了,只试着把要点说明白。当然,我可能也有理解或表述上的很多问题,不吝指点。我希望不断地完善和修改这篇文章,能让它通俗、易懂,看完就能知道Shuffle的方方面面。至于具体的实现原理,各位有兴趣就自己去探索,如果不方便的话,留言给我,我再来研究并反馈。
Spark 的Shuffle过程详解 一、Shuffle的作用是什么? Shuffle的中文解释为“洗牌操作”,可以理解成将集群中所有节点上的数据进行重新整合分类的过程。其思想来源于hadoop的mapReduce,Shuffle是连接map阶段和reduce阶段的桥梁。由于分布式计算中,每个阶段的各个计算节点只处理任务的一部分数据,若下一个阶段需要依赖前面阶段的所有计算结果时,则需要对前面阶段的所有计算结果进行重新整合和分类,这就 阅读详情

相关推荐

quartus蜂鸣器例程

cyclone 1开发板用的例程,供初学者参考使用,hen'jian'd

白话:java从入门到实战

白话讲解java特性,可以帮助准备从事java工程师的学员从零基础到能进行企业级开发,本课程会尽量避免枯燥的java讲解,用通俗易懂的方式与大家沟通。

谷歌卫星地图下载器11.15.78

资源简介 谷歌卫星地图下载器去广告破解绿色版 1.新增了导出多张大图为GeoTIFF。   2.新增了导出多张大图为GeoJPEG。   3.新增了导出瓦片图片为GeoTIFF。   4.新增了导出瓦片图片为GeoJPEG。   5.修正导出必应格式图片bug。   卫星地图下载器 GS 版是阿凯日软件工作室推出的一款基于谷歌服务器的多线程卫星地图浏览下载软件。该软件可以高速下载您所指定的任意经纬度范围的卫星地图,并可将所下载的卫星地图进行无缝拼接,使您可以充分利用谷歌的免费卫星地图资源,享受遨游世界的乐趣。   该软件的特点主要包括:   01.提供了名称查询定位您可以在查询框中输入名称如“成都”,并在动态列表中选择“成都”,即可将视图正确定位显示到成都所在的位置。   02.提供了坐标查询定位您可以在查询框中输入坐标如“104.073653,30.661714”,并单击“查询”按钮,即可将视图正确定位显示到成都所在的位置。   03.提供了简拼查询定位您能够在查询框中输入简拼如“cd”,并在动态列表中选择“成都”,即可将视图正确定位显示到成都所在的位置。   04.还提供了下载任务列表软件提供了下载任务列表窗口,在该窗口中可显示所有的下载任务。在窗口垂直分割条的左下角选择“下载”标签,可将视图切换到下载树窗口。在下载树窗口中选择根节点“下载”,任务列表中将会显示所有状态的任务;选择“正在下载”,任务列表中将显示正在下载的、暂停的和计划下载的任务;选择“已下载”,任务列表中将显示已下载完成的和已拼接完成的任务。   05.提供了全球地图浏览软件提供了全球卫星地图浏览窗口,在该窗口中,您可以通过滚动鼠标中键滚轮对视图进行缩放;通过按下鼠标中键对视图进行平移。   06.提供了下载进度监视软件提供了下载进度监视窗口,当您选择了一个下载任务时,该窗口中将显示当前任务的下载情况。视图中的一个点代表一张256 x 256的图片,其中“灰色”点表示未下载;“黄色”点表示第一次下载失败;“紫红色”点表示第二次下载失败;“红色”点表示第三次下载失败;“绿色”点表示下载成功。   07.提供了下载结果浏览软件提供了下载结果浏览窗口,在该窗口中只能平移浏览下载结果,不可缩放视图。   08.提供了主要城市地标软件提供了主要城市的地标,在窗口垂直分割条的左下角选择“地标”标签,可将视图切换到地标树窗口,双击节点下的地标子节点可快速定位。   09.支持ADSL自动拔号软件支持ADSL自动拔号,在工具栏上单击“自动拔号”显示拔号助手工具,在该工具中单击“查看说明”按钮,可详细了解该工具的目的与意义。   10.支持可视化新建任务软件支持可视化新建任务,在主窗口中单击“卫片浏览”标签切换到地图浏览窗口,鼠标状态默认为下范围框选状态(如果不框选状态,请单击工具栏上的“框选”按钮),在视图中绘出需要下载的范围选择框,然后在该选择框内双击鼠标即可开始新建任务。   11.支持数字化新建任务软件支持数字化新建任务,在工具栏上单击“新任务”,即可通过输入需要下载范围的左下角坐标和右上角坐标开即新建下载任务。   12.支持有多任务同时下载软件支持多任务同时下载,但至多不超过五个。   13.支持多线程高速下载软件支持多线程,默认为每个任务开启五个下载线程以提高下载速度,该线程数暂不提供给用户设置。   14.支持计划的任务下载软件支持计划任务下载,当当前处于下载状态的任务大于五个时,新建的所有任务或试图将非下载状态的任务开启为下载状态的任务都将处于计划任务状态,每当完成一个下载任务后,处于计划状态的任务将依次进入下载队列。   15.支持任务的断点续传软件支持任务的断点续传,若当前正在下载的任务因人为的或非人为的(如断电或其它不可预知的原因)因素导致任务中断下载,则再次下载该任务时,该任务会从上次中断的位置继续,而不必再从头开始下载。   16.支持完成后自动关机软件支持完成后自动关机,当下载任务很重时,可以让软件无人职守工作,并在完成所有下载任务以后自动的关机。要实现该功能,只需从“设置”菜单中选择“完成后关机”即可。   17.可以叠加显示地名标签软件可叠加显示地名标签,浩瀚的世界往往会让我们迷失方向,很难找到目的地,不过只要开启叠加显示地名标签功能即可将您导向您需要到达的城市。需要开启该功能,只需要去从“设置”菜单中选择“标签图片”即可。   18.可生成精确坐标文件软件可生成精确的坐标文件,这样才会有利于我们将所下载的图片精确地叠加到其它软件中。需要实现该功能,您可以根据实际需要,在“设置”菜单中选择“生成JGW坐标文件”或选择“生成TXG坐标文件”。不过需要注意的是,生成的坐标仅与GE完全吻合,如果GE与真实坐标存在误差,那么生成的坐标也同样会存在有误差的。   19.可智能分析完整下载软件有智能分析是否需要重下载的功能,以能够确保下载图片的完整性。因为Google要封IP的原因,我们不得不使用“自动拔号”工具,而在每次自动拔号的瞬间就会导致当前图片下载失败,如果这一些下载失败的图片在监视视图中所对应的点呈红色,且绝大部呈零散状分布,则经过智能分析以后,系统会弹出对话框显示分析结果(是继续下载还是取消下载)并在30秒后默认自动下载;如果这些红色的点绝大部分呈连续块状分布,则经过智能分析以后,系统会弹出对话框显示分析结果(是继续下载还是取消下载)并在30秒后默认取消下载。该功能在较大范围的下载任务中尤其重要,它能确保无人职守并且完整下载所指定范围的下载任务。   20.可无缝拼接成大图片软件可将256 x 256 的小图片无缝拼接成大图片,但是范围太大时将会拼接成多张大图片(通常在8000 x 8000 左右的大图,具体大小会根据所选择的下载范围自动计算),并以“行-列。jpg”命名,如果开启了生成坐标的功能,并且会同时的生成和图片名称同名的坐标。   21.可自动记忆视图位置软件可自动记录视图位置,可以方便在下一次启动软件后会立即定位到上一次关闭软件时所显示的视图位置。   22.可显示两种坐标类型软件可显示两种坐标方式,一种是按度分秒方式显示坐标,具有另一种是按小数的方式显示坐标,您可以通过“设置”菜单中的“显示坐标为度分秒”自由切换。   23.可在线自动升级更新软件可在线自动升级,当它询问您是否需要进行更新的时候,强烈建议您选择“是”,以确保您能正常使用我们开发的新功能。   24.可以在线进行反馈技术问题软件可在线反馈技术问题,无论您遇到什么问题,请在主窗口下方单击“技术支持”标签切换到技术支持窗口,并将您的问题填写到该表单发会送给我们,我们将在第一时间给您回复,以尽快解决您所遇到的问题。当然,您也可以将您的建议或意见反馈给我们,我们将会认真考虑您的建议或意见并且会对软件作出相应的升级更新。

MapReduce:详解Shuffle过程

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混。前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟。考虑到之前我在看相关资料而看不懂时很恼火,所以在这里

Mac Track 1939

计算机网络自顶向下(第八版)第一章课后习题

电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑;

hiahiakk的博客 2256

HDI盲埋孔设计规范:高速PCB信号完整性落地指南

盲埋孔是高密度互连(HDI)PCB实现高速信号完整性的关键技术,其本质是通过控制过孔stub长度、优化回流路径和提升布线密度,解决GHz级信号在传统通孔结构下出现的谐振、串扰与EMI超标问题。其设计核心在于叠层物理约束、电气参数建模与工艺能力协同,涉及stub长度计算、反焊盘尺寸推导、孔壁粗糙度Rz控制等关键指标。广泛应用于DDR4、PCIe Gen4、USB3.2等高速接口的PCB设计中,尤其在车载ADAS、5G基站及FPGA载板等对SI/PI要求严苛的场景中成为刚性门槛。

weixin_34416754的博客 437

Hadoop系列:MapReduce shuffle 过程详解

MapReduce 计算模型主要由三个阶段构成:Map、shuffle、ReduceMap 负责数据的拆分,将原始数据转化为 <key,value> 键值对Reduce 负责数据的聚合,将具有相同 key 值的 value 进行处理后再输出新的 <key,value> 键值对作为最终结果为了让 Reduce 可以并行处理 Map 的结果,必须对 Map 的输出进行一定的排序与分割,然后再交给对应的 Reduce,而这个将 Map 输出进行进一步整理并交给 Reduce 的过程就是 Shuffle。

兴趣是最好的老师 720

Cadence仿真MOS电容C-V曲线:从电路图到参数扫描的完整流程

本文详细介绍了使用Cadence Virtuoso仿真MOS电容C-V曲线的完整流程,从电路图绘制到参数扫描,再到结果分析与问题排查。通过实际案例和实用技巧,帮助工程师快速掌握MOS电容特性分析的关键步骤,提升集成电路设计效率。

weixin_29271263的博客 431

关于hadoop 的shuffle 过程理解(面试题系列~~~)

文章目录map 端的shuffle 过程reduce 端的shuffle 过程复制阶段合并阶段 MapReduce 确保每个reducer 的输入都是按键进行排序的。系统执行排序,将map 输出作为输入传给reducer 的过程称为shuffle。 map 端的shuffle 过程 map 端会先将输出写入到内存缓冲区,当内存缓冲区到达指定的阈值时,一个后台线程就开始将缓冲区的内容spill 到...

1178

三菱FX5U通信之CCLINK操作步骤

11. 连接 CC‐Link 用的端子排,连接 Ver.1.10 对应 CC‐Link 专用电缆。备注:1、以上对应的寄存器都是一一对应的,主站的点数可以比从站多,但是都需要一一对应起来。3.直接安装孔,用于直接安装的螺钉孔(2‐φ4.5,安装螺钉为 M4 螺钉)2.点阵 LED(显示模块中设置的站号和测试模式的内容)5.次段扩展连接器(连接扩展模块的扩展电缆的连接器)4.动作状态(显示 LED 显示模块的动作状态)10 电源连接器,用于连接电源电缆的连接器。1.扩展电缆(扩展时连接用的电缆)

ZXL622722的博客 6929

Hadoop系列——MapRdecude工作流程;MapTask,Shuffle,ReduceTask过程详解

一、MapTask过程 MapTask阶段主要是分为read-Map-Collect-Spill四个过程 Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个Key/Value对。 Map阶段:将解析出来的Key-value交给map()方法进行处理,产生新的Key-Value对。 Collect阶段:map()处理完数据以后会调用OutputCollector.collect()输出结果。该函数,将这些键值对进行分区,然后写入环形缓冲区。 Spi

Cxf2018的博客 517

C++ Qt6 QtQuick/QML入门进阶与项目实战视频教程

C++ Qt这些年在PC客户端、嵌入式、汽车座舱仪表等领域应用很广泛,例如剪映专业版、微信4.0、亿图脑图、Steam、美图秀秀、腾讯会议、钉钉(部分模块)等都是使用C++ QWidget/QML开发。特别是QML这种声明式UI开发更加快捷,QML的界面开发效率相对于QWidget更快速,界面效果更好,QtQuick/QML在Qt6版本也逐渐完善了,使用QML进行客户端开发是个不错的选择。

琅嬛福地 4488

从头开始系列(四)--Hadoop篇之Shuffle过程源码剖析

1、Map端Shuffle 2、Reduce端shuffle 本篇文章通过Hadoop2.7.5源码获得。 1、Map端Shuffle 必备条件:idea、一个WordCount的MR程序。 在开始之前,我们注意到,Shuffle是Map端输出——&gt;Reduce端接收过程。在这个过程中我们很容易想到一个问题,那就是,我们该怎么知道Map端输出是在源码哪个部分,我们这样...

weixin_42028303的博客 1847

详细分析一下华为自研的MetaERP系统中的合并报表流程与规则

华为MetaERP合并报表系统针对其全球化复杂业务量身定制,采用五层自动化架构:统一数据采集、多币种转换、智能对账协同、规则化抵消处理及多维分析输出。系统核心在于可配置的智能规则引擎,涵盖股权合并范围、内部交易抵消、未实现利润计算等复杂场景,实现多准则并行处理。相比传统软件,该系统深度集成业务数据、支持准实时合并,并通过参数化配置快速适应组织变革,成为华为全球财务管控的"数字神经中枢",在效率、准确性和安全性上具有显著优势。

金牌架构师 673

PX4实战(十):PX4导航模块(Navigator)详解

本文将对 PX4 固件 v1.14.3 版本中的 Navigator(导航)模块进行详尽的技术剖析。作为飞行控制栈中的高层决策核心,Navigator 模块承担着将抽象的任务指令转化为具象的底层控制设定点的关键职责。本文基于对 src/modules/navigator 目录下源代码的深究研究与架构反推,详细阐述了该模块的文件组织结构、基于状态机的控制逻辑、uORB 异步通讯机制、核心任务模式(Mission)与返航模式(RTL)的实现细节,以及地理围栏(Geofence)与任务可行性检查(Feasibil

PX4-SLAM-PNC 669

Hadoop1中Reduce task内部实现原理

与map task 一样,reduce task也分为4种,即job-setup task、job-cleanup task、task-cleanup task和reduce task。本文中重点介绍reduce task。reduce task要从各个map task上读取一片数据,经排序后,以组为单位交给用户编写的reduce( )函数处理,并将结果写到HDFS上reduce task整体流程

Xlucas的博客 1159

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hadoop优化0

    1 map端优化:   1.1 shuffle过程中: 数据从mapper端传递到reducer端的过程,  网络传输 磁盘读写操作  这是最耗费时间的. 此时,可以进行数据压缩,参考链接:hadoop压缩 1.2 map端的数据排序是发生在内存中,如果map缓冲区越大,那么写出到磁盘的次数就越少。       map端将内存中的数据spill到磁盘的时候,如果磁盘的是...

后知后觉的it路 120

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Hadoop 1.x的Shuffle源码分析之2

ReduceTask类的内嵌类ReduceCopier的内嵌类MapOutputCopier的函数copyOutput是Shuffle里最重要的一环,它以http的方式,从远程主机取数据:创建临时文件名,然后用http读数据,再保存到内存文件系统或者本地文件系统。它读取远程文件的函数是getM...

chutian8427的博客 114

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hadoop之Shuffle机制详解

1.什么是Shuffle机制 1.1)在Hadoop中数据从Map阶段传递给Reduce阶段的过程就叫Shuffle,Shuffle机制是整个MapReduce框架中最核心的部分。 1.2)Shuffle翻译成中文的意思为:洗牌、发牌(核心机制:数据分区、排序、缓存) 2.Shuffle的作用范围 一般把数据从Map阶段输出到Reduce阶段的过程叫Shuffle,所以Shuffle的作用范围是Map阶段数据输出到Reduce阶段数据输入这一整个中间过程! 3.Shuffle图解 上图是官方对S

天天water的专栏 6032

Hadoop与Spark中的Shuffle过程梳理

hadoop与spark中的shuffle过程梳理

huxili2020的博客 1999

Shuffle的过程作用详解

shuffle shuffle过程中的几个名词:shuffle:洗牌;spill:溢出;combiner:合成;merge:融入混合;copy:复制 shuffle的使用地点:发生在map task输出结果传送到reduce task 输入的阶段 使用shuffle的好处:在从map task端拉取数据到reduce task端时,减少宽带的消耗, 将数据完整的从map task端拉取数据到re...

qq_40595055的博客 3613

Shuffle过程详解

Shuffle过程详解      Shuffle过程是MapReduce的核心,最近看了很多资料,网上说法大体相同,但有些地方有一点点出入,就是各个阶段的执行顺序 总个shuffle过程可以看做是从map输出到reduce输入的这个中间过程,在这个中间过程中,经过了一系列的步骤     下面看看官方给出的图     Map端 下面是我画的一张图    1.In

至道 1万+

hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化

大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spark,mapReducehe和Spark之间的最大区别是前者较偏向于离线处理,而后者重视实现性,下面主要介绍mapReducehe和Spark两者的shuffle过程。 MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌、混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越

u010697988的专栏 1万+

hadoop 的 shuffle 过程

hadoop 的 shuffle 过程 huffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混。前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟。考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能试着把Shuffle说清楚,让每一位想了解它原理的朋友都能有

qq_40383147的博客 705

shuffle过程详解

shuffle过程 shuffle概念 shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。其在MapReduce中所处的工作阶段是map输出后到re...

follweme888的专栏 1万+
上一篇: Hadoop相关书籍
下一篇: Windows中进程的内存结构
Smiling_Morning
博客等级 码龄10年 4粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值