Eclipse连接远程Hadoop集群&运行WordCount例程

hadoop开发主要分为两种,第一种是脱离集群开发;第二种是连接远程Hadoop集群,将我们开发的API提交hadoop执行;
http://www.aboutyun.com/thread-6950-1-1.html
https://my.oschina.net/OutOfMemory/blog/776772
本文记录的是后一种,即用本地windows下的eclipse 连接远程linux下的hadoop集群,一步到位,直接用这种方式进行hadoop的开发。

一, 搭建Hadoop2.8.0集群
Hadoop集群搭建相对较简单,网上有很多的教程, 这里就不赘述了。简单介绍一下我所搭建的Hadoop集群。
集群的搭建采用的是完全分布式,集群分布在三台服务器上。
平台:linux
Linux 内核版本:Red Hat 4.8.2-16 (三台机器都是该版本)
三台机器内网IP:10.0.192.3(master),10.0.192.4(slave1),10.0.192.5(slave2)
Hadoop版本:2.8.0

主要参考但不仅限以下几篇博文:
http://blog.csdn.net/aquester/article/details/71022862
http://blog.csdn.net/lichangzai/article/details/8206834
http://www.linuxidc.com/Linux/2015-08/121397.htm
http://www.linuxidc.com/Linux/2015-08/121349.htm
http://www.linuxidc.com/Linux/2015-08/121349p2.htm
网上的资料非常多,关键是要自己实践,并不难。
搭建成功之后,准备启动。但在启动之前,需在三台机器上对namenode格式化,具体操作是切到安装目录下的bin目录,然后运行:hdfs namenode -format。然后就可以启动了,分别在三台机器上启动hadoop。
在master机器会有5个进程,如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第1张图片
在两台slave机器上分别都有两个进程,如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第2张图片

二, eclipse搭建
只说环境。
平台:win10
Eclipse版本:4.4.2

三, eclipse 连接 hadoop
这里的重点是需有一个eclipse的插件,hadoop-eclipse-plugin-2.8.0.jar,通过它来使eclipse和hadoop相连。网上也有很多资料,我主要参考的资料
https://my.oschina.net/OutOfMemory/blog/776772
http://www.le.com/ptv/vplay/29983228.html
贴出我的define hadoop location的配置,
General:
Eclipse连接远程Hadoop集群&运行WordCount例程_第3张图片

Location name:随便起个名字
Map/Reduce(V2) Master Host:这里就是远程里hadoop master对应的IP地址,端口对应 hdfs-site.xml里dfs.datanode.ipc.address属性所指定的端口
DFS Master Port: 对应core-site.xml里fs.defaultFS所指定的端口
User name:运行远程hadoop的用户名
Advanced parameters:貌似不用配置,等成功运行完wordcount例程之后,所有的值都有了,我猜应该是直接读取的远程hadoop集群的配置。大家可以试一试

问题:
问题一:
windows上有一套解压后的hadoop2.8.0,linux上有一个由hadoop2.8.0搭建的集群,他们什么关系?以2.8.0为例,hadoop官网上有两个压缩文件,“hadoop-2.8.0.tar.gz”、“hadoop-2.8.0-src.tar.gz”,他们什么关系?
解答:windows上的hadoop2.8.0是由“hadoop-2.8.0.tar.gz”解压而来,它是安装文件,但是在windows下并不需运行hadoop,它的作用是给我们开发hadoop程序提供一系列的依赖jar包,程序开发完毕,便可以直接在远程hadoop集群运行。从这个角度,windows下的hadoop版本必须要和linux上hadoop集群版本保持一致,以免出现莫名的错误。
至于“hadoop-2.8.0.tar.gz”、“hadoop-2.8.0-src.tar.gz”,前者是hadoop已经编译好的安装文件,解压改改配置文件就能用。后者带src的是源代码文件,需要编译才能使用。一般来说后者被应用于查看hadoop源码,链接有如何用eclipse关联hadoop源码的方法:http://www.aboutyun.com/thread-8211-1-1.html
http://www.aboutyun.com/thread-8225-1-1.html

问题二:
在配置好locations之后,会弹窗出现错误。
Eclipse连接远程Hadoop集群&运行WordCount例程_第4张图片
同时,hdfs文件也找不到,如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第5张图片
而本来hadoop上应该是有两个dfs文件的。如下,
这里写图片描述
解答:
看了一些网上的介绍,基本都是讲出现这种错误的原因都是由于define hadoop location中的各种配置存在这样或那样的问题。但我试过各种配置之后,发现在我这里都不对。最后我猜测可能是插件本身有问题,最后换了一个插件,果然就可以了。插件不是我编译生成的,是直接从网上找的资源。
无法工作的插件下载地址:(版本2.8.0)
http://download.csdn.net/detail/luomoiu0028/9852750?locationNum=5&fps=1
http://download.csdn.net/detail/larntin2002/9830778
可以工作的插件下载地址:(版本2.7.0)
http://download.csdn.net/detail/tondayong1981/8680589
下载2.7.0之后,即“hadoop-eclipse-plugin-2.7.0.jar”,我将其重命名为hadoop-eclipse-plugin-2.8.0.jar,便可以用了。如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第6张图片
要说明的是,这里我是偷懒下载的插件,实质上插件可以自己编译,网上有资料自己找。

问题三:
在进行wordcount测试的时候,出现“Exception in thread “main” org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://101.251.192.172:9000/output already exists” 错误
原因很明显,是我们最开始已经创建过一个output文件夹,因此删除它即可。
解答。直接删除dfs中的输出文件夹output。删除之后,只有一个输入文件夹,如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第7张图片

问题四:
删除output文件夹之后,再次运行wordcount,会报“Exception in thread “main”java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V”错误,
原因是C:\Windows\System32下缺少hadoop.dll,把这个文件拷贝到C:\Windows\System32下面即可。但是hadoop2.8.0的bin目录下并没有hadoop.dll等一系列文件,参考这篇文档,http://blog.csdn.net/lizhiguo18/article/details/46333433, 我们需要下载对应的2.8.0版本的bin文件夹,下载地址:https://github.com/steveloughran/winutils 。我们将下载下来的bin文件夹下的文件拷贝到hadoop2.8.0的bin目录中,然后再将hadoop.dll拷贝到C:\Windows\System32即可。再次运行wordcount,成功!
如下:
Eclipse连接远程Hadoop集群&运行WordCount例程_第8张图片

你可能感兴趣的:(hadoop,eclipse)