之前在linux下用eclipse安装hadoop插件,无奈不知是电脑配置过于垃圾还是其他什么原因实在是卡的要死,为此不得不在本地安装,之后打成jar包放入linux运行折中了。这里记录下过程方便后期回看一下。
首先之前已经准备好相关软件eclispe64位,jdk1.8版本,hadoop-2.7.0tar.gz压缩包,以及对应的hadoop-2.7.0插件,接下来开始进入eclipse
将之前在虚拟机中配置好的hadoop拷贝到本地一份,这里我放在了本地桌面上,这里eclipse放在了d盘,将之前下载的插件放在eclipse的plugins文件夹中,这个操作要确保eclipse处于关闭状态或者是放入后进行重启eclipse,之后打开eclipse,在windows—preferences中找到下面这个
这里指定的是hadoop在本地的安装位置,选中之后点击finish保存,之后在windows选项中选择打开视图 open perspective,选择Map/Reduce
- 选中黄色小象,修改locations信息,具体修改见下
- 这里location name随便起,左边端口在yarn-site.xml和右边端口在core-site.xml中均有配置
- 这里配置的ip地址是主机的ip地址,也就是本地的不是虚拟机地址。
- 这时候是在eclipse中看不到hadoop的hdfs目录的,这是因为在虚拟机中主节点和子节点并没有启动的缘故,所以这里进入虚拟机并在主节点的hadoop的sbin目录下分别启动start-dfs.sh和start-yarn.sh,做完这些以后可以在本地登录192.168.70.100:50070和8088,这里如果能看到内容,之后返回eclipse重新刷新可以看到之前在hdfs上创建的目录了
- 出现上面这个图就说明hadoop插件在myeclipse上成功配置了,eclipse作为客户端成功连接了hadoop
- 接下来创建一个MR project测试一下
- 这里创建了一个MyHadoop的MR工程,可以看到Hadoop相关的jar包都已经自动导入了
- 这里导入一个hadoop自带的wordcount源码,可以从hadoop的官网下载,注意选择对应版本,后缀是src
- 之后在虚拟机主节点的hdfs上创建输入目录和输出目录,通过hdfs dfs -mkdir - p /usr/root/input这种格式创建多级目录,输出目录不需要手动创建,会自动创建,但是输入目录必须手动创建,因为这里需要放入一个txt文件作为统计词频的demo,名字任意起。
- 接下来在WordCount这个Java文件右键run as –run configurations中给这个程序添加两个参数,因为他接受的是main函数的args[]参数数组,见下图
- 两个参数分别代表的是输入路径和输出路径,这里count3并没有手动创建,会自动创建,保存好配置后,运行该文件,选择run on hadoop,执行顺利的话会再指定输出目录生成一个success文件和part-00000文件,其中统计记录就存放在后者。
- 这里可能会报一些错误,这里提供下解决方案: .Exception in thread “main” java.lang.NullPointerException atjava.lang.ProcessBuilder.start(Unknown Source)
- 这个错误是因为在hadoop的2.x版本中缺少winutils.exe文件造成的,这个好办,从网上搜索一下下载下来放到hadoop-2.7.0本地安装目录的bin目录下即可。,之后添加一个系统变量HADOOP_HOME和在Path中添加安装目录下的bin目录,前者指定hadoop的本地安装位置,后者添加%HADOOP_HOME%\bin;保存后解决这个问题
- 接下来再次运行报另一个错
- 这个错是因为缺少hadoop.dll文件导致的,从网上下载一个下来,放在c盘的windows/system32 和system64,最好在hadoop的bin目录下也放一份,这样确保万无一失,之后关闭eclipse重启,执行发现这个错误消失,但是什么都没输出,可能是有其他问题,设置一个日志文件记录一下信息确定出错问题在哪
-
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode=”/usr/root/output/count2/_temporary/0”:root:supergroup:drwxr-xr-x - 这里意思就是说拒绝访问,也就是说Administrator这个用户没有向output用户写入数据的权限,而这个用户就是本机的用户名,当然是没有这权限了这里修改hdfs-site.xml中一个配置
- 再次执行还是报错,说明问题没有解决么可以想到有两种解决方案,一种是为用户赋予写的权限,但是Linux系统是不能给Administrator用户赋予权限的,那么只能修改hadoop的用户名这种方案了,这里又有两种,一种是创建一个新的用户为其赋予root权限,或者是直接使用root用户,为了方便起见这里直接使用root用户,这样就可以成功向output目录输出了
- 具体来说就是添加一个系统环境变量,指定hadoop_user_name的值为root
- 上面设置使用者为root管理员,自然有向输出目录写入文件的权限了,接下来进行测试,发现成功输出了,至于安装eclipse插件告一段落了
- 附上一张成功运行的照片
- 小结:其实很多东西在第一次探索的时候总是会遇到各种各样未知的问题,消耗大量的时间但是一旦都解决并记录下来,下次再遇到同样的问题就能极大缩短时间搞定了,回头在看的话发现其实也就那么回事。以上。