Hadoop学习笔记--开发WordCount
程序员文章站
2022-07-14 13:58:04
...
1.准备待处理文件,并将其上传到HDFS
hadoop dfs -put book.txt
2.Eclipse上创建项目
直接Finish即可
这里有一点需要注意,若你的项目jdk版本比虚拟机上Hadoop版本高,则运行会出错,修改项目jdk
3.编写Mapper与Reducer
这里需要说明一点,为了打包并部署是的便利,我们将所有class写在一个文件中,并且,若以内部类形式书写时,内部类必须加上public static;若以并列的类书写时,则无此要求
package mr;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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 Run {
enum Counter
{
LINESKIP;//出错的行数
}
public static class WordMapper extends Mapper<LongWritable, Text, Text, IntWritable>
{
Text text=new Text();
IntWritable one=new IntWritable(1);
/*
* 每次只处理input格式下的一条数据,在这里就是一行文本
*/
@Override
protected void map(LongWritable key, Text value,Context context)throws IOException, InterruptedException {
try
{
String[] words=value.toString().split(" ");
for(String word:words)
{
text.set(word);
context.write(text, one);
}
}
catch(Exception e)
{
context.getCounter(Counter.LINESKIP).increment(1);
}
}
}
public static class WordReducer extends Reducer<Text, IntWritable, Text, IntWritable>
{
/*
* 会得到combine后的数据,即同一key的数据都会得到
*/
@Override
protected void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException, InterruptedException {
int total=0;
for(IntWritable val:values)
{
total+=val.get();
}
context.write(key, new IntWritable(total));
}
}
public static void main(String[] args) throws Exception {
Configuration conf=new Configuration();
Job job=new Job(conf, "word_count");//作业名
//设置作业执行类
job.setJarByClass(Run.class);
//设置mapper,reducer
job.setMapperClass(WordMapper.class);
job.setReducerClass(WordReducer.class);
//设置输出文件格式
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//设置输入输出文件位置
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//是否完成
System.exit(job.waitForCompletion(true)?1:0);
}
}
注意导包
4.打包项目
右键单击项目 --> Export
取名
确定主函数所在类
打包成功!
5.将jar包传给虚拟机,我这里使用了WinSCP工具
6.找到jar包位置,运行指令
hadoop jar wc.jar ./data/in/book.txt ./data/out/wc/
最后两属性依次为输入文件位置,输出文件夹位置(不能存在!)2.创建
上一篇: 基于spark开发wordcount案例
下一篇: Bagging 简述