Что не так с этой 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);
}
}
}
Ошибка:
c: \ hadoop-training \ tutorial02-jobtracker> Jadoop Jar PageStat.jar PageStat jobtra cker/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]. 13/07/29 11:24:51 INFO util.NativeCodeLoader: загружена библиотека native-hadoop 13/07/29 11:24:51 WARN snappy.LoadSnappy: собственная библиотека Snappy не загружена 13/07/29 11:24:54 INFO mapred.JobClient: Выполнение задания: job_201307261340_0001 13/07/29 11:24:55 INFO mapred.JobClient: map 0% уменьшить 0% 13/07/29 11:25:24 INFO mapred.JobClient: карта 1% уменьшить 0% 13/07/29 11:25:27 ИНФО mapred.JobClient: карта 6% уменьшить 0% 13/07/29 11:25:30 ИНФО mapred.JobClient: карта 14% уменьшить 0% 13/07/29 11:25:35 INFO mapred.JobClient: карта на 22% уменьшить 0% 13/07/29 11:25:38 INFO mapred.JobClient: карта на 31% уменьшить 0% 13/07/29 11:25:41 INFO mapred.JobClient: карта 35% уменьшить 0% 13/07/29 11:25:44 ИНФОРМАЦИЯ mapred.JobClient: карта 44% уменьшить 0% 13/07/29 11:25:47 ИНФО mapred.JobClient: карта 50% уменьшить 0% 13/07/29 11:26:03 INFO mapred.JobClient: карта на 60% уменьшить на 0% 13/07/29 11:26:06 INFO mapred.JobClient: карта на 64% уменьшить на 0% 13/07/29 11:26:09 INFO mapred.JobClient: карта на 69% уменьшена на 0% 13/07/29 11:26:12 INFO mapred.JobClient: карта на 76% уменьшена на 0% 13/07/29 11:26:15 ИНФОРМАЦИЯ mapred.JobClient: карта 81% уменьшить 0% 13/07/29 11:26:18 ИНФОРМАЦИЯ mapred.JobClient: карта 85% уменьшить 0% 13/07/29 11:26:21 ИНФОРМАЦИЯ mapred.JobClient: карта 87% уменьшить 0% 13/07/29 11:26:24 ИНФОРМАЦИЯ mapred.JobClient: карта 92% уменьшить 0% 13/07/29 11:26:27 ИНФОРМАЦИЯ mapred.JobClient: карта 94% уменьшить 0% 13/07/29 11:26:30 INFO mapred.JobClient: карта 96% уменьшить 0% 13/07/29 11:26:33 INFO mapred.JobClient: карта 97% уменьшить 0% 13/07/29 11:26:37 ИНФОРМАЦИЯ mapred.JobClient: карта на 99% уменьшает 8% 13/07/29 11:26:40 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшает на 8% 13/07/29 11:26:46 ИНФОРМАЦИЯ mapred.JobClient: карта на 100% уменьшена на 25% 13/07/29 11:26:54 ИНФОРМАЦИЯ mapred.JobClient: Идентификатор задачи: try_201307261340_0001_r_0 00000_0, Статус: СБОЙ java.lang.NullPointerException в PageStat$PageStatReducer.reduce(PageStat.java:120 at) $PageStatReducer.reduce(PageStat.java:96) в org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:177) в org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:65) 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(UserGroupInforma tion.java:1135) в org.apache.hadoop.mapred.Child.main (Child.java:265)
13/07/29 11:26:56 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 0% 13/07/29 11:27:05 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 8% 13/07/29 11:27: 08 INFO mapred.JobClient: карта на 100% уменьшена на 33% 13/07/29 11:27:10 INFO mapred.JobClient: Идентификатор задачи: try_201307261340_0001_r_0 00000_1, Статус: СБОЙ java.lang.NullPointerException на PageStat $ PageStatReduatcecece 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(UserGroupInforma tion.java:1135) на org.apache.hadoop.mapred.Child.main (Child.java:265)
13/07/29 11:27:11 INFO mapred.JobClient: карта на 100% уменьшить 0% 13/07/29 11:27:20 INFO mapred.JobClient: карта на 100% уменьшить 8% 13/07/29 11:27: 23 INFO mapred.JobClient: карта на 100% сокращена на 25% 13/07/29 11:27:25 INFO mapred.JobClient: Идентификатор задачи: try_201307261340_0001_r_0 00000_2, Статус: СБОЙ java.lang.NullPointerException на PageStat $ PageStatReduatcecece 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(UserGroupInforma tion.java:1135) на org.apache.hadoop.mapred.Child.main (Child.java:265)
13/07/29 11:27:26 ИНФОРМАЦИЯ mapred.JobClient: карта на 100% уменьшить 0% 13/07/29 11:27:38 ИНФОРМАЦИЯ mapred.JobClient: карта на 100% уменьшить 25% 13/07/29 11:27: 41 INFO mapred.JobClient: карта на 100% уменьшена на 0% 13/07/29 11:27:43 INFO mapred.JobClient: задание выполнено: job_201307261340_0001 13/07/29 11:27:43 INFO mapred.JobClient: Счетчики: 24 13/07/29 11:27:43 INFO mapred.JobClient: Счетчики заданий 13/07/29 11:27:43 INFO mapred.JobClient: Запущено сокращение задач =4 13/07/29 11:27:43 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=179086 13/07/29 11:27:43 INFO mapred.JobClient: общее время, затрачиваемое всеми, сокращает время ожидания после резервирования слотов (мс)=0 13/07/29 11:27:43 INFO mapred.JobClient:
Общее время, потраченное всеми картами на ожидание после резервирования слотов (мс)=0 13/07/29 11:27:43 INFO mapred.JobClient: Запущенные задачи карты =4 13/07/29 11:27:43 INFO mapred.JobClient: Data-local map tasks=4 13/07/29 11:27:43 INFO mapred.JobClient: Не удалось уменьшить задачи = 1 13/07/29 11:27:43 INFO mapred.JobClient:
SLOTS_MILLIS_REDUCES = 106513 13/07/29 11:27:43 INFO mapred.JobClient:
FileSystemCounters 13/07/29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_READ = 179504086 13/07/29 11:27:43 INFO mapred.JobClient:
HDFS_BYTES_READ = 254931072 13/07/29 11:27:43 INFO mapred.JobClient:
FILE_BYTES_WRITTEN = 359099432 13/07/29 11:27:43 INFO mapred.JobClient: счетчики формата входного файла 13/07/29 11:27:43 INFO mapred.JobClient:
Чтение байтов = 254930544 13/07/29 11:27:43 INFO mapred.JobClient:
Map-Reduce Framework 13/07/29 11:27:43 INFO mapred.JobClient: материализованные выходные данные карты =17949 9502 13/07/29 11:27:43 INFO mapred.JobClient: объединение выходных записей = 0 13/07 / 29 11:27:43 INFO mapred.JobClient: входные записи карты =5000000 13/07/29 11:27:43 INFO mapred.JobClient: снимок физической памяти (байты)=85 1607552 13/07/29 11:27:43 INFO mapred.JobClient: разлитые записи = 10000000 13/07/29 11:27:43 INFO mapred.JobClient: выходные байты карты = 169499478 13/07/29 11:27:43 INFO mapred.JobClient: затраченное время процессора (мс)=81308 13/07/29 11:27:43 INFO mapred.JobClient: общее использование выделенной кучи (в байтах) = 746323968 13/07/29 11:27:43 INFO mapred.JobClient: снимок виртуальной памяти (в байтах) =988 401664 13/07/29 11:27:43 INFO mapred.JobClient: объединить входные записи = 0 13/07/29 11:27:43 INFO mapred.JobClient: отобразить выходные записи = 5000000 13/07/29 11:27:43 ИНФОРМАЦИЯ mapred.JobClient:
SPLIT_RAW_BYTES = 528
Спасибо!!!
2 ответа
У меня была похожая проблема, вам нужно использовать флаг -D для выполнения:
-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.
Это не полный ответ, я все еще разбираюсь в этом сам.
Номера строк в трассировке стека, похоже, не совпадают с опубликованным исходным кодом. Изменился ли код с этого запуска?
Возможно исключение NullPointerException в строке if (statType...). Я не вижу в настройках ничего, что указывало бы "page.stat", ни жестко запрограммированное в методе run, ни передаваемое в качестве аргумента при отправке задания. Это приведет к тому, что член statType будет инициализирован нулем.