【发布时间】:2023-03-28 09:50:01
【问题描述】:
我一直在尝试通过 php 中的 shell_exec() 在终端上执行 hadoop 命令,并尝试通过浏览器中的 url 运行该脚本。我一直面临一个重大问题:
当我尝试在终端中运行以下脚本时:
<?php
echo "Begin";
echo shell_exec('hadoop fs -ls /');
echo "End";
?>
它显示了所需的结果,即 HDFS 根目录上所有可用项目的列表。但是当尝试通过 url 运行以下脚本时,它会显示以下结果:
url: localhost/myscript.php
BeginEnd
没有别的!该脚本在终端中运行,但在浏览器中运行。
当我将脚本更改为:
<?php
echo "Begin";
echo shell_exec('ls /');
echo "End";
?>
在终端和浏览器中显示本地文件系统根目录中所有可用的项目。
我尝试更改命令以检查脚本是否正在运行。
<?php
echo "Begin";
echo shell_exec('hadoop fs -mkdir /test');
echo "End";
?>
当我使用 php myscript.php 通过终端运行它时,它会工作并在 HDFS 根目录中创建一个目录。但是当我尝试通过浏览器通过脚本中具有不同目录名称的 url 运行它时,它只是打印 BeginEnd 而不在 HDFS 根目录创建目录。
[更新]
当我访问 apache 日志文件时,它会在我加载 url localhost/myscript.php 后显示以下行:
[Thu Apr 07 10:04:07.187673 2016] [core:notice] [pid 1540] AH00094: Command line: '/usr/sbin/apache2'
sh: 1: hadoop: not found
当我尝试使用 Flask 通过 Python 执行相同的脚本时。 “mkdir”和“ls”这两个命令都能完美运行,并在浏览器中显示所需的结果。
注意:当我为所需的工作执行 python 脚本时,我不使用 apache,我使用 Flask 来托管自己的服务器。
应该是什么问题?
【问题讨论】:
-
您是否有权在
/中创建目录?如果你从终端运行mkdir /test会发生什么? -
是的,我拥有所有权限。当我尝试从终端执行 hadoop fs -mkdir /test 时,它只是在所需位置创建目录,即此处的 HDFS 根目录。
标签: php linux bash shell hadoop