Итак, у меня есть несколько сценариев Pig, которые продолжают умирать, уменьшая фазу работы с ошибками, которые куча Java продолжает выходить из космоса. К этой дате мое единственное решение заключалось в увеличении количества редукторов, но это, похоже, не делает меня надежным. Теперь частью этого может быть только огромный рост данных, которые мы получаем, но не может быть уверен.Куча редуктора с памятью
Я думал об изменении порогового значения разлива, не могу вспомнить настройку, но не уверен, что они помогут или просто замедляют ее. Что еще я могу посмотреть на решение этой проблемы?
На стороне примечания, когда это начинает происходить, я также получаю ошибки в том, что bash не может получить память, поскольку я предполагаю, что это операция разлива. Будет ли это у Hadoop-узла нехваткой памяти? Если бы это было просто уменьшение размера кучи на этих коробках, это решение?
Редактировать 1
1) Свиньи 0.8.1
2) Только UDF является Eval UDF, который смотрит на отдельных строк без каких-либо пакетов или карт.
3) Я не заметил, что есть горячие точки с плохим ключом. Я также использую шкалу простых чисел, чтобы уменьшить эту проблему.
Edit 2
Здесь ошибка в вопросе:
2012-01-04 09:58:11,179 FATAL org.apache.hadoop.mapred.TaskRunner: attempt_201112070707_75699_r_000054_1 : Map output copy failure : java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.shuffleInMemory(ReduceTask.java:1508) at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1408) at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1261) at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1195)
Здесь ошибка Баш я получаю:
java.io.IOException: Task: attempt_201112070707_75699_r_000054_0 - The reduce copier failed at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:380) at org.apache.hadoop.mapred.Child.main(Child.java:170) Caused by: java.io.IOException: Cannot run program "bash": java.io.IOException: error=12, Cannot allocate memory at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at org.apache.hadoop.util.Shell.runCommand(Shell.java:149) at org.apache.hadoop.util.Shell.run(Shell.java:134) at org.apache.hadoop.fs.DF.getAvailable(DF.java:73) at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:329) at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:124) at org.apache.hadoop.mapred.MapOutputFile.getInputFileForWrite(MapOutputFile.java:160) at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2537) at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.run(ReduceTask.java:2501)
Итак, после дальнейших исследований я нашел частичную работу, которая, похоже, помогает, а также несколько отчетов об ошибках, в которых некоторые вариации этой проблемы были решены в Hadoop 0.20.2. Работа вокруг заключается в том, чтобы добавить следующую строку в скрипт свиньи или добавить ее в файл pig.properties. Если значение по умолчанию составляет 0,70 или 70%. "set mapred.job.shuffle.input.buffer.percent 0.50;" – NerdyNick