在linux使用hadoop运行mapreduce 报错

时间:2022-10-30 03:28:57
package com.mapreduce;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WoldCountMapper extends Mapper<LongWritable, Text, LongWritable, Text> {
protected void map(LongWritable key, Text value, 
Mapper<LongWritable, Text, LongWritable, Text>.Context context)
throws IOException, InterruptedException {
// 接受数据
String line = value.toString();
// 数据切分
String words[] = line.split("");
// 循环
for (int i=0 ;i<words.length;i++) {
// 出现一次,记一次,输出
context.write(new LongWritable(1), new Text(words[i]));

}
}
}
==============================================================================
package com.mapreduce;

import java.io.IOException;
import java.util.Iterator;


import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

public class WoldCounReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
protected void reduce(Text key,Iterable<LongWritable> v2s,
Reducer<Text, LongWritable, Text, LongWritable>.Context context) 
throws IOException, InterruptedException {
Iterator<LongWritable> it=v2s.iterator();
//定义一个记算器
long counter=0;
//循环v2s
while(it.hasNext()){
counter+=it.next().get();


}
// 输出
context.write(key, new LongWritable(counter));
}
}
==============================================================================

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class TextMapReducer {

public static void main(String[] args) throws IOException, 
ClassNotFoundException, Exception {
//  加载HDFS配置文件
Configuration conf=new Configuration();
  Job job=Job.getInstance(conf);
//加载所有的类
  job.setJarByClass(TextMapReducer.class);
  job.setMapperClass(WoldCountMapper.class);
  job.setReducerClass(WoldCounReducer.class);
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(LongWritable.class);
  FileInputFormat.setInputPaths(job, new Path("file:///home/hadoop/simple/source.txt"));
  FileOutputFormat.setOutputPath(job, new Path("file:///home/hadoop/simple/cdd"));
  //设置输入和输出相关属性

  System.out.println("66666666");
  job.waitForCompletion(true);

}


====================================================================================
2018-04-10 20:11:22,116 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
66666666
2018-04-10 20:11:22,817 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(1243)) - session.id is deprecated. Instead, use dfs.metrics.session-id
2018-04-10 20:11:22,820 INFO  [main] jvm.JvmMetrics (JvmMetrics.java:init(76)) - Initializing JVM Metrics with processName=JobTracker, sessionId=
2018-04-10 20:11:24,310 WARN  [main] mapreduce.JobResourceUploader (JobResourceUploader.java:uploadFiles(64)) - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
2018-04-10 20:11:24,330 WARN  [main] mapreduce.JobResourceUploader (JobResourceUploader.java:uploadFiles(171)) - No job jar file set.  User classes may not be found. See Job or Job#setJar(String).
2018-04-10 20:11:24,354 INFO  [main] input.FileInputFormat (FileInputFormat.java:listStatus(283)) - Total input paths to process : 1
2018-04-10 20:11:24,800 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:submitJobInternal(198)) - number of splits:1
2018-04-10 20:11:25,532 INFO  [main] mapreduce.JobSubmitter (JobSubmitter.java:printTokens(287)) - Submitting tokens for job: job_local607403828_0001
2018-04-10 20:11:26,056 INFO  [main] mapreduce.Job (Job.java:submit(1294)) - The url to track the job: http://localhost:8080/
2018-04-10 20:11:26,057 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1339)) - Running job: job_local607403828_0001
2018-04-10 20:11:26,066 INFO  [Thread-18] mapred.LocalJobRunner (LocalJobRunner.java:createOutputCommitter(471)) - OutputCommitter set in config null
2018-04-10 20:11:26,081 INFO  [Thread-18] output.FileOutputCommitter (FileOutputCommitter.java:<init>(108)) - File Output Committer Algorithm version is 1
2018-04-10 20:11:26,088 INFO  [Thread-18] mapred.LocalJobRunner (LocalJobRunner.java:createOutputCommitter(489)) - OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
2018-04-10 20:11:26,245 INFO  [Thread-18] mapred.LocalJobRunner (LocalJobRunner.java:runTasks(448)) - Waiting for map tasks
2018-04-10 20:11:26,247 INFO  [LocalJobRunner Map Task Executor #0] mapred.LocalJobRunner (LocalJobRunner.java:run(224)) - Starting task: attempt_local607403828_0001_m_000000_0
2018-04-10 20:11:26,425 INFO  [LocalJobRunner Map Task Executor #0] output.FileOutputCommitter (FileOutputCommitter.java:<init>(108)) - File Output Committer Algorithm version is 1
2018-04-10 20:11:26,474 INFO  [LocalJobRunner Map Task Executor #0] mapred.Task (Task.java:initialize(612)) -  Using ResourceCalculatorProcessTree : [ ]
2018-04-10 20:11:26,483 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:runNewMapper(756)) - Processing split: file:/home/hadoop/simple/source.txt:0+13
2018-04-10 20:11:26,916 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:setEquator(1205)) - (EQUATOR) 0 kvi 26214396(104857584)
2018-04-10 20:11:26,916 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:init(998)) - mapreduce.task.io.sort.mb: 100
2018-04-10 20:11:26,916 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:init(999)) - soft limit at 83886080
2018-04-10 20:11:26,916 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:init(1000)) - bufstart = 0; bufvoid = 104857600
2018-04-10 20:11:26,916 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:init(1001)) - kvstart = 26214396; length = 6553600
2018-04-10 20:11:26,932 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:createSortingCollector(403)) - Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
2018-04-10 20:11:26,996 INFO  [LocalJobRunner Map Task Executor #0] mapred.MapTask (MapTask.java:flush(1460)) - Starting flush of map output
2018-04-10 20:11:27,020 INFO  [Thread-18] mapred.LocalJobRunner (LocalJobRunner.java:runTasks(456)) - map task executor complete.
2018-04-10 20:11:27,044 WARN  [Thread-18] mapred.LocalJobRunner (LocalJobRunner.java:run(560)) - job_local607403828_0001
java.lang.Exception: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1074)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:715)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
at com.mapreduce.WoldCountMapper.map(WoldCountMapper.java:20)
at com.mapreduce.WoldCountMapper.map(WoldCountMapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
2018-04-10 20:11:27,072 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1360)) - Job job_local607403828_0001 running in uber mode : false
2018-04-10 20:11:27,085 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1367)) -  map 0% reduce 0%
2018-04-10 20:11:27,096 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1380)) - Job job_local607403828_0001 failed with state FAILED due to: NA
2018-04-10 20:11:27,248 INFO  [main] mapreduce.Job (Job.java:monitorAndPrintJob(1385)) - Counters: 0

1 个解决方案

#1


map中的context.write(new LongWritable(1), new Text(words[i]));与Reducer<Text, LongWritable, Text, LongWritable>中的定义类型不匹配。
map的输出是reduce的输入

#1


map中的context.write(new LongWritable(1), new Text(words[i]));与Reducer<Text, LongWritable, Text, LongWritable>中的定义类型不匹配。
map的输出是reduce的输入