java - 如何远程运行 mapreduce 作业

标签 java jakarta-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 文件。我怎样才能克服这个问题?我找到了 a link在计算器中。从链接中,不需要 jar 文件位置。但是名称节点如何在不提供位置的情况下找到 jar 文件呢?

  3. 我在网上找到的教程中很少看到远程执行作业的例子。不建议这样做吗?

最佳答案

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

关于java - 如何远程运行 mapreduce 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176824/

相关文章:

java - 将 Realm 角色和资源角色与 Keycloak/Spring Security 一起使用

java - 将数据存储到 CodeNameOne 和 Swing GUI java 应用程序中的文件

java - 访客模式中的泛型矫枉过正

jakarta-ee - CDI:跨不同模块/bean文件使用拦截器

hadoop - 如何删除Docker容器中的HDFS数据

java - RxJava 单后台线程调度器

jakarta-ee - 生成keycloak用户设置页面URL

java - 通过 EJB/JPA(Hibernate) 仅传输一次对象

hadoop - 使用CDH(cloudera)有什么好处?

hadoop - 如何在 Hadoop 的运行时确定任务是 reducer 还是 combiner?