Что не так с этой Java для HDInsight Hadoop?

Я пытаюсь выяснить, почему приведенная ниже Java не работает, когда я пытаюсь запустить ее на Hadoop.

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;

public class PageStat implements Tool {
private Configuration conf;

@Override
public int run(String[] args) throws Exception {
    Job job = new Job(getConf());
    String jobName = "Page visit statistics MR";
    job.setJobName(jobName);

    job.setJarByClass(PageStat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.setMapperClass(PageStat.PageStatMapper.class);
    job.setReducerClass(PageStat.PageStatReducer.class);

    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    job.setNumReduceTasks(job.getConfiguration().getInt("num.reducer", 1));

    int status =  job.waitForCompletion(true) ? 0 : 1;
    return status;
}

public static void main(String[] args) throws Exception {
    int exitCode = ToolRunner.run(new PageStat(), args);
    System.exit(exitCode);
}

public void setConf(Configuration conf) {
   this.conf = conf;
}

public Configuration getConf() {
    return conf;
}

public static class PageStatMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private Text keyHolder = new Text();
    private IntWritable valueHolder = new IntWritable();

    @Override
    protected void map(LongWritable key, Text value, Context context)
        throws IOException, InterruptedException {
        String[] items  =  value.toString().split(",");
        if (items.length == 3) {
            String url = items[1];
            keyHolder.set(url);
            Integer duration = Integer.parseInt(items[2]);
            valueHolder.set(duration);
            context.write(keyHolder, valueHolder);
        } else {
            context.getCounter("Error", "invalidData").increment(1);
        }
    }        
}   

public static class PageStatReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private Text keyHolder = new Text();
    private IntWritable valueHolder = new IntWritable();
    private String statType;
    private int count;
    private int totalTime;
    private int avTime;

    protected void setup(Context context) throws IOException, InterruptedException {
        Configuration conf = context.getConfiguration();
        statType = conf.get("page.stat");
    }

    protected void reduce(Text key, Iterable<IntWritable> values, Context context)
    throws IOException, InterruptedException {
        count = 0;
        totalTime = 0;
        for (IntWritable value : values){
            ++count;
            totalTime += value.get();
        } 
        avTime = totalTime / count;

        keyHolder.set(key);
        if (statType.equals("average")){
            valueHolder.set(avTime);
        } else {
            valueHolder.set(totalTime);
        }
        context.write(keyHolder, valueHolder);
    }
}    

}

Ошибка:

07.13.29 11:26:56 ИНФО mapred.JobClient: карта 100% уменьшить 0% 07.13.29 11:27:05 ИНФО mapred.JobClient: карта 100% уменьшить 8% 07.13.29 11:27 :08 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 33% 13/07/29 11:27:10 ИНФОРМАЦИЯ mapred.JobClient: Идентификатор задачи: попытка_201307261340_0001_r_0 00000_1, Статус: FAILED java.lang.NullPointerException at PageStat$PageStatReducer.reduce(PageStat .java:120) в PageStat$PageStatReducer.reduce(PageStat.java:96) в org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177) в org.apache.hadoop.mapred.ReduceTask.runNewReducer( ReduceTask.java:651 ) в org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418) в org.apache.hadoop.mapred.Child$4.run(Child.java:271) в java.security. AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java:396) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1135) в org.apache.hadoop.mapred.Child.main(Child.java:265)

07.13.29 11:27:11 ИНФО mapred.JobClient: карта 100% уменьшить 0% 07.13.29 11:27:20 ИНФО mapred.JobClient: карта 100% уменьшить 8% 07.13.29 11:27 :23 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 25% 07.13.29 11:27:25 ИНФОРМАЦИЯ mapred.JobClient: Идентификатор задачи: try_201307261340_0001_r_0 00000_2, Статус: FAILED java.lang.NullPointerException at PageStat$PageStatReducer.reduce(PageStat .java:120) в PageStat$PageStatReducer.reduce(PageStat.java:96) в org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177) в org.apache.hadoop.mapred.ReduceTask.runNewReducer( ReduceTask.java:651 ) в org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:418) в org.apache.hadoop.mapred.Child$4.run(Child.java:271) в java.security. AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java:396) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1135) в org.apache.hadoop.mapred.Child.main(Child.java:265)

07.13.29 11:27:26 ИНФО mapred.JobClient: карта 100% уменьшить 0% 07.13.29 11:27:38 ИНФО mapred.JobClient: карта 100% уменьшить 25% 07.13.29 11:27 :41 INFO mapred.JobClient: карта 100% уменьшить 0% 07.13.29 11:27:43 INFO mapred.JobClient: Работа завершена: job_201307261340_0001 07.13.29 11:27:43 INFO mapred.JobClient: Счетчиков: 24 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: счетчики заданий 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: запущено сокращение задач=4 JobClient: SLOTS_MILLIS_MAPS=179086 07.13.29 11:27:43 INFO mapred.JobClient: Общее время, затраченное всеми сокращениями на ожидание после резервирования слотов (мс)=0 07.13.29 11:27:43 INFO mapred.JobClient :
Общее время ожидания всех карт после резервирования слотов (мс)=0 07.13.29 11:27:43 INFO mapred.JobClient: Запущено задач карты=4 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: Data-local map tasks=4 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: Не удалось уменьшить задачи=1 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred. JobClient:
SLOTS_MILLIS_REDUCES=106513 07.13.29 11:27:43 INFO mapred.JobClient:
FileSystemCounters 07.13.29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_READ=179504086 13/ 29.07 11:27:43 INFO mapred.JobClient:
HDFS_BYTES_READ=254931072 29.13.29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_WRITTEN=359099432 07.13.29 11:27:43 INFO mapred.JobClient: Счетчики форматов входных данных 13/07/29 11:27:43 INFO mapred.JobClient:
Bytes Read=254930544 13/07/29 11:27:43 INFO mapred.JobClient:
Map -Reduce Framework 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: сопоставление выходных материализованных байтов = 17949 9502 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: объединение выходных записей = 0 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: входные записи карты = 5000000 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: моментальный снимок физической памяти (байт) = 85 1607552 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: Spilled Records=10000000 13/07/29 11:27:43 INFO mapred.JobClient: вывод карты b ytes=169499478 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: затраченное время ЦП (мс)=81308 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: общее зафиксированное использование кучи (байт)= 746323968 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: моментальный снимок виртуальной памяти (байт)=988 401664 07.13.29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient: объединение входных записей=0 07.13.29 11 :27:43 ИНФОРМАЦИЯ mapred.JobClient: Выходные записи карты=5000000 13/07/29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient:
SPLIT_RAW_BYTES=528

Спасибо!!!

У меня была аналогичная проблема, вам нужно использовать флаг -D для выполнения:


person user2244947    schedule 30.07.2013    source источник


Ответы (2)


Скорее всего, вы увидите ошибку:

-Dpage.stat=total

Это не полный ответ, я все еще добираюсь до сути.

log4j:WARN No appenders could be found for logger (org.apache.hadoop.hdfs.DFSClient).
log4j:WARN Please initialize the log4j system properly.

Номера строк в трассировке стека, похоже, не совпадают с опубликованным исходным кодом. Изменился ли код после этого запуска?

person Rupert Bailey    schedule 01.11.2013

NullPointerException может возникать в строке if (statType...). Я не вижу ничего, устанавливающего «page.stat» в конфигурации, либо жестко закодированного в методе запуска, либо переданного в качестве аргумента при отправке задания. Это приведет к тому, что элемент statType будет инициализирован нулем.

c:\hadoop-training\tutorial02-jobtracker>hadoop jar PageStat.jar PageStat jobtracker/input/visit_5000000.txt jobtracker/output 13/07/29 11:24:50 INFO input.FileInputFormat: Всего входных путей для обработки: 1 log4j: ОШИБКА Не удалось переименовать [c:\Hadoop\hadoop-1.1.0-SNAPSHOT\logs/hadoop.log] в [c:\Hadoop\hadoop-1.1.0-SNAPSHOT\logs/hadoop.log.2013-07 -26]. 07.13.29 11:24:51 INFO util.NativeCodeLoader: загружена библиотека native-hadoop 07.13.29 11:24:51 WARN snappy.LoadSnappy: собственная библиотека Snappy не загружена 07.13.29 11:24: 54 ИНФОРМАЦИЯ mapred.JobClient: Выполняется задание: job_201307261340_0001 07.13.29 11:24:55 ИНФОРМАЦИЯ mapred.JobClient: карта 0% уменьшить 0% 13/07/29 11:25:24 ИНФОРМАЦИЯ mapred.JobClient: карта уменьшить 1% 0% 07.13.29 11:25:27 ИНФО mapred.JobClient: карта 6% уменьшить 0% 07.13.29 11:25:30 ИНФО mapred.JobClient: карта 14% уменьшить 0% 07.13.29 11 :25:35 ИНФОРМАЦИЯ mapred.JobClient: карта 22% уменьшить 0% 07.13.29 11:25:38 ИНФОРМАЦИЯ mapred.JobClient: карта 31% уменьшить 0% 07.13.29 11:25:41 ИНФОРМАЦИЯ mapred.JobClient : карта 35% уменьшить 0% 07.13.29 11:25:44 ИНФОРМАЦИЯ mapred.JobClient: карта 44% уменьшить 0% 07.13.29 11:25:47 ИНФО Mapred.JobClient: карта 50% уменьшить 0% 13 /07/29 11:26:03 ИНФО mapred.JobClient: карта 60% уменьшить 0% 07.13.29 11:26:06 ИНФО mapred.JobClient: карта 64% уменьшить 0% 07.13.29 11:26: 09 ИНФО mapred.JobClient: карта 69% уменьшить 0% 07.13.29 11:26:12 I NFO mapred.JobClient: карта 76% уменьшить 0% 07.13.29 11:26:15 ИНФО mapred.JobClient: карта 81% уменьшить 0% 07.13.29 11:26:18 ИНФО mapred.JobClient: карта 85% уменьшить 0% 07.13.29 11:26:21 ИНФО mapred.JobClient: карта 87% уменьшить 0% 07.13.29 11:26:24 ИНФО mapred.JobClient: карта 92% уменьшить 0% 07.13.29 11:26:27 ИНФО mapred.JobClient: карта 94% уменьшить 0% 07.13.29 11:26:30 ИНФО mapred.JobClient: карта 96% уменьшить 0% 07.13.29 11:26:33 ИНФО Mapred. JobClient: карта 97% уменьшить 0% 07.13.29 11:26:37 INFO mapred.JobClient: карта 99% уменьшить 8% 07.13.29 11:26:40 INFO mapred.JobClient: карта 100% уменьшить 8% 07.13.29 11:26:46 ИНФОРМАЦИЯ mapred.JobClient: карта на 100% уменьшить на 25% в PageStat$PageStatReducer.reduce(PageStat.java:120) в PageStat$PageStatReducer.reduce(PageStat.java:96) в org.apache.hadoop.mapreduce.Reducer.run(Reducer.j ava:177) по адресу org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:651) по адресу org.apache.hadoop.mapred. ReduceTask.run(ReduceTask.java:418) в org.apache.hadoop.mapred.Child$4.run(Child.java:271) в java.security.AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject .doAs(Subject.java:396) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1135) в org.apache.hadoop.mapred.Child.main(Child.java:265)

person Chris Nauroth    schedule 30.07.2013