对于一个大型mapreduce作业,如果有一些延迟的reducer,可以安全地缩小此作业的规模吗



Chris Smith回答了这个问题,并说我可以发布它。

如果你有一个200节点的mapreduce作业,只有3个正在运行reduce的作业如果延迟,关闭除主节点之外的所有节点是否安全还有3个正在运行的作业?再加上一些,以防坏节点需要更换?

如果这个问题的答案是"是",那么很奇怪emr没有当大多数节点不在使用

最近有几份工作基本上完成了,但也有一些减少延迟。我认为这让我们付出了代价,因为没有使用节点保持运行。

我能想到的问题有:

--数据何时被复制到S3?如果某个节点未在术语中使用如果运行reduce,是否仍然需要它来复制到S3?因为case,我的问题的答案是你根本不安全脱离节点--如果三个作业中有一个失败,会发生什么?主管/工作协调员应将其重新分配给另一个节点。我想只要可能你就安全跟踪哪些框已打开,不要错误地分配给已关闭。

如果您有一个200节点的mapreduce作业,只有3个正在运行的reduce工作如果延迟,关闭除主节点之外的所有节点是否安全还有3个正在运行的作业?再加上一些,以防坏节点需要更换?

如果这个问题的答案是"是",那么很奇怪emr没有当大多数节点不在使用

请记住,EMR是Hadoop之上的一个非常薄的层。如果你在亚马逊的结构上进行分布式计算,你可以更高效地为其特定需求定制一些东西,而这些东西根本不像Hadoop或Map/Reduce。如果你在Hadoop上做了很多繁重的工作,那么你通常最好使用自己的集群,或者至少在云中使用一个专用集群(这样数据就已经在本地磁盘上被分割,输出只需要持久化到本地磁盘)。EMR的主要优点是它快速而肮脏,并且可以很好地连接到AWS的其他部分(如S3)。

最近有几项工作基本上完成了,但也有一些减少延迟。我认为这让我们付出了代价,因为没有使用节点保持运行。

它肯定会让你付出代价,尤其是在运行时间方面。我首先会关心为什么完成时间如此不均匀。

我能想到以下问题:

--数据何时被复制到S3?如果某个节点未在术语中使用如果运行reduce,是否仍然需要它来复制到S3?因为case,我的问题的答案是你根本不安全节点外

如果您引用的是作业的输出,如果您将S3作为作业配置的输出路径,那么在任务退出之前,来自给定任务的数据将被写入S3。

如果三个作业中的一个失败,会发生什么?主管/工作协调员应将其重新分配给另一个节点。我想只要可能你就安全跟踪哪些框已打开,不要错误地分配给已关闭。

嗯。。。比这复杂一点。。。当新节点被分配作业时,它必须从某个地方提取数据。这通常来自最初生成数据的映射器。如果它们不再存在,则可能需要重新运行映射任务(或者更有可能:作业将失败)。通常情况下,映射输出上的复制因子为1,因此这是一个完全合理的场景。这是Hadoop作业可以"%完成"倒退的几个原因之一。。。映射器甚至可以从100%返回<100%。

与此相关:可以想象,根据这些reducer作业所处的阶段,它们还没有接收到所有输入到它们的映射输出。显然,在这种情况下,杀死错误的映射器是致命的。

我认为重要的是要强调仅使TaskTracker节点离线与运行TaskTracker+DataNode服务的节点之间的区别。如果你去掉了几个以上的后者,你就会在HDFS中丢失块,这通常对你的工作来说不是一件好事(除非你真的不把HDFS用于分发你的工作之外的任何事情)。您可以一次去掉几个节点,然后运行一个再平衡程序来"鼓励"HDFS将所有块的复制因子恢复到3。当然,这会触发网络流量和磁盘I/O,这可能会降低剩余任务的速度。

tl;dr:杀死节点可能会出现问题。虽然您可以确信,在JobTracker收到任务已完成的通知时,已完成的任务(将其输出写入S3)已完全写入其所有输出,但映射任务则不然,映射任务会写入本地目录并异步将数据传输到减速器。即使所有映射输出都已传输到它们的目标reducer,如果您的reducer失败(或者推测性执行触发了另一个节点上任务的旋转),您也会向发送邮件,因为Hadoop可能会向它们寻求重新分配的reducers的输入数据。

--Chris

附言:对于非EMR Hadoop设置来说,这实际上也是一个很大的痛点(它不是为比你需要的节点更长的时间付费,而是表现为当你有工作时节点闲置,以及由于节点故障而造成的巨大计算时间损失)。一般来说,避免这个问题的技巧是:保持任务大小在1-5分钟的范围内非常一致,启用推测性执行(在节点性能不一致的EMR世界中非常关键),使复制因子远高于给定作业的预期节点损失(根据节点可靠性,一旦您在一天的作业运行中跨越400多个节点,您就开始考虑复制因子4),并使用一个作业调度程序,允许在旧作业仍在完成的情况下启动新作业(现在这通常是默认的,但这是一个全新的引入~Hadoop0.20IIRC)。我甚至听说过一些疯狂的事情,比如使用SSD来映射目录(虽然它们在所有写入过程中都会很快磨损,但对于Hadoop作业来说,它们的失败场景往往不会那么灾难性)。

最新更新