如何远程运行mapreduce作业

时间:2013-04-23 18:41:45

标签: java java-ee hadoop mapreduce hdfs

当我尝试远程运行map-reduce作业(字数计数示例)时遇到了一些问题。我搜索谷歌后仍然无法实现我的目标。我刚刚看到很少关于远程调用map-reduce作业的主题。 以下是问题:

  1. 首先,我遇到了许可问题:

    SEVERE: PriviledgedActionException as:[user]    cause:org.apache.hadoop.security.AccessControlException:
    org.apache.hadoop.security.AccessControlException: Permission denied: user=[user], access=WRITE, inode="mapred":root:supergroup:rwxr-xr-x
    

    似乎是对hdfs路径的拒绝权限。我通过设置dfs.permissions = true来关闭检查。是否有其他方法可以解决这个问题,但仍然可以继续检查。

  2. 然后我遇到一个异常,说我无法访问map-reduce应用程序jar。

    SEVERE: PriviledgedActionException as:[User] cause:java.io.FileNotFoundException: File /home/hduser/WordCount-1.0.jar does not exist.
    

    我的代码是:

    JobConf conf = new JobConf(WordCount.class);
    conf.setJobName("wordcount");
    conf.set("fs.default.name", "hdfs://10.97.1.91:54310");
    conf.set("mapred.job.tracker", "10.97.1.91:54311");
    conf.setJar("/home/hduser/WordCount-1.0.jar");
    ...
    JobClient.runJob(conf);
    

    看起来名称节点上的本地文件系统拒绝我访问jar文件。我怎样才能克服这个问题?我在stackoverflow中找到了a link。从链接中,不需要jar文件位置。但是name节点如何在不提供位置的情况下找到jar文件?

  3. 我在互联网上发现的教程中看到很少有远程执行作业的例子。是不是建议这样做?

1 个答案:

答案 0 :(得分:1)

对于第一个问题,看起来[user]对HDFS没有权限。首先,Hadoop使用whoami命令来确定用户是否提交作业以及命令的输出是否相同。解决这个问题的两种方法, a)确定具有HDFS权限的用户,例如root,并在提交作业之前添加以下行。    System.setProperty( “HADOOP_USER_NAME”, “根”); b)冒充。请查看以下链接           http://hadoop.apache.org/docs/stable/Secure_Impersonation.html