Подчищен код для вас :)
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(LogAnalyzer.class);
conf.setJobName("Loganalyzer");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(LogAnalyzer.Map.class);
conf.setCombinerClass(LogAnalyzer.Reduce.class);
conf.setReducerClass(LogAnalyzer.Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
conf.set("mapreduce.textoutputformat.separator", "--");
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
String line = ((Text) value).toString();
Matcher matcher = p.matcher(line);
if (matcher.matches()) {
String timestamp = matcher.group(4);
minute.set(getMinuteBucket(timestamp));
output.collect(minute, ONE); //context.write(minute, one);
}
}
Это не Hadoop-потоковый, это просто нормальная работа Java. Вы должны изменить тег на вопрос.
Это выглядит хорошо для меня, хотя у вас нет картографа внутри класса, который, как я полагаю, является ошибкой копирования/вставки.
Что касается окончаний линии. Я не думаю, что вы смотрите на выход в Windows? Это может быть проблемой с окончанием строки unix/windows. Если вы откроете файл в возвышенном или другом расширенном текстовом редакторе, вы можете переключаться между unix и windows. Посмотрите, работает ли это.
Не могли бы вы показать код, в котором вы распечатываете записи? Как бы то ни было, мы не знаем, что вы делаете! (Я предполагаю, что вы пропустили добавление символа новой строки) –
государственной статической силы основных (String [] арг) броски Exception {\t \t \t \t \t \t JobConf конф = новый JobConf (LogAnalyzer.class); \t \t conf.setJobName («Loganalyzer»); \t \t conf.setOutputKeyClass (Text.class); \t \t conf.setOutputValueClass (IntWritable.class); \t \t conf.setMapperClass (LogAnalyzer.Map.class); \t \t conf.setCombinerClass (LogAnalyzer.Reduce.class); \t \t conf.setReducerClass (LogAnalyzer.Reduce.class); conf.setInputFormat (TextInputFormat.class); \t \t conf.setOutputFormat (TextOutputFormat.class); \t \t conf.set ("mapreduce.textoutputformat.separator", "-"); –
FileInputFormat.setInputPaths (conf, new Path (args [0])); \t \t FileOutputFormat.setOutputPath (conf, new Path (args [1])); \t \t JobClient.runJob (CONF); \t \t \t \t} –