现在的位置: 首页 > 综合 > 正文

【Hadoop】windows下链接远程ubuntu开发hadoop

2013年03月31日 ⁄ 综合 ⁄ 共 3104字 ⁄ 字号 评论关闭

原来设置的是单机的一个节点的window本地的hadoop。当时跑成功了之后,就再也没进行开发测试。今天对其再使用,不知怎么eclipse链接一直不成功。后来索性在别人搭建的ubuntu上分布式的hadoop上进行测试开发。一步步如下所示:

首先进行对链接的设置:

其中Map/Reduce Master为mapred-site.xm中的配置,DFS Master为core-site.xml中的默认配置。对于截图底部的User Name是我部署hadoop的NameNode节点的那台虚拟机的用户。你使用那个用户部署的hadoop就添那个用户名。

然后开始运行,使用的是hadoop所带的WordCount.java实例,图截图所示:

而我的hdfs上的文件目录如图所示:

可以看出,在点击运行的时候输入的参数和hdfs上的文件路径必须是一样的,否则就会出错。而开始的时候user/root下不能有output文件,否则会报错,File exist。。。

下面是我运行遇到的错误:

其实这些错误都能在网上找到。不过一般都是一个人碰到一个错误,但是不知为何,我从头开始全部碰到了。

第一个错误,对文件无权限:

12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 

12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging
to 0700 

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700

这是window下运行jar不对,hadoop在运行的时候会对文件系统进行检查。如果不满足的话就会抛出异常。解决办法就是对hadoop-core进行重新编译,修改其中的/hadoop-X-X-X/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue,把方法体全部注释掉即可。然后重新编译hadoop-core.1.X.X.jar。其实这个版本要求并不是很严格,我hadoop是1.0.3,但是我使用是别人重新编译的hadoop-core.1.0.0.jar,依旧可以。因为每个版本的升级,不一定都会升级所有类,所以版本有点不同步,也有可能使用。下载地址请点击点击下载

第二个错误Input path does not exist,你的路径找不到 :

security.UserGroupInformation: PriviledgedActionException as:Administrator cause:org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist:

其实这个错误很二的,分下面两种情况,每个都很二:

1:你是否把你的文件上传到hdfs上去提前,如果不能,则必须提前上传上去,上传的路径必须和上面eclipse中输入的参数是相同的;

2:你是否在run as 的时候是run on hadoop而不是按照普通的java程序运行方式。

在这里补充一点错误

就是当运行的时候,运行结果的输出路径必须是不存在。因为在提交job的时候有一个步骤是要判断你的设置中的输出路径是否存在,如果存在的话就要抛出异样。所以每次在跑你的程序的时候必须要把输出路径删除,让程序自己重新建立。或者你在你的程序代码中判断一下是否存在当前路径,如果存在的话就删除。

再补充一点错误

在本地eclipse连接hdfs一直无法连接。这是你配置文件的错误,在core-site.xml中有配置<name>fs.default.name</name>在这里的value配置不要配置成localhost或者127.0.0.1,要真的配置成本机ip地址

<name>fs.default.name</name>
 <value>hdfs://192.168.124.102:9000</value>

继续补充

windouw下连接远程虚拟机进行开发hadoop程序的时候在提交job的时候是以你本机windouw下操作系统的用户名体积的,但是当对虚拟机上的hadoop系统进行读写操作的时候需要相应的权限,这个时候就会导致权限问题的出现Permission denied: user=(windouw下用户名),这时候解决可以在hdfs-site.xml中配置:<property>
    <name>dfs.permissions</name>
            <value>false</value>

对权限检查进行暂时的关闭

第三个错误 压缩编码错误:

是因为在初始化配置中,声明了压缩格式中存在SnappyCodec格式,但是我hadoop所在主机没有安装这种格式的压缩工具,所以在初始化整个配置的时候导致找不到该压缩格式的具体实现,抛出异常。

两种方法,在hadoop所在主机安装并配置好,然后再重启hadoop。Snappy与LZO压缩的安装方式请点击。另外还要查看,hadoop在eclipse端的Edit Hadoop Location中的高级配置中是否有该编码格式。

而安装SnappyCodec之后配置如下,记得要重启hadoop:

. Add the following key/value pairs into core-site.xml

  <property>
    <name>io.compression.codecs</name>
    <value>
      org.apache.hadoop.io.compress.GzipCodec,
      org.apache.hadoop.io.compress.DefaultCodec,
      org.apache.hadoop.io.compress.BZip2Codec,
      org.apache.hadoop.io.compress.SnappyCodec
    </value>
  </property>

另一种是把该压缩方法给注释掉,这样初始化的时候就不会去寻找该压缩方式的,没有SnappyCodec编码格式的。

另外你还可能遇到堆栈溢出,我当时跑的是遇到了,后来设置了-Xmx1024m堆栈参数,可以跑成功了。

详细配置有个不错的教程,可以去看看:

http://www.cnblogs.com/shitouer/archive/2012/05/29/2522860.html

而如果有多个job想接连顺序执行的话,可以利用包org.apache.hadoop.mapred.jobcontrol.JobControl。该类下面有可以添加工作链

csdn的这个编辑器是实在不相信

抱歉!评论已关闭.