Hadoop-1.0.4+Eclipse+Windows 远程连接

27 May 2013

Hadoop 部署在 Linux 下,在 Windows 下用 Eclipse 远程连接 Hadoop 进行开发

平台环境

目录结构

  • eclipse目录 F:\eclipse
  • eclipse工程目录 F:\workspace
  • hadoop安装目录 F:\workspace\hadoop-1.0.4

Step1 配置 Map/Reduce Locations

  1. 设置 Host 为要连接服务器的 IP 地址
  2. 设置 Advanced parameters
    • 修改 hadoop.tmp.dir 为本地 tmp 目录,"/" 为 hadoop 安装目录的盘符(比如 /hadooptmp-1.0.4 即 F:\hadooptemp-1.0.4)
    • 修改 dfs.replication 为连接服务器中 hdfs-site.xml 配置的值

切换到 Map/Reduce 视图,查看是否已成功连接上服务器^^

当运行示例 WordCount 时会遇到两个问题

Problem1

org.apache.hadoop.security.AccessControlException: Permission denied: user=Chxt, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x

因为 Eclipse 使用 hadoop 插件提交作业时,会默认以 DrWho 身份去将作业写入 hdfs 文件系统中,对应 Windows 下即登录用户(此处我的登录用户为 Chxt), 根据 rwxr-xr-x 知 DrWho 用户对 hadoop 目录并没有写入权限,所以导致异常的发生。

解决方案1: 到服务器上修改 hadoop 的配置文件 conf/hdfs-core.xml,设置 dfs.permissions 为 false

<property>
    <name>dfs.permissions</name>
    <value>false</value>
    <description>
      If "true", enable permission checking in HDFS.
      If "false", permission checking is turned off,
      but all other behavior is unchanged.
      Switching from one parameter value to the other does not change the mode,
      owner or group of files or directories.
    </description>
</property>

解决方案2: 修改 hadoop 目录的权限,执行 hadoop fs -chmod 777 /user/hadoop

重启 Hadoop 服务^^

Problem2

13/05/27 17:02:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/05/27 17:02:30 ERROR security.UserGroupInformation: PriviledgedActionException as:Chxt cause:java.io.IOException: Failed to set permissions of path: \home\hadoop\hadooptmp-1.0.4\mapred\staging\Chxt-4140978\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \home\hadoop\hadooptmp-1.0.4\mapred\staging\Chxt-4140978\.staging to 0700

这个是 Windows 下文件权限问题,在 Linux 下可以正常运行,不存在这样的问题。

解决方案: 注释掉 hadoop-1.0.4/src/core/org/apache/hadoop/fs/FileUtil.java 里面 checkReturnValue 函数的内容(有些粗暴,在 Window 下可以不用检查)。重新编译 Hadoop 源码,重命名 hadoop-core-1.0.4-SNAPSHOT.jar 替换掉 hadoop-1.0.4 根目录下的 hadoop-core-1.0.4.jar 即可。

至此可以正常远程连接 hadoop 服务器并运行 Map/Reduce 程序了^^

>>Hadoop学习笔记(九):如何在windows上使用eclipse远程连接hadoop进行程序开发

Fork me on GitHub