在远程服务器中执行 Hadoop 作业并从 python webservice 获取结果

Execute a Hadoop Job in remote server and get its results from python webservice

我有一个打包在 jar 文件中的 Hadoop 作业,我可以使用命令行在服务器中执行它,并使用命令行将结果存储在服务器的 hdfs 中。

现在,我需要在 Python (Tornado) 中创建一个 Web 服务,它必须执行 Hadoop 作业并获取结果以将其呈现给用户。 Web 服务托管在其他服务器中。

我在谷歌上搜索了很多关于在 python 脚本中从服务器外部调用作业但不幸的是没有答案。

有人对此有解决方案吗?

谢谢

一个选项是在您的网络服务服务器中安装 hadoop 的二进制文件,使用与在您的 hadoop 集群中相同的配置。您将需要它才能与集群对话。你不需要在那里吃任何 hadoop 守护进程。至少配置HADOOP_HOME、HADOOP_CONFIG_DIR、HADOOP_LIBS并正确设置PATH环境变量。

您需要二进制文件,因为您将使用它们来提交作业和配置来告诉 hadoop 客户端集群在哪里(namenode 和 resourcemanager)。

然后在python中你可以使用子进程执行hadoop jar命令:https://docs.python.org/2/library/subprocess.html

您可以将作业配置为在作业完成时使用回调通知您的服务器:https://hadoopi.wordpress.com/2013/09/18/hadoop-get-a-callback-on-mapreduce-job-completion/

最后,您可以使用 WebHDFS (HDFS WEB API) 或使用一些 python HDFS 包来读取 HDFS 中的结果,例如:https://pypi.python.org/pypi/hdfs/