大数据技术学习(hadoop)
编写实现类
首先在hadoop的根目录下新建一个工作目录workspace,即在/usr/local/hadoop执行命令
新建工作目录
接着在workspace目录下编写WordCount.java类
编写WordCount.java
WordCount.java代码如下,各位可以自己复制粘帖,在hadoop官方网站上也可以找到。
- 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(args[0]));
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- System.exit(job.waitForCompletion(true) ? 0 : 1);
- }
- }
编译运行
接着将该WordCount.java文件编译为class文件,在编译之前,还需添加以下环境变量
1. 首先添加JAVA_HOME,因为我用的是系统自带的jdk,所以路径如下图所示:
添加JAVA_HOME环境变量
2. 将jdk目录下的bin文件夹添加到环境变量:
将bin文件夹加到环境变量
3.接着将hadoop_classpath添加到环境变量:
将hadoop_classpath加到环境变量
执行上述步骤后,即可开始编译WordCount.java文件,编译java文件的命令为javac,截图如下:
编译WordCount.java
此时,在workspace文件夹下将会出现生成三个class文件,
编译后生成class文件
编译成功后,即可将三个class文件打包成jar文件,
打包class成jar文件
执行成功后,在workspace文件下生成了WordCount.jar文件,
打包jar完成
接着,在/usr/local/hadoop文件夹下新建一个input文件夹,用于存放数据,
创建input文件夹
接着cd 到input文件下,执行以下命令,就是将’Hello World Bye World’写进file01文件,将’Hello Hadoop Goodbye Hadoop’ 写进file02文件
创建输入数据
最后运行程序,
运行程序
期间可以到程序执行的过程,
执行过程
最后,将output目录下的文件输出,即可到程序运行的结果,