1

我已经弄清楚了如何在引导步骤中使用 boto 安装 python 包(numpy 等),以及将文件从 S3 复制到我的 EC2 实例,仍然使用 boto。

我还没有弄清楚如何使用 boto 将 python 脚本(或任何文件)从 S3 存储桶分发到每个 EMR 实例。任何指针?

4

1 回答 1

4

如果您使用的是 boto,我建议您将所有 Python 文件打包成一个存档(.tar.gz 格式),然后使用 Hadoop/EMR 中的 cacheArchive 指令来访问它。

这就是我所做的:

  1. 将所有必要的 Python 文件放在一个子目录中,比如“required/”并在本地进行测试。
  2. 创建一个存档: cd required && tar czvf required.tgz *
  3. 将此存档上传到 S3: s3cmd put required.tgz s3://yourBucket/required.tgz
  4. 将此命令行选项添加到您的步骤:-cacheArchive s3://yourBucket/required.tgz#required

最后一步将确保包含 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!
于 2013-08-19T22:32:42.483 回答