Eclipse中采用本地作业运行器(Job Runner)运行Hadoop测试(Hadoop2.7.3)

来源:互联网 发布:什么叫大数据金融 编辑:程序博客网 时间:2024/06/05 05:47

Hadoop有一个本地作业运行器,可以使MapReduce执行引擎在本地的单个JVM上运行作业,主要设计用于测试本地代码,可以进行调试等操作。

本地运行与服务器上最大区别就是不能运行多个reducer,只能运行<=1个reduce操作,但是不影响调试。


使用本地作业运行器只需要通过配置一个参数即可,就是mapreduce.jobtracker.address值设置为local就会运行本地不访问外部jobtracker,默认值就是local。


步骤比较简单


前期准备:

1. 建立Maven项目导入Hadoop相关依赖包以后,完成Map和Reduce的编写。

2. 下载Hadoop-xxx.tar.gz(和服务器用的一个版本即可),解压放到本地hadoop目录。
下载地址:Hadoop各版本

3. 下载winutils.exe(本地运行模拟linux上执行命令用的),下载地址:WinUtils.exe及本地库



开始配置:

1. 下载的winutils.exe和相关文件复制到hadoop/bin下。
2. 开始准备调试代码,选择写好的方法入口,点击Debug Configuration,添加参数如下:


    Program Arguments是程序运行参数,-conf 是hadoop命令参数,后面hadoop-local.xml是一个配置文件,主要是配置hadoop本地运行器运行程序,在我项目中的src/main/resources下,内容如下:

<?xml version="1.0" encoding="UTF-8"?><configuration><property><name>fs.defaultFS</name><value>file:///</value></property><property><name>mapreduce.jobtracker.address</name><value>local</value></property></configuration>

fs.defaultFS : 配置为本地文件系统,mapreduce.jobtracker.address为local本地模式。

VM Arguments 是动态指定的两个参数,-Dproperty=value 配置的hadoop临时目录和安装目录,可以在windows环境变量中配置HADOOP_HOME代替hadoop.home.dir, 在hadoop-local.xml配置hadoop.tmp.dir代替写在VM参数中hadoop.tmp.dir。(配置在环境和项目中就不用每次运行VM参数都要写了)



上述配置完成后,还需要配置PATH,就是window环境变量中的PATH,我这里配置到项目运行环境上了,(你可以配置到环境变量里去,和java的PATH添加方式相同)如下:



这个参数不配置,会导致如下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Zat org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:609)at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:977)at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:187)at org.apache.hadoop.util.DiskChecker.checkDirAccess(DiskChecker.java:174)at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:108)at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.confChanged(LocalDirAllocator.java:285)at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:344)at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:150)at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:131)at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:115)at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:125)at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:163)at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:731)at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:240)at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)at com.tom.MaxTemperatureDriver.run(MaxTemperatureDriver.java:59)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)at com.tom.MaxTemperatureDriver.main(MaxTemperatureDriver.java:68)

是hadoop调用window本地库访问目录时权限问题导致的。

Hadoop环境变量相关配置:看这里,里面有一点

完成配置后,点击debug,运行就可以跟踪代码了,控制台输出如下:



(如有理解描述偏差以及错误,请及时打脸,啪啪啪...大笑



0 0
原创粉丝点击