我已经弄清楚了如何在引导步骤中使用 boto 安装 python 包(numpy 等),以及将文件从 S3 复制到我的 EC2 实例,仍然使用 boto。
我还没有弄清楚如何使用 boto 将 python 脚本(或任何文件)从 S3 存储桶分发到每个 EMR 实例。任何指针?
我已经弄清楚了如何在引导步骤中使用 boto 安装 python 包(numpy 等),以及将文件从 S3 复制到我的 EC2 实例,仍然使用 boto。
我还没有弄清楚如何使用 boto 将 python 脚本(或任何文件)从 S3 存储桶分发到每个 EMR 实例。任何指针?
如果您使用的是 boto,我建议您将所有 Python 文件打包成一个存档(.tar.gz 格式),然后使用 Hadoop/EMR 中的 cacheArchive 指令来访问它。
这就是我所做的:
最后一步将确保包含 Python 代码的存档文件与本地开发机器中的目录格式相同。
要在 boto 中实际执行第 4 步,代码如下:
step = StreamingStep(name=jobName,
mapper='...',
reducer='...',
...
cache_archives=["s3://yourBucket/required.tgz#required"],
)
conn.add_jobflow_steps(jobID, [step])
为了让 Python 中的导入代码在您的映射器中正常工作,请确保像引用子目录一样引用它:
sys.path.append('./required')
import myCustomPythonClass
# Mapper: do something!