我正在阅读原始的 MapReduce 论文。我的理解是,当处理数百 GB 的数据时,传输如此多数据的网络带宽可能成为 MapReduce 作业的瓶颈。对于 map 任务,我们可以通过在已经包含任何给定拆分数据的 worker 上安排 map 任务来减少网络带宽,因为从本地磁盘读取不需要网络带宽。
然而,shuffle 阶段似乎是一个巨大的瓶颈。 reduce 任务可能会从所有 map 任务接收中间键/值对,并且几乎所有这些中间键/值对都将通过网络流式传输。
当处理数百 GB 或更多的数据时,有必要使用组合器来实现高效的 MapReduce 作业吗?
最佳答案
如果 Combiner 可以适应这种情况,它会发挥重要作用,它就像一个本地 reducer,因此它不会发送所有数据,而是只发送少量值或本地聚合值,但不能在所有情况下应用组合器。
如果 reduce 函数既是交换函数又是结合函数,那么它可以用作 Combiner。
就像 Median 的情况一样,它不会起作用。
Combiner 并非适用于所有情况。
还有其他可以调整的参数,例如:
当 map 发出输出时,它不会直接进入磁盘,而是进入 100 MB 的循环缓冲区,当填充到 80% 时,它会将记录溢出到磁盘中。
因此您可以增加缓冲区大小并增加阈值保持值,在这种情况下溢出会更少。
如果溢出太多,那么溢出将合并为一个文件,我们可以使用溢出因子进行播放。
有很多线程将数据从本地磁盘复制到 reducer jvm,因此可以增加它们的数量。
压缩可用于中间层和最终层。
所以Combiner不是唯一的解决方案,不会在所有情况下都使用。
关于hadoop - MapReduce shuffle 阶段瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208974/
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
目录:一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive常用DML操作七、查询结果插入到表八、更新和删除操作九、查询结果写出到文件系统十、HiveCLI和Beeline命令行的基本使用十一、Hive配置一、简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数(UDF)和
在Xcode之外,我使用特定版本的Ruby,使用RVM管理多个Ruby安装。Apple的命令行开发工具将Ruby安装在/usr/bin/ruby并且版本为1.8.7。我通过RVM使用1.9.3。有没有办法强制Xcode在运行其运行脚本构建阶段时使用我的1.9.3安装?我已经尝试将Shell路径设置为我的特定Ruby的完整路径,但这似乎没有什么不同,我的意思是我在1.9.3中安装的特定Gems不可用/在Xcode中运行时对脚本可见。如果我在命令行上通过xcodebuild运行我的项目,运行脚本阶段会使用我的特定Ruby,因为它是从我的shell环境中运行的(即使项目文件中的Shell路径
云计算实验中要求我们在Linux系统安装Hadoop,故来做一个简单的记录。· 注:我的操作系统环境是Ubuntu-20.04.3,安装的JDK版本为jdk1.8.0_301,安装的Hadoop版本为hadoop2.7.1。(不确定其他版本是否会出现版本兼容问题)Hadoop安装步骤如下: 一、更新apt和安装vim编辑器 二、配置本机无密码登录SSH 三、安装JAVA环境 四、下载安装Hadoop 五、伪分布式搭建一、更新apt和安装vim编辑器1、更新aptsudoapt-getupdate2、安装vim
我有两个LWRP。第一个涉及创建磁盘卷、对其进行格式化并将其安装到虚拟机上,我们将此资源称为cloud_volume。第二个资源(它的作用并不重要)需要新格式化卷的UUID,这是必需的属性,我们将此资源称为foobar。资源cloud_volume和foobar被用在类似下面的配方中。volumes.eachdo|mount_point,volume|cloud_volume"#{mount_point}"dosizevolume['size']labelvolume['label']action[:create,:initialize]endfoobar"#{mount_point}
一、设置免密登录1、系统偏好设置-----共享----勾选远程登录,所有用户2、打开终端,输入命令ssh-keygen-trsa,一直回车即可2.查看生成的公钥和私钥 cd~/.ssh ls会看到~/.ssh目录下有两个文件:①私钥:id_rsa②公钥:id_rsa.pub3.将公钥内容写入到~/.ssh/authorized_keys中 cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys4.测试在terminal终端输入 sshlocalhost如果出现以下询问输入yes,不需要输入密码就能登录,说明配置成功Areyousureyouw
有没有办法在Capistrano3中设置默认阶段?我试过将set:stage,:production放在deploy.rb中,但这没有用,它给出了错误:Stagenotset,pleasecallsomethingsuchas`capproductiondeploy`,whereproductionisastageyouhavedefined我现在只有一个阶段,所以我希望能够只运行capdeploy并让它在默认情况下执行。 最佳答案 Capistranov3在某种程度上是Rake的包装器,因此您需要意识到真正发生的是producti
我有一个webworker,它不断计算大量数据,当完成一轮时,它是一个js对象,然后我将其解析为ArrayBuffer,然后将其发送到主线程。不能做太多的计算,ArrayBuffer的传输很快。但是这个对象的解析却减慢了这个过程。由于对象本身包含更多对象的数组。在Firefox中我收到以下警告:Ascriptonthispagemaybebusy,oritmayhavestoppedresponding.Youcanstopthescriptnow,openthescriptinthedebugger,orletthescriptcontinue.Script:http://local