我有一个打包在jar文件中的hadoop作业,可以使用命令行在服务器中执行,并使用命令行将结果存储在服务器的hdfs中。现在,我需要用python(tornado)创建一个web服务,该服务必须执行hadoop作业并获得结果以将它们呈现给用户。web服务托管在其他服务器上。我用python脚本搜索了很多关于从服务器外部调用作业的信息,但不幸的是没有答案。有人能解决这个问题吗?谢谢
v1uwarro1#
一种选择是在webservice服务器中使用与hadoop集群中相同的配置安装hadoop的二进制文件。你需要这样才能和集群对话。你不需要在那里吃hadoop执事。至少配置hadoop\u home、hadoop\u config\u dir、hadoop\u libs并正确设置path环境变量。您需要二进制文件,因为您将使用它们提交作业和配置,以告诉hadoop客户机集群(namenode和resourcemanager)在哪里。然后在python中,可以使用subprocess执行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/
1条答案
按热度按时间v1uwarro1#
一种选择是在webservice服务器中使用与hadoop集群中相同的配置安装hadoop的二进制文件。你需要这样才能和集群对话。你不需要在那里吃hadoop执事。至少配置hadoop\u home、hadoop\u config\u dir、hadoop\u libs并正确设置path环境变量。
您需要二进制文件,因为您将使用它们提交作业和配置,以告诉hadoop客户机集群(namenode和resourcemanager)在哪里。
然后在python中,可以使用subprocess执行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/