Я запускаю программу подсчета слов.
hadoop jar hadoop-mapreduce-examples-2.4.0.jar wordcount /Small_shakespeare_punctuators_removed.raw /output.txt
После того, как карта закончена, часть shuffle не работает, и я получаю следующую ошибку:
ERROR:-
18/09/13 11:23:54 INFO mapreduce.Job: map 100% reduce 0%
18/09/13 11:23:58 INFO mapreduce.Job: Task Id : attempt_1536767235788_0003_r_000000_0, Status : FAILED
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#5
at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.checkReducerHealth(ShuffleSchedulerImpl.java:323)
at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.copyFailed(ShuffleSchedulerImpl.java:245)
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:347)
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:165)
После проверки сопоставленных журналов, я получаю это:
2018-09-13 11:25:25,975 INFO org.apache.hadoop.mapreduce.jobhistory.JobSummary: jobId=job_1536767235788_0003,submitTime=1536818023943,launchTime=1536818028069,firstMapTaskLaunchTime=1536818030260,firstReduceTaskLaunchTime=1536818035174,finishTime=1536818052423,resourcesPerMap=2048,resourcesPerReduce=4096,numMaps=1,numReduces=1,user=hadoop,queue=default,status=FAILED,mapSlotSeconds=10,reduceSlotSeconds=36,jobName=word count
2018-09-13 11:25:25,980 INFO org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager: Moving hdfs://mycluster:8020/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1536767235788_0003-1536818023943-hadoop-word+count-1536818052423-1-0-FAILED-default-1536818028069.jhist to hdfs://mycluster:8020/tmp/hadoop-yarn/staging/history/done/2018/09/13/000000/job_1536767235788_0003-1536818023943-hadoop-word+count-1536818052423-1-0-FAILED-default-1536818028069.jhist
Из этого журнала я могу сказать, что файл не может перемещаться из одной папки в другую внутри HDFS, но я все еще застрял.
Даже после настройки свойств:
- mapreduce.reduce.shuffle.input.buffer.percent = 0.7
- mapreduce.reduce.shuffle.parallelcopies = 4
Ошибка по-прежнему сохраняется.
РЕДАКТИРОВАТЬ: -
Мне удалось решить проблему. Это было связано со следующим свойством:
mapred.map.output.compression.codec -> org.apache.hadoop.io.compress.GzipCodec
Это свойство влияло на преобразование mapreduce shuffle, поскольку оно не могло перемещать файлы из папки done_intermediate в done.