虚拟机Hadoop实战(六)用java编写…
来源:互联网 发布:世界人工智能大会 北京 编辑:程序博客网 时间:2024/06/18 18:35
【结果图】将file1.txt和file2.txt中的项目去重
![虚拟机Hadoop实战(六)用java编写MapReduce程序【运行期间bug修复】 虚拟机Hadoop实战(六)用java编写MapReduce程序【运行期间bug修复】](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
同样在Netbeans环境下,新建一个基本的Java SE工程
这个Dedup程序,总感觉似乎仅仅是把本地的文件给传到Hadoop去做Map-Reduce了。
工程类库的导入,Hadoop的环境,简要参考前一章《虚拟机Hadoop实战(五)用java编写远程hadoop文件上传下载程序》中的设置:
hadoop-2.7.3\share\hadoop\common\lib\ 下的所有jar包
hadoop-2.7.3\share\hadoop\common\ 下的hadoop-common-2.7.3.jar
hadoop-2.7.3\share\hadoop\mapreduce\ 下的hadoop-mapreduce-client-core-2.7.3.jar
hadoop-2.7.3\share\hadoop\hdfs\ 下的hadoop-hdfs-2.7.3.jar
并添加如下设置:
hadoop-2.7.3\share\hadoop\yarn\ 下的hadoop-yarn-common-2.7.3.jar
hadoop-2.7.3\share\hadoop\yarn\ 下的hadoop-yarn-api-2.7.3.jar
同时记得到 https://github.com/SweetInk/hadoop-common-2.7.1-bin下载并做如下准备:
winutils.exe 拷贝到%HADOOP_HOME%\bin目录
libwinutils.lib 拷贝到%HADOOP_HOME%\bin目录
hadoop.dll 拷贝到c:\windows\system32目录
程序Dedup.java
//Java系统原配的包
//map将输入中的value复制到输出数据的key上,并直接输出 public static class Map extendsMapper<Object,Text,Text,Text>{ privatestatic Text line=new Text();//每行数据 //实现map函数 @Override publicvoid map(Object key,Text value,Context context) throwsIOException,InterruptedException{ line=value; context.write(line, newText("")); } }
//reduce将输入中的key复制到输出数据的key上,并直接输出 public static class Reduce extendsReducer<Text,Text,Text,Text>{ //实现reduce函数 @Override publicvoid reduce(Text key,Iterable<Text>values,Context context) throwsIOException,InterruptedException{ context.write(key, newText("")); } }
public static void main2() throws Exception{ System.setProperty("hadoop.home.dir","D:/迅雷下载/hadoop-2.7.3"); Configuration conf = new Configuration(); //设置远程job跑在哪个Hadoop地址 conf.set("mapred.job.tracker","10.100.78.101:9001"); String[]ioArgs = newString[]{"D:/!虚拟机/!待上传文件/dedup_in","D:/!虚拟机/!待上传文件/dedup_out"}; String[]otherArgs = new GenericOptionsParser(conf,ioArgs).getRemainingArgs(); if(otherArgs.length != 2) { System.err.println("Usage: Data Deduplication<in><out>"); System.exit(2); } Job job =new Job(conf, "DataDeduplication"); job.setJarByClass(Dedup.class); //设置Map、Combine和Reduce处理类 job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.class); //设置输出类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); //设置输入和输出目录 FileInputFormat.addInputPath(job, newPath(otherArgs[0])); FileOutputFormat.setOutputPath(job, newPath(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }
importjava.io.IOException;
// hadoop-2.7.3\share\hadoop\common\hadoop-common-2.7.3.jar包含下列包:
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.util.GenericOptionsParser;
// hadoop-2.7.3\share\hadoop\mapreduce\hadoop-mapreduce-client-core-2.7.3.jar包含下列类:
importorg.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.Mapper;
importorg.apache.hadoop.mapreduce.Reducer;
//以下的包无法自动解析,得手动添加
// hadoop-2.7.3\share\hadoop\mapreduce\hadoop-mapreduce-client-core-2.7.3.jar包含下列类:
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
// hadoop-2.7.3\share\hadoop\common\hadoop-common-2.7.3.jar包含下列包:
importorg.apache.hadoop.fs.Path;
public class Dedup{
}
在另外一个类的main函数中运行(这里方便管理,当然也可以把main放在Dedup里)
【异常】java.lang.NoClassDefFoundError:org/apache/hadoop/yarn/util/Apps
【原因】相比上传文件,MapReduce程序需要Yarn进行管理,因此需要导入相应的包
【解决】添加hadoop-2.7.3\share\hadoop\yarn\hadoop-yarn-common-2.7.3.jar、
hadoop-2.7.3\share\hadoop\yarn\hadoop-yarn-api-2.7.3.jar
【异常】(null) entry in command string: null chmod 0700
【原因】还是文件系统的问题,windows系统实在没法。如何解决?
【解决】得下载几个插件和类库进行Linux系统模拟:
在https://github.com/SweetInk/hadoop-common-2.7.1-bin中下载winutils.exe,libwinutils.lib拷贝到%HADOOP_HOME%\bin目录 。
然后!一定记得设置环境变量 HADOOP_HOME Path: C:\hadoop\
办法二:对于不想设置环境变量的,你可以选择在java程序里写上环境变量。
System.setProperty("hadoop.home.dir","C:\hadoop");
参考:http://stackoverflow.com/questions/40764807/null-entry-in-command-string-exception-in-saveastextfile-on-pyspark
【异常】java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(LZ
【原因】http://blog.csdn.net/congcong68/article/details/42043093
【解决】在https://github.com/SweetInk/hadoop-common-2.7.1-bin中下载hadoop.dll,并拷贝到c:\windows\system32目录中
【异常】org.apache.hadoop.mapred.FileAlreadyExistsException:Output directory file:/D:/!虚拟机/!待上传文件/dedup_out2 alreadyexists
【原因】暂时还不允许覆盖windows已经建好的目录。
【解决】因此可以选择删除此目录,或者指定输出的结果存储到一个新的目录里面。
0 0
- 虚拟机Hadoop实战(六)用java编写…
- 虚拟机Hadoop实战(五)用java编写…
- Java虚拟机(六)
- Java虚拟机(六)
- 虚拟机Hadoop实战(三)datanode无…
- 虚拟机Hadoop实战(四)namenode无…
- Hadoop 实战之Streaming(六)
- Hadoop 实战之Streaming(六)
- 虚拟机Hadoop实战(一)概念总览
- 虚拟机Hadoop实战(二)详细步骤
- JAVA虚拟机系列(六)
- 深入理解java虚拟机(六):java垃圾收集分析实战(内存分配与回收策略)
- 深入理解java虚拟机(六):java垃圾收集分析实战(内存分配与回收策略)
- Hadoop学习笔记(六)实战word count
- Java虚拟机(六)-JVM性能优化
- Java虚拟机--垃圾回收算法(六)
- 虚拟机概论(六)——JAVA虚拟机模型
- 虚拟机概论(六)——JAVA虚拟机模型
- 虚拟机Hadoop实战(四)namenode无…
- 排列与组合问题
- 多字节编码与Unicode码的区别
- 虚拟机Hadoop实战(五)用java编写…
- 链表A+B
- 虚拟机Hadoop实战(六)用java编写…
- 数列取模Fibonacci数列
- React Native 一些事
- OOZIE系统遇到的各种问题解决
- 实现折半查找算法(二分查找)
- OOZIE系统遇到的各种问题解决2:to…
- Android Studio 关于gradle和plugin的版本对应
- ActiveMQ基于zookeeper+leveldb主从配置
- 软件设计如何避免让用户抓狂