如何远程运行mapreduce作业

gupuwyp2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(485)

我在尝试远程运行map reduce作业(单词计数示例)时遇到了一些问题。在谷歌上搜索之后,我仍然无法实现我的目标。我只看到很少关于远程调用map reduce作业的主题。问题如下:
首先,我遇到了权限问题:

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 . 有没有其他方法克服这个问题,但仍然保持检查。
然后我遇到了一个异常,说我不能访问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);

似乎name节点上的本地文件系统拒绝了我对jar文件的访问。我怎样才能克服这个问题?我在stackoverflow中找到一个链接。从链接中,不需要jar文件位置。但是name节点如何在不提供位置的情况下找到jar文件呢?
我在网上找到的教程中很少看到远程执行作业的例子。不建议这样做吗?

polhcujo

polhcujo1#

对于第一个问题,看起来[user]对hdfs没有权限。hadoop主要使用whoami命令来确定提交作业的用户和命令的输出是否相同。有两种方法可以解决这个问题:a)确定对hdfs有权限的用户,比如root,然后在提交作业之前添加以下行。system.setproperty(“hadoop\u user\u name”,“root”);b) 模仿。查看以下链接http://hadoop.apache.org/docs/stable/secure_impersonation.html

相关问题