java - 无法从 PHP 执行 Hadoop Jar

标签 java php hadoop

我无法使用任何 PHP 函数(如 shell_exec)从 PHP 以伪分布式方式执行我的 Hadoop jar(如果您需要查看我的配置,请遵循本教程 my pseudo distributed settings) , exec , system .当我尝试执行 jar 时,我的浏览器在选项卡中显示了一个加载图标,但是当我检查 Hadoop 应用程序历史记录时,没有任何运行。更糟糕的是,没有出现错误消息。我已经检查了我的/var/log/apache2/error.log 并且什么都没有。

所以这是我运行代码的实验。

  • 在命令提示符下运行可以正常工作。
    /usr/local/hadoop-2.9.1/bin/hadoop jar path_to_my_jar_file.jar main_class_name args
    

  • 数字 2,3,4 是我输入的所有 php 代码。
  • 使用 shell_exec 运行没发生什么事
    var_dump(shell_exec("/usr/local/hadoop-2.9.1/bin/hadoop jar path_to_my_jar_file.jar main_class_name args"));
    
  • 使用 exec 运行我得到了array(0) { }
    $retval = array();
    exec("/usr/local/hadoop-2.9.1/bin/hadoop jar path_to_my_jar_file.jar main_class_name args",$retval);
    var_dump( $retval);
    
  • 使用 system 运行我得到了 1
    system("/usr/local/hadoop-2.9.1/bin/hadoop jar path_to_my_jar_file.jar main_class_name args",$retval);
    var_dump( $retval);
    

  • 我找到了 Running MapReduce job written in Java through my PHP web page问题,但我认为我没有权限问题,因为我可以执行此操作。
    shell_exec("/usr/local/hadoop-2.9.1/bin/hadoop fs -mkdir /test");
    

    我什至尝试更改 apache 用户,但它仍然无法正常工作。

    在 mapred-site.xml 中删除此属性会使 php exec工作,但我在资源管理器(localhost:8088)中看不到mapreduce进度,我也需要它。

    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>MapReduce framework name</description>
    </property>
    

    最佳答案

    如果有人遇到同样的问题,那是因为 Hadoop 配置。我用 this tutorial link 更改我的配置.之后你会得到 HDFS 权限问题,可以通过这个 how to add user in supergroup of hdfs in linux? [closed] 解决。 .

    关于java - 无法从 PHP 执行 Hadoop Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317152/

    相关文章:

    java - 如何使用 Spring Boot/slf4j 在日志文件的名称中包含日期?

    javascript - 从数据库获取数据到angular js

    javascript - 使用 PHP 数组创建 HTML 表

    PHP getimagesize() 混淆了宽度和高度

    java - 在 Hadoop 上运行 Java native 库

    java - 从可运行的 Jar 在 Java 中创建 UTF-8 文件

    java - 在Java中动态保存用户名和密码信息的好/安全方法是什么?

    sql - 如何将此字符串转换为时间戳

    java - hibernate组件注释表

    apache - 数据节点错误:NameSystem.getDatanode