将在idea里的java代码放在VMware里运行,具体操作步骤 java代码与在idea里的差不多,只有WordCountDriverLinux 做了一点改变 其他的代码参考 MapReduce编程初体验(idea):统计一个文档里的单词个数
package com.czxy.test01;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* @author Hxm
* @version v 1.0
* @date 2019/11/12 16:01
*/
public class WordCountDriverLinux extends Configured implements Tool {
/**
* 将自己的 map Reduce 代码添加到框架中
*/
@Override
public int run(String[] strings) throws Exception {
//1.实例一个 Job
Job job = Job.getInstance(new Configuration(), "wordCount12");
//设置具体的任务类
job.setJarByClass(WordCountDriverLinux.class);
//2.设置读取数据的class
job.setInputFormatClass(TextInputFormat.class);
// 设置读取数据的路径 文件需要在hdfs
//如果指定的是一个文件夹,那么就读取这个文件夹下的所有文档
//如果指定的是一个具体的文档,那么就读取这个文档
TextInputFormat.addInputPath(job,new Path("hdfs://192.168.100.11:8020/aaaa"));
//3.设置map
job.setMapperClass(WordCountMap.class);
// 设置map输出的类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//4.设置reduce
job.setReducerClass(WordCountReduce.class);
// 设置reduce的输出的类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
//5.设置输出数据的class
job.setOutputFormatClass(TextOutputFormat.class);
// 设置输出数据的路径
//hdfs上这个输出路径不能存在
TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.100.11:8020/bbbb"));
job.setNumReduceTasks(3);
//6.等待代码执行(返回状态码)
return job.waitForCompletion(true)?0:1;
}
public static void main(String[] args) throws Exception {
//调用执行
int run = ToolRunner.run(new WordCountDriverLinux(), args);
}
}
在打jar包之前,需要先清除之前的 jar
在target里会出现两个 jar 包: test-1.0-SNAPSHOT.jar 这个 jar 比较小,因为里面只有代码。 original-test-1.0-SNAPSHOT.jar 这个 jar 包比较大,因为里面不仅有代码,还有项目运行所依赖的包。为了在虚拟机里运行不因为缺少包而导致报错,所以建议使用这个 jar 包。
[root@node01 ~]# hdfs dfs -mkdir /aaaa
[root@node01 ~]# hdfs dfs -put wordcount.txt /aaaa/wordcount.txt
[root@node01 ~]# hdfs dfs -ls /aaaa
Found 1 items
-rw-r--r-- 4 root supergroup 227 2019-11-15 16:37 /aaaa/wordcount.txt
[root@node01 ~]# hadoop jar original-test-1.0-SNAPSHOT.jar com.czxy.test01.WordCountDriverLinux
说明: original-test-1.0-SNAPSHOT.jar :需要执行的 jar 包 com.czxy.test01.WordCountDriverLinux :运行的java类
[root@node01 ~]# hdfs dfs -cat /bbbb/part-r-00000
hbase 3
hive 1
spark 6
aaa 1
flume 5
hadoop 3
kafka 3
word 1
count 2
redis 5
storm 5