- 将hadoop-eclipse-plugin-2.5.1.jar放入Eclipse的plugins目录下,然后重启Eclipse,使插件生效
- 创建Map/Reduce项目
- window——show view——Map/Reduce Location:
- window——open prespective——other——Map/Reduce(会出现在Project Explorer列表中)
- 在Map/Reduce Locations中New Hadoop Location:配置如下:只需要用到DFS就可以了,端口和NN的50070页面显示的端口一致即可。Host我写的是node1,是因为我在c:/windows/sytem32/hosts文件中配置了路由映射,也可以直接写IP(注意关掉集群的防火墙)
在hdfs-site.xml中配置了NN的RPC地址和端口号(8020)
- 此时就可以在Project Explorer看到文件目录(无报错信息):
- 在创建目录或上传文件的时候总是失败:
-
eclipse连接远程hadoop集群开发时报错
Exception in thread “main”
org.apache.hadoop.security.AccessControlException: Permission denied:
user=Jason, access=WRITE, inode=”data”:zxg:supergroup:rwxr-xr-x at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:207)
当前登录windows的用户名和hadoop集群的用户名不一致,将没有权限访问
解决方案:
管理DFS system目录。目前做法是将hadoop服务集群关闭权限认证,修改hadoop安装集群master的hadoop-2.5.1/conf/mapred-site.xml,增加:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
正式发布时,可以在服务器创建一个和hadoop集群用户名一致的用户,即可不用修改master的permissions策略。
8. 编写WordCount的Mapper和Reducer,再编写Driver(主类)
9. 将程序export(src下的代码文件)成jar文件。
10. 执行:上传到任何一台机器中(实际是在ResourceManager中运行),使用命令:
hadoop jar wc.jar com.mr.RunJob
注:wc.jar是jar文件名,com.mr.RunJob是主类
11. 运行结果:
集群中运行的状态:
在yarn中看到的结果:
Eclipse插件中的结果
运行结果:
下面介绍一些在Windows中运行的方法:
- MR执行环境有两种:本地测试环境,服务器环境
-
本地测试环境(windows):可以进行Debug调试 (开发过程中一般采用本地方式)文件可以直接放在本地,不需要启动集群。
- 在windows的hadoop目录bin目录有一个winutils.exe
- 在windows下配置hadoop的环境变量HADOOP_HOME(系统变量),配置好环境变量之后需要重启eclipse才能找到路径
- 拷贝debug工具(winutils.ext)到HADOOP_HOME/bin
- 如果出现下面错误:
- 下载对应版本的hadoop.dll 和winutil.exe,放入hadoop_home/bin中,将hadoop.dll放入windows/system32中,不需要重启。
- MR调用的代码需要改变:
a、src不能有服务器的hadoop配置文件(因为如果有的话,还会到服务器中去运行,会报错)
b、在调用是使用:
Configuration config = new Configuration();
config.set(“fs.defaultFS”, “hdfs://node1:8020”); (从hdfs上去取输入数据)
config.set(“yarn.resourcemanager.hostname”, “node1”);
c、执行:与普通Java程序一样,Run JavaApplication (使用的是本地线程)
- 服务器环境:
首先需要在src下放置服务器上的hadoop配置文件
- 在本地直接调用,执行过程在服务器上(真正企业运行环境)
a、把MR程序打包(jar),直接放到本地
b、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
c、增加一个属性:
System.setProperty(“HADOOP_USER_NAME”, “root”);
config.set(“mapred.jar”, “C:\Users\Administrator\Desktop\wc.jar”);
d、本地执行main方法,servlet调用MR,程序将jar包提交到服务器中去执行。
也能在node1:8088中看到执行过程与结果 - 直接在服务器上,使用命令的方式调用,执行过程也在服务器上
a、把MR程序打包(jar),传送到服务器上
b、通过: hadoop jar jar路径 类的全限定名
需要设置HADOOP_USER_NAME,要不然会出现权限错误
- 在本地直接调用,执行过程在服务器上(真正企业运行环境)
2.7.1的winutils.exe和hadoop.dll的下载地址:链接: http://pan.baidu.com/s/1bpCCySn 密码: ffar
winutil.exe和hadoop.dll版本要对应