hadoop2.6.0本地调试环境搭建

首先我先说一下我搭建环境的最终目的, 我是想本地运行MR, 本地调试, 不提交给yarn, 直接本地跑MR, 连接的是远程的Hbase集群, 结果也会保存到远程Hbase

注: 我说的是在我的电脑调试成功的方法, 每个人的问题原因都不同, 只可参考, 照做不一定会成功的, 我就是看了N篇博客, 照做没一个成功的, 然后自己摸索的方法

1. 解压安装包之类的就不说了

 

2. 环境变量HADOOP_HOME是必须的, path中配HADOOP_HOME\bin配不配都行, 有HADOOP_HOME就足够程序运行了

 

3. 将你需要的jar包(hadoop相关包等等)都放到项目主目录的lib文件夹下面, 引用一下即可

 

4. 下载相应版本的winutil.exe, 放到hadoop bin目录下, 就放这一个就行, 千万不要多放, 尤其是hadoop.dll, 不要乱放, 一旦程序在path相关目录下找到hadoop.dll文件, 就会认为这是一个hadoop集群, 而你却想在本地跑MR, 本地windows系统不支持hadoop集群, 所以就会报错, 详情参见: http://www.cnblogs.com/lovegmail/p/6053945.html, 如果之前已经放了hadoop.dll到相应的目录, 最好删除后重启下电脑, 保险点

 

5. 一定要删除Sources Root文件夹(就是idea中亮色的配置文件夹)下的yarn-site.xml和mapred-site.xml配置文件, 保留hbase-site.xml,  core-site.xml, hdfs-site.xml,   没有yarn-site.xml和mapred-site.xml做配置引导, 程序就不会自动提交给远程yarn, 是否提交给yarn好像和hadoop.dll文件也有关, 具体啥情况, 没搞懂, 总之这样做能跑通就对了

 

6. 添加下面代码, 我这边测试的是, 这些代码好像加不加都无所谓, 怎么都能跑通, 留下做个备份吧, 跑不通的朋友可以加上试试

参考文章: https://blog.csdn.net/zhblanlan/article/details/82081991

// 会自动加载 hbase-site.xml, core-site.xml等等
Configuration configuration = HBaseConfiguration.create();
// 本地跑的时候, 需要加载参数, 集群就不用了, 注释掉
configuration.addResource(new Path(ClassLoader.getSystemResource("hbase-site.xml").toURI()));
configuration.addResource(new Path(ClassLoader.getSystemResource("core-site.xml").toURI()));
configuration.addResource(new Path(ClassLoader.getSystemResource("hdfs-site.xml").toURI()));

// 设置job运行时要访问的默认文件系统为:本地
configuration.set("fs.defaultFS", "file:///");
// 设置job提交到本地运行
configuration.set("mapreduce.framework.name", "local");
// 设置resourcemanager的主机为:本地
configuration.set("yarn.resourcemanager.hostname", "0.0.0.0");


// 本地运行提交job的客户端程序(适用于win)
// 设置跨平台参数为:true;因为在win(F:\\test.txt)下的路径方式和linux(/root/test.txt)路径方式不同
configuration.set("mapreduce.app-submission.cross-platform", "true");

 

7. 修改NativeIO.java源码

改之前要确保你的报错信息如下, 是access方法报的错, 因为上面第4步hadoop.dll乱放也会导致这样的异常, 但不是access方法

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)

找到源码, 将NativeIO.java单独拿出来, 在你的项目中新建一个包org.apache.hadoop.io.nativeio, 将其放到下面, 就是保证NativeIO.java的原本路径不变.

然后修改相应的行, 看我的异常信息是在NativeIO.java的609行, (每个版本的行数都不同, 自己找自己的), 找到这行.

将return access0(path, desiredAccess.accessRight()); 修改为 return true;

其实就是access()方法报错, 把它改成直接返回true, 别干其他的了, 就解决问题了, 简单粗暴

 

至此的MR就可以本地调试了, MR都在本地运行, 不提交给yarn, 但是结果会保存在远程hbase.

 

再贴一个我参考的文章

https://blog.csdn.net/qq_31772441/article/details/84076715

这个文章感觉应该是可以跑通, 但是我没通, 感觉好像是本地运行, 提交给远程yarn的模式,  大家可以试试

 

本文就是自己做个备份, 也给大家做个参考, 搭建hadoop本地调试环境比较麻烦, 比较考验耐心, 大家多多尝试.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值