前言: 在执行 wordcount代码中,文件参数在代码中写死,如果希望动态指定 文件参数的话,可以将工程打成jar方式,在hadoop环境下执行,步骤如下:
1 wordcount类适量修改成如下:
package mapreduce; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.FileSystem; 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.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; /** * 打包到处方式,参数在执行时手动输入 而非在代码中固定写死 * 实现单词计数功能 * 测试文件 hello内容为: hello you hello me me me * @author zm * */ public class MyWordCountConfig extends Configured implements Tool{ static String FILE_ROOT = ""; static String FILE_INPUT = ""; static String FILE_OUTPUT = ""; public static void main(String[] args) throws Exception { ToolRunner.run(new MyWordCountConfig(), args); } @Override public int run(String[] args) throws Exception { FILE_ROOT = args[0]; FILE_INPUT = args[1]; FILE_OUTPUT = args[2]; Configuration conf = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(FILE_ROOT),conf); Path outpath = new Path(FILE_OUTPUT); if(fileSystem.exists(outpath)){ fileSystem.delete(outpath, true); } // 0 定义干活的人 Job job = new Job(conf); //打包运行必须执行的方法 job.setJarByClass(MyWordCountConfig.class); // 1.1 告诉干活的人 输入流位置 读取hdfs中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数 FileInputFormat.setInputPaths(job, FILE_INPUT); // 指定如何对输入文件进行格式化,把输入文件每一行解析成键值对 job.setInputFormatClass(TextInputFormat.class); //1.2 指定自定义的map类 job.setMapperClass(MyMapper2.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //1.3 分区 job.setNumReduceTasks(1); //1.4 TODO 排序、分组 目前按照默认方式执行 //1.5 TODO 规约 //2.2 指定自定义reduce类 job.setReducerClass(MyReducer2.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //2.3 指定写出到哪里 FileOutputFormat.setOutputPath(job, outpath); job.setOutputFormatClass(TextOutputFormat.class); // 让干活的人干活 job.waitForCompletion(true); return 0; } } /** * 继承mapper 覆盖map方法,hadoop有自己的参数类型 * 读取hdfs中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数, * 这样,对于文件hello而言,调用MyMapper方法map后得到结果: * <hello,1>,<you,1>,<hello,1>,<me,1> * 方法后,得到结果为: * KEYIN, 行偏移量 * VALUEIN, 行文本内容(当前行) * KEYOUT, 行中出现的单词 * VALUEOUT 行中出现单词次数,这里固定写为1 * */ class MyMapper2 extends Mapper<LongWritable, Text, Text, LongWritable>{ @Override protected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException { String[] v1s = v1.toString().split(" "); for(String word : v1s){ context.write(new Text(word), new LongWritable(1)); } } } /** * <hello,{1,1}>,<me,{1}>,<you,{1}>, 每个分组调用一次 reduce方法 * * KEYIN, 行中出现单词 * VALUEIN, 行中出现单词个数 * KEYOUT, 文件中出现不同单词 * VALUEOUT 文件中出现不同单词总个数 */ class MyReducer2 extends Reducer<Text, LongWritable, Text, LongWritable>{ protected void reduce(Text k2, Iterable<LongWritable> v2s,Context ctx) throws IOException, InterruptedException { long times = 0L; for(LongWritable l : v2s){ times += l.get(); } ctx.write(k2, new LongWritable(times)); } }
2 将工程打成jar包,这里是通过eclipse的export方式打成Jar包,注意细节如下:
3 将打好的包上传到hadoop环境中,执行命令如下:
[root@master ~]# hadoop jar wordcountconfig.jar hdfs://master:9000/ hdfs://master:9000/hello hdfs://master:9000/out
4 结果如下:
[root@master ~]# hadoop fs -text /out/part-r-00000 Warning: $HADOOP_HOME is deprecated. hello 2 me 3 you 1
5 打好的包见附件
相关推荐
有时候在eclipse上运行项目,需要引用的Hadoop的jar包,也就是hadoop的外部依赖包,有conf,fs,io,mapreduce等等,这里列举了一部分,基本上hadoop的所有外部依赖jar包都包含在内了,如果下载了不会使用,可以看我...
完整的Hadoop jar包,解压直接用。
包含hadoop平台Java开发的所有所需jar包,例如activation-1.1.jar apacheds-i18n-2.0.0-M15.jar apacheds-kerberos-codec-2.0.0-M15.jar api-asn1-api-1.0.0-M20.jar api-util-1.0.0-M20.jar asm-3.2.jar avro-1.7.7...
涵盖所有Hadoop所需要的jar包,希望对大家有帮助!
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
使用scala开发spark应用时用到的jar包:spark-assembly-1.5.2-hadoop2.6.0jar包
hadoop中常用的jar包,hadoop-common-0.23.8.jar和hadoop-mapreduce-client-core-2.7.7.jar
Flume要想将数据输出到HDFS,必须持有Hadoop相关jar包:commons-configuration-1.6.jar、 hadoop-auth-2.7.2.jar、 hadoop-common-2.7.2.jar、 hadoop-hdfs-2.7.2.jar、 commons-io-2.4.jar、 htrace-core-...
用来做一个推荐系统。hadoop框架用的,搭建环境,再windows下,导入到eclipse中。
win10下编译过的hadoop2.7.2 jar包,配置hadoop客户端环境必备
windows使用java调用hadoop2需要修改的jar,具体可以参考博主博客
Eclipse集成Hadoop2.10.0的插件,使用`ant`对hadoop的jar包进行打包并适应Eclipse加载,所以参数里有hadoop和eclipse的目录. 必须注意对于不同的hadoop版本,` HADDOP_INSTALL_PATH/share/hadoop/common/lib`下的jar包...
包含hadoop集群开发项目所需所有jar包,其中包含支持hive,hbase,sftp,junit等等以及一些小实例
包含 elasticsearch-hadoop-6.6.1.jar elasticsearch-hadoop-hive-6.6.1.jar elasticsearch-spark-20_2.11-6.6.1.jar elasticsearch-storm-6.6.1.jar 等
hadoop 2.7.5 eclipse jar 包,只需要放到eclipse的plugin目录下重启即可
使用ecplice操作hadoop所需要的各种jar包。包括hdfs,maprudce,yarn,httpfs,kms。
hadoop-common-2.7.2.jar
Hadoop中单词统计案例运行的代码
hadoop操作的文档文献和hadoopjar包