我想知道如何最好地确定映射和减少任务的适当数量JVM堆的相应最大大小?对于Hadoop的新手,这些属性设置在mapred-site.xml文件。根据(虚拟(内核和RAM的数量,我可以遵循一个通用公式吗?
在您的响应中,考虑在作业之前/期间创建的各种其他Hadoop进程处理及其对RAM使用的影响(请参见:https://forums.aws.amazon.com/thread.jspa?threadID=49024)
从单机组切换到双机组时,如何应对变化?
时间已经过去,没有人试图制定答案。所以我会提出一些想法,希望其他人能指出存在的缺陷。
配置Hadoop最重要的一点是不允许消耗太多的资源;作业会失败,异常情况并不总是有助于快速确定出了什么问题。特别是内存资源会导致立即崩溃,正如问题所指出的,JVM可能会尝试请求不必要的内存量。
我们必须考虑除map和reduce之外的其他过程(比如在map和reduct之间发生的排序(。不幸的是,没有人提出同时可能存在多少流程的建议。
这是我的建议。如果映射器的数量是M,减少器的数量为R,并且盒子上的总虚拟RAM是G.我目前正在为每个进程分配G/(2*M+R(数量的RAM。因子2假设有一个额外的进程对每个映射进程的输出进行排序或执行其他支持工作。最后,我保证2*M+R<P、 其中P是盒子上防止过多上下文切换的处理器数量(考虑在计算P中可用的超线程(。
到目前为止,我还没有用这种方法取下我的盒子。