2014-08-18 6 views
0

Я пытаюсь оценить Hadoop2 MapReduce framework. Это не TeraSort. Но testmapredsort.Ошибка во время бенчмаркинга Сортировка в Hadoop2 - Разделы не совпадают

шаг 1 Создание случайных данных:

hadoop jar hadoop/ randomwriter -Dtest.randomwrite.bytes_per_map=100 -Dtest.randomwriter.maps_per_host=10 /data/unsorted-data 

шаг 2 рода случайные данные, созданные в шаге-1:

hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar sort /data/unsorted-data /data/sorted-data 

степ-3 проверки, если сортировка по MR работ:

hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.2.0-tests.jar testmapredsort -sortInput /data/unsorted-data -sortOutput /data/sorted-data 

На шаге 3 появляется следующая ошибка. Я хочу знать, как исправить эту ошибку.

java.lang.Exception: java.io.IOException: Partitions do not match for record# 0 ! - '0' v/s '5' 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403) 
Caused by: java.io.IOException: Partitions do not match for record# 0 ! - '0' v/s '5' 
    at org.apache.hadoop.mapred.SortValidator$RecordStatsChecker$Map.map(SortValidator.java:266) 
    at org.apache.hadoop.mapred.SortValidator$RecordStatsChecker$Map.map(SortValidator.java:191) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:429) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:235) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:695) 
14/08/18 11:07:39 INFO mapreduce.Job: Job job_local2061890210_0001 failed with state FAILED due to: NA 
14/08/18 11:07:39 INFO mapreduce.Job: Counters: 23 
    File System Counters 
     FILE: Number of bytes read=1436271 
     FILE: Number of bytes written=1645526 
     FILE: Number of read operations=0 
     FILE: Number of large read operations=0 
     FILE: Number of write operations=0 
     HDFS: Number of bytes read=1077294840 
     HDFS: Number of bytes written=0 
     HDFS: Number of read operations=13 
     HDFS: Number of large read operations=0 
     HDFS: Number of write operations=1 
    Map-Reduce Framework 
     Map input records=102247 
     Map output records=102247 
     Map output bytes=1328251 
     Map output materialized bytes=26 
     Input split bytes=102 
     Combine input records=102247 
     Combine output records=1 
     Spilled Records=1 
     Failed Shuffles=0 
     Merged Map outputs=0 
     GC time elapsed (ms)=22 
     Total committed heap usage (bytes)=198766592 
    File Input Format Counters 
     Bytes Read=1077294840 
java.io.IOException: Job failed! 
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:836) 
    at org.apache.hadoop.mapred.SortValidator$RecordStatsChecker.checkRecords(SortValidator.java:367) 
    at org.apache.hadoop.mapred.SortValidator.run(SortValidator.java:579) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.mapred.SortValidator.main(SortValidator.java:594) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:72) 
    at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144) 
    at org.apache.hadoop.test.MapredTestDriver.run(MapredTestDriver.java:115) 
    at org.apache.hadoop.test.MapredTestDriver.main(MapredTestDriver.java:123) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 

EDIT:

hadoop fs -ls /data/unsorted-data 
-rw-r--r-- 3 david supergroup   0 2014-08-14 12:45 /data/unsorted-data/_SUCCESS 
-rw-r--r-- 3 david supergroup 1077294840 2014-08-14 12:45 /data/unsorted-data/part-m-00000 

hadoop fs -ls /data/sorted-data 
-rw-r--r-- 3 david supergroup   0 2014-08-14 12:55 /data/sorted-data/_SUCCESS 
-rw-r--r-- 3 david supergroup 137763270 2014-08-14 12:55 /data/sorted-data/part-m-00000 
-rw-r--r-- 3 david supergroup 134220478 2014-08-14 12:55 /data/sorted-data/part-m-00001 
-rw-r--r-- 3 david supergroup 134219656 2014-08-14 12:55 /data/sorted-data/part-m-00002 
-rw-r--r-- 3 david supergroup 134218029 2014-08-14 12:55 /data/sorted-data/part-m-00003 
-rw-r--r-- 3 david supergroup 134219244 2014-08-14 12:55 /data/sorted-data/part-m-00004 
-rw-r--r-- 3 david supergroup 134220252 2014-08-14 12:55 /data/sorted-data/part-m-00005 
-rw-r--r-- 3 david supergroup 134224231 2014-08-14 12:55 /data/sorted-data/part-m-00006 
-rw-r--r-- 3 david supergroup 134210232 2014-08-14 12:55 /data/sorted-data/part-m-00007 
+0

Вы проверили ли сортировка на стадии-2, по крайней мере получает достаточный выход? Каков вывод 'hdfs dfs -ls/data/unsorted-data' и' hdfs dfs -ls/data/sorted-data'? –

+0

@DennisHuo: см. Мое редактирование выше: оба получены разумными выводами – eagertoLearn

+0

У вас есть фактическая команда, которую вы использовали для начального задания randomwriter, а также для начала вывода консоли? Немного странно иметь один вывод 1GB от «randomwriter», хотя частично это происходит потому, что в то время как Hadoop 1 использует 'test.randomwrite.bytes_per_map' и' test.randomwriter.maps_per_host', Hadoop 2 использует ключи 'mapreduce.randomwriter. bytespermap' и 'mapreduce.randomwriter.mapsperhost', как показано в [RandomWriter.java] (http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-mapreduce-client- jobclient/2.2.0/орг/Apache/Hadoop/MapReduce/RandomWriter.java). –

ответ

1

Помимо изменения ключей от test.randomwrite.bytes_per_map и test.randomwriter.maps_per_host к mapreduce.randomwriter.bytespermap и mapreduce.randomwriter.mapsperhost вызывает настройки не достучаться до randomwriter, ядро ​​проблемы, как указано имена файлов, которые вы указали в разделе /data/sorted-data, состоят в том, что ваши отсортированные данные состоят из map выходов, тогда как правильно отсортированный вывод поступает только от уменьшить выходы; по существу, ваша команда sort выполняет только часть карты сортировки и никогда не выполняет слияние на последующем этапе снижения. Из-за этого ваша команда testmapredsort правильно сообщает, что сортировка не работает.

Проверка кода Sort.java вы можете видеть, что на самом деле нет защиты от num_reduces, так или иначе получающего заданное значение 0; типичное поведение Hadoop MR заключается в том, что установка количества сокращений до 0 указывает на задание «только для карты», где выходы карты поступают непосредственно в HDFS, а не промежуточные выходы, передаваемые для сокращения задач. Вот соответствующие строки:

85  int num_reduces = (int) (cluster.getMaxReduceTasks() * 0.9); 
86  String sort_reduces = conf.get(REDUCES_PER_HOST); 
87  if (sort_reduces != null) { 
88  num_reduces = cluster.getTaskTrackers() * 
89      Integer.parseInt(sort_reduces); 
90  } 

Теперь, в обычной конфигурации, все этой логики, используя настройки «по умолчанию» должен обеспечить ненулевое число от уменьшает, таким образом, что-то работает. Я был в состоянии Репрографического вашей проблемы, запустив:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar sort -r 0 /data/unsorted-data /data/sorted-data 

используя -r 0, чтобы заставить 0 уменьшается. В вашем случае, скорее всего, cluster.getMaxReduceTasks() возвращает 1 (или, возможно, даже 0, если ваш кластер сломан). Я не знаю, с какими способами этот метод мог вернуться 1; кажется, что просто установка mapreduce.tasktracker.reduce.tasks.maximum на 1 не применяется к этому методу. Другие факторы, которые входят в емкость задачи, включают количество ядер и объем доступной памяти.

Предполагая, что кластер, по крайней мере способен уменьшить 1 задачу на TaskTracker, вы можете повторить ваш шаг сортировки с помощью -r 1:

hadoop fs -rmr /data/sorted-data 
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar sort -r 1 /data/unsorted-data /data/sorted-data