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

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)Z
	at 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值