使用hadoop over amazon emr处理>;10TB的输入?

使用hadoop over amazon emr处理>;10TB的输入?,hadoop,amazon-web-services,mapreduce,emr,Hadoop,Amazon Web Services,Mapreduce,Emr,大型mapreduce作业(连接14 输入目录(总计约14 TB的输入)失败。不 只是我们不能执行我们的任务。我们刚做的时候,map是cat/reduce是 猫,我们甚至不能完成。它似乎在复制数据方面停滞不前 数据 我们猜测hadoop的emr容量已经饱和 由美国焊接学会提供。不确定是网络饱和,还是磁盘饱和 空间,还是什么。我们会遇到这样的错误 “减少>复制(0.10 MB/s时438094中的436333)” 在hadoop控制面板上。它只是挂在那里,永远不会完成任务 复制另一种理论是hado

大型mapreduce作业(连接14 输入目录(总计约14 TB的输入)失败。不 只是我们不能执行我们的任务。我们刚做的时候,map是cat/reduce是 猫,我们甚至不能完成。它似乎在复制数据方面停滞不前 数据

我们猜测hadoop的emr容量已经饱和 由美国焊接学会提供。不确定是网络饱和,还是磁盘饱和 空间,还是什么。我们会遇到这样的错误

“减少>复制(0.10 MB/s时438094中的436333)”

在hadoop控制面板上。它只是挂在那里,永远不会完成任务 复制另一种理论是hadoop的离线排序发生在 复制的同时,不知何故,这是一个瓶颈。我们已经试过了 不同大小的更多还原子、更多节点的各种排列 工人盒子,但不知怎么的,我们还没有找到一个组合 成功了

由于我们迫切需要完成这项工作,我们正在采取变通办法 也就是将数据划分为更小的作业。也就是说,14个 输入年份将被拆分,然后我们将加入分区

是否有人有使用aws托管的hadoop处理这种大小或更大的作业的经验,如果有,您能否就如何使cat map/cat reduce成功提供建议?比如节点数量、节点大小和配置选项


否则,我想我们只是达到了emr的限制。

我看不到集群中有多少缩减器和插槽/主机的总数,但看起来像是您缩减了DoS映射器主机。 为了解决这个问题,您可以做几件事:

  • 增加块大小。这使得使用更少的地图,每个地图绘制者将做更多的工作。这里是较少的部分,由减速器下载
  • 如果集群相对较大(100+),请检查http处理程序的数量(mapreduce.tasktracker.http.threads)
  • 减速器的数量应在集群容量(减速器槽)的0.7-1.2之间
    希望这能有所帮助。

    克里斯·史密斯回答了这个问题,并说我可以把它发到SO。他的回答是:

    因此,输入数据的大小本身并不是EMR的限制。还有很多其他因素

    也就是说,吸收10TB的数据是一项令人头疼的任务。仅仅读取这么多的数据是相当残酷的,然后你就有了排序

    第一个问题是:制约因素是什么?您是否看到网络带宽已达到最大值?你是不是看到CPU已经用完了?磁盘I/O或iops?这些在数据节点上看起来如何?那么JobTracker和NameNodes呢(在剩下的时间里最大化这些节点是很正常的) 好吗?如果以上都没有,那么可能有一个Hadoop资源已经耗尽,需要进行不同的配置

    因为你没有提到争论的任何特定方面,超出了它所处的阶段,这让我怀疑你没有太多关于下面发生的事情的度量。通常,在调整好一项大工作之前,您需要多次“测量,然后调整”

    作为一般的经验法则,长时间处于“减少/复制”阶段是“你做错了”的有力指标。通常情况下,问题在于排序/溢出/合并过程中,节点以某种方式将磁盘IO最大化。Hadoop有许多调优参数,对于具有大量映射器和还原器的作业来说,这些参数开始变得古怪,特别是当两者之间存在严重不平衡时。同样,Karmasphere和类似的工具可以在这里帮助您很多。需要调整的典型事项(我可能有一些名称错误):

    日志记录。特别是,在作业之前调整dfs.namenode.logging.level之类的内容非常重要。完全有可能用冗长的日志记录自杀。虽然自相矛盾,但它也可以拯救你,所以

    映射输出大小通常是“减少/复制”问题的关键因素。如果可能的话,考虑减少地图输出大小的方法。它确实应该比映射输入大小小得多。去掉reduce阶段不需要的所有数据。考虑使用一个紧凑的二进制序列化格式(java序列化会杀死您的性能),比如协议缓冲区或节俭(整数数据的大赢)。考虑你的字符串可以用ID/EnnS表示的程度。您能否使用组合器来减少必须通过导线发送的数据量?如果你有CPU空闲,使用压缩(从LZO或Snppy开始,但是如果你还有更多CPU要烧掉,考虑GZIP或者更强大的东西)。如果在地图任务日志中仍然看到合并步骤花费了很长时间,则需要进行一些调整:

    io.sort.factor:可能应该更高。根据您所做的工作,您甚至可能会因为有太多的映射程序而感到痛苦。io.sort.mb:与io.sort.factor密切相关,但不同。如果您开始在节点上看到大量磁盘i/o压力,我会加快速度。这会占用内存,因此在这个参数中有一个真正的权衡

    mapred.job.reuse.jvm.num.tasks:仅当您的任务变得非常小时,但如果任务变小,则值得提高mapred.reduce.parallel.copies:如果您不受CPU限制,则很可能希望提高此数量。你可能最终需要调整其他数字来平衡

    io.sort.record.percent:由于作业大小的原因,这是最不可能完全偏离标准的。通常,如果这是错误的,那是因为你有非常大或非常小的记录。您希望达到的黄金比例是“16/(16+每条记录的字节数)”

    很难强调早期溢出对节点性能的影响。如果泄漏,则意味着数据将被写入,然后再次读取,然后再次写入。在每个节点上。所以,如果你弄错了,增加更多的节点并没有帮助(实际上可以做到) 更糟)。你想看看有多少