**注意:
在生产环境下,MapReduce Application一定是运行在YARN 分布式集群之中
但在测试开发MapReduce程序阶段,可以使用以下方式,来测试代码
**
1.本地计算+本地数据
本地计算指的是借助于windows平台的hadoop环境模拟运行MapReduce程序。
本地数据指的是计算的数据来源于Windows平台,并且输出到本地
1.修改初始化类中如下代码
//3.指定计算数据的来源位置以及计算结果的输出位置
TextInputFormat.addInputPath(job,new Path("file:///d:\\my\\my.txt"));
//输出目录必须为空
TextOutputFormat.setOutputPath(job,new Path("file:///d:\\my\\result"));
2.运行程序即可
注意:可能会出现以下异常
如出现以下异常
Exception in thread "main"java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)
解决方案:
- 在项目的根目录中新建包 org.apache.hadoop.io.nativeio
- 在包中新建类 NativeIO
- 找到Hadoop的NativeIO类将所有的代码复制到自建的NativeIO中
- 修改NativeIO中的源码(关联源码是557,未关联287行),将return true;
- 重新运行,得到运行结果
2.本地计算+远程数据
1:修改初始化类
//3. 指定计算数据的来源位置以及计算结果的输出位置
TextInputFormat.addInputPath(job,new Path("hdfs://hadoop:9000/baizhi/data.txt"));
// 注意:计算结果的输出目录必须不存在
TextOutputFormat.setOutputPath(job,new
Path("hdfs://hadoop:9000/baizhi/result3"));
2:运行程序
3.访问控制异常,添加虚拟参数
-DHADOOP_USER_NAME=root
3.远程就算+远程数据
远程计算是指MapReduce应用程序依然运行在YARN 集群中
远程数据指数据依赖来源于HDFS或输出到HDFS
1.修改初始化类
// 添加远程计算的支持
//===============================================================
conf.set("fs.defaultFS", "hdfs://hadoop:9000/");
conf.set("mapreduce.job.jar", "file:///F:\\IdeaProjects\\20190812\\hadoopmapreduce\\
target\\hadoop-mapreduce-1.0-SNAPSHOT.jar");
conf.set("mapreduce.framework.name", "yarn");
conf.set("yarn.resourcemanager.hostname", "hadoop");
conf.set("yarn.nodemanager.aux-services", "mapreduce_shuffle");
conf.set("mapreduce.app-submission.cross-platform", "true");
conf.set("dfs.replication", "1");
//===============================================================