在我们学习或者工作中开始hadoop程序的时候,往往会遇到一个问题,我们写好的程序需要打成包放在集群中运行,这无形中在浪费我们的时间,因为程序可以需要不断的调试,然后把最终程序放在集群中即可。为了解决这个问题,现在我们配置远程连接hadoop,远程调试的方法。
一段程序如下:获取更多大数据视频资料请加QQ群:947967114
![](https://i-blog.csdnimg.cn/blog_migrate/4a5f2b492f50da500b667b2257019ecc.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/bcef7ae8bd3d5d4d0e39e28b925870c8.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/1958c2859d2eae71488da954ad9f1a18.webp?x-image-process=image/format,png)
当我们在运行的时候会有如下众多的错误:
1、基础环境配置:首先需要注意自己使用的hadoop的版本:
![](https://i-blog.csdnimg.cn/blog_migrate/1edb2333a13f0f7cb43c48a0d27e72e0.webp?x-image-process=image/format,png)
这说明是2.6.0的所以需要下载一个连接包:hadoop-eclipse-plugin-2.6.0.jar,一定要注意根据自己的版本下载不同的连接包。放在myeclipse的安装路径下:D:\Program Files\Myeclipse-10
![](https://i-blog.csdnimg.cn/blog_migrate/64a8875e7b9f4cb97f4be57c80e3c4f7.webp?x-image-process=image/format,png)
Myeclipse-10和其他版本不同,是有两个目录的:其他版本只有一个目录,直接进入找到plugins即可。这里需要进入Common中找到plugins中,把连接包放在其中即可:
![](https://i-blog.csdnimg.cn/blog_migrate/62c7a43bc508b4a7d5c1282cd9acbafa.webp?x-image-process=image/format,png)
然后把Myeclipse重启。我们这个时候就可以进行hadoop的工程配置了:按照顺序点击:
![](https://i-blog.csdnimg.cn/blog_migrate/beca8979478461c7064125e39859b53f.webp?x-image-process=image/format,png)
在Browse中把解压好的hadoop包引入进来,只引入到主目录即可:然后就可以创建hadoop的,mapreduce工程了:获取更多大数据视频资料请加QQ群:947967114
![](https://i-blog.csdnimg.cn/blog_migrate/e03b924281ea38576e9a8b3f2b63869f.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/3f8c1b665cee76e53855a3de850b5de2.webp?x-image-process=image/format,png)
完成后可以看到众多的依赖包都自动进入了:
![](https://i-blog.csdnimg.cn/blog_migrate/a14bc3e13288d26099b2e03bf5dc6e18.webp?x-image-process=image/format,png)
然后我们配置远程连接hadoop的目录:
![](https://i-blog.csdnimg.cn/blog_migrate/c112c61206ae2aea843eab78634d0d78.webp?x-image-process=image/format,png)
新建一个:
![](https://i-blog.csdnimg.cn/blog_migrate/b01b73cb590d45f09585af51768f2fe3.webp?x-image-process=image/format,png)
经过配置之后可以看到如下界面:
![](https://i-blog.csdnimg.cn/blog_migrate/db486ac10bc52374ac5cffa3cca8fb48.webp?x-image-process=image/format,png)
能够感受到已经连接到了hadoop的目录了:
2、Exception in thread “main” java.lang.NullPointerException atjava.lang.ProcessBuilder.start
运行是出现如上错误:
![](https://i-blog.csdnimg.cn/blog_migrate/b7d8a162ef88d41aab5487e6383f2dec.webp?x-image-process=image/format,png)
这个问题是Hadoop2以上版本,Hadoop2的bin目录中没有winutils.exe导致的错误。所以需要下载对应的包:
![](https://i-blog.csdnimg.cn/blog_migrate/7e7032e7f5c6b53f8974d15578b9c632.webp?x-image-process=image/format,png)
注意一定要是64位的现在很少32位的了:如果两个版本都可以:解压并且把包里的所有内容都复制出来分别放在自己的hadoop的bin解压目录中:
![](https://i-blog.csdnimg.cn/blog_migrate/e0ced438efd8d6e0fd5f04442a509b63.webp?x-image-process=image/format,png)
然后把myeclipse对应的hadoop文件重新引入一:获取更多大数据视频资料请加QQ群:947967114
![](https://i-blog.csdnimg.cn/blog_migrate/3af277e4a092bd4764ae0f822232fb27.webp?x-image-process=image/format,png)
3、Exception in thread "main"java.lang.UnsatisfiedLinkError:
![](https://i-blog.csdnimg.cn/blog_migrate/3e942062347bc8998555e56affd28605.webp?x-image-process=image/format,png)
4、main ExitCodeException
![](https://i-blog.csdnimg.cn/blog_migrate/ec3aafac9e1990e2501c0e6f15cddfb5.webp?x-image-process=image/format,png)
这是因为window本地的hadoop没有winutils.exe导致的.原来本地hadoop要去调用这个程序.我们先把上一部的winutils.exe文件中例如hadoop.dll等所有文件都放到c:\windows\System32,然后使得其运行没错才可以.
然而winutils.exe还是无法启动,这个是某些电脑问题.有些人会遇到,双击winutils.exe运行报错,缺少msvcr120.dll.下载之后再去启动提示,“应用程序无法正常启动0xc000007b”.这是内存错误引起的.下载DirectX_Repair修复directx解决问题,最后成功启动了hadoop程序.
可能能够启动winutils.exe但还是不能正常跑应用程序,依然报错,可以试试修改权限验证.
修改hadoop/etc/hadoop/hdfs-site.xml
添加内容:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
5、atorg.apache.hadoop.io.nativeio.NativeIO$Windows.access遇到这个问题是由于源码文件中需要更改:首先去官网下载hadoop-2.6.0-src.tar.gz源码包,解压:hadoop-2.6.0-src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio下NativeIO.java 复制到对应的Eclipse的project,然后修改557行为return true如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1136ca08239efa87d1a73e0efdee8d11.webp?x-image-process=image/format,png)
6、org.apache.hadoop.security.AccessControlException: Permissiondenied: user=zhengcy, access=WRITE,inode="/user/root/output"这是由于访问权限的问题。
有两种解决方式:第一种把hadoop的目录的权限扩大:例如 hadoop chmod -R 777 /,都给所有权限。第二种方式是修改配置文件。去掉检查权限的步骤:在这个etc/hadoop下的hdfs-site.xml添加
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
7.获取更多大数据视频资料请加QQ群:947967114