在Pig中使用Python UDF时,如何让Hadoop查找导入的Python模块?
我正在使用Pig(0.9.1)和用Python编写的UDF。Python脚本从标准Python库导入模块。我已经能够在本地模式下成功运行调用Python UDF的Pig脚本,但是当我在集群上运行时,Pig生成的Hadoop作业似乎无法找到导入的模块。需要做什么 例如:在Pig中使用Python UDF时,如何让Hadoop查找导入的Python模块?,python,hadoop,jython,apache-pig,Python,Hadoop,Jython,Apache Pig,我正在使用Pig(0.9.1)和用Python编写的UDF。Python脚本从标准Python库导入模块。我已经能够在本地模式下成功运行调用Python UDF的Pig脚本,但是当我在集群上运行时,Pig生成的Hadoop作业似乎无法找到导入的模块。需要做什么 例如: 是否需要在每个任务跟踪器节点上安装python(或jython) python(或jython)模块是否需要安装在每个任务跟踪器节点上 任务跟踪器节点是否需要知道如何查找模块 如果是,您如何指定路径(通过环境变量-如何为任务跟踪
- 是否需要在每个任务跟踪器节点上安装python(或jython)
- python(或jython)模块是否需要安装在每个任务跟踪器节点上
- 任务跟踪器节点是否需要知道如何查找模块
- 如果是,您如何指定路径(通过环境变量-如何为任务跟踪器指定路径)
希望这些都能澄清问题。我在使用Hadoop 1.2.1和Pig 0.11.1时遇到了同样的问题,并从中找到了一个解决方法,那就是在我的Pig参数中添加
-Dmapred.child.env=“JYTHONPATH=job.jar/Lib”
。例如:
pig -Dmapred.child.env="JYTHONPATH=job.jar/Lib" script.pig
添加
pig -Dmapred.child.env="JYTHONPATH=job.jar/Lib" script.pig
工作。请注意,您还可以将以下行添加到python脚本中:
import sys
sys.path.append('./Lib')
还请注意,您仍然会收到大量“未找到模块”警告,但修复程序仍然有效。尽管模块最终被发现,但您仍然收到这些警告,这让我感到难以置信的困惑,我总是在hadoop作业正确返回之前杀死它,认为这是修复程序无法实际工作的症状…@dksahuji:Pig启动map reduce作业时,它将所需的所有类和文件放入一个job.jar文件中,该文件被发送到所有MR任务。但通常情况下,它与jobxxxxxx.jar类似,其中xxxxx发生了更改。单个pig脚本启动多个jobxxxxx.jar文件。