上傳兩個文件到hdfs上的input目錄下java
代碼例如如下:sql
import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class wordcount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(wordcount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path("hdfs://localhost:9000/input")); //這裏直接指定了文件路徑.在run configuration下指定也行。但沒配置好 FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/output1")); System.exit(job.waitForCompletion(true) ?0 : 1); } }apache
注:eclipse下初次執行wordcount可能會有log4j警告。可以在src下創建名爲log4j.properties的文件,就能夠消除警告,內容例如如下:app
log4j.rootLogger=INFO,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.Threshold=DEBUG log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%d]%l%5p:%m%n log4j.appender.DebugFile=org.apache.log4j.RollingFileAppender log4j.appender.DebugFile.File=../log/debugFile.log #log4j.appender.DebugFile.File=debugFile.log log4j.appender.DebugFile.Append=true log4j.appender.DebugFile.Threshold=DEBUG log4j.appender.DebugFile.layout=org.apache.log4j.PatternLayout log4j.appender.DebugFile.layout.ConversionPattern=[%d]%l%5p:%m%n log4j.appender.DebugFile.MaxFileSize=20MB log4j.appender.DebugFile.MaxBackupIndex=10 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Connection = INFO log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG log4j.logger.java.sql.ResultSet = DEBUG log4j.logger.com.yuetao=DEBUG