任务不是很重,做的时候只要注意两点就好了:
文章目录
- 一是导入包的时候要导入common,hdfs,mapreduce,yarn四个文件夹下面的jar包,以及他们的lib下面的jar包,
- 二是注意测试文件的位置,以及输出文件的位置,hdfs dfs的默认操作目录是在user/wangyang/的,也就是大多数的/user/hadoop/,创建文件时,不带/代表的就是创建在该目录下,带/意味着创建在根目录下。最后也没遇到什么比较困难的错误,NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException是因为自己少导入包,之后再导入jar包引起的,所以在建项目时候把jar包导入完全,创建项目过后在导入jar包,会出现一些问题!
- 除了第一个计数,去重和排序的流程基本都是:
准备你的测试文件=>开启hadoop=>hdfs创建文件夹=>上传测试文件到hdfs=>创建项目=>导入jar包=>填写代码更改自己的hdfs路径=>执行程序=>终端cat查看结果 - 导入如下几个目录的相关jar包(其实有些可以不用导入这么多,我懒得分了,全部导入准没错):
- /usr/local/hadoop/share/hadoop/common
- /usr/local/hadoop/share/hadoop/common/lib
- /usr/local/hadoop/share/hadoop/mapreduce
- /usr/local/hadoop/share/hadoop/mapreduce/lib
- /usr/local/hadoop/share/hadoop/hdfs
- /usr/local/hadoop/share/hadoop/hdfs/lib
- /usr/local/hadoop/share/hadoop/yarn
- /usr/local/hadoop/share/hadoop/yarn/lib
1.WordCount练习
完成WordCount程序的编写,并打包成.Jar文件在终端执行:
程序代码:
package exp4;
import java.io.IOException;
import java.util.Iterator;
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;
import org.apache.hadoop.util.GenericOptionsParser;
public class Exp4 {
public Exp4() {
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
if(otherArgs.length < 2) {
System.err.println("Usage: wordcount <in> [<in>...] <out>");
System.exit(2);
}
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(Exp4.class);
job.setMapperClass(Exp4.TokenizerMapper.class);
job.setCombinerClass(Exp4.IntSumReducer.class);
job.setReducerClass(Exp4.IntSumReducer.class);
job.setOutput