【发布时间】:2017-06-27 19:21:36
【问题描述】:
我正在使用具有 ShellCommandActivity 的 AWS 数据管道,它将脚本 uri 设置为位于 s3 存储桶中的 bash 文件。 bash 文件将位于同一 s3 存储桶中的 python 脚本复制到 EmrCluster,然后该脚本尝试执行该 python 脚本。
这是我的管道导出:
{
"objects": [
{
"name": "DefaultResource1",
"id": "ResourceId_27dLM",
"amiVersion": "3.9.0",
"type": "EmrCluster",
"region": "us-east-1"
},
{
"failureAndRerunMode": "CASCADE",
"resourceRole": "DataPipelineDefaultResourceRole",
"role": "DataPipelineDefaultRole",
"pipelineLogUri": "s3://project/bin/scripts/logs/",
"scheduleType": "ONDEMAND",
"name": "Default",
"id": "Default"
},
{
"stage": "true",
"scriptUri": "s3://project/bin/scripts/RunPython.sh",
"name": "DefaultShellCommandActivity1",
"id": "ShellCommandActivityId_hA57k",
"runsOn": {
"ref": "ResourceId_27dLM"
},
"type": "ShellCommandActivity"
}
],
"parameters": []
}
这是 RunPython.sh:
#!/usr/bin/env bash
aws s3 cp s3://project/bin/scripts/Test.py ./
python ./Test.py
这是Test.py
__author__ = 'MrRobot'
import re
import os
import sys
import boto3
print "We've entered the python file"
从我得到的标准输出日志:
下载:s3://project/bin/scripts/Test.py 到./
我从 Stdeer 日志中得到:
python: 无法打开文件 'Test.py': [Errno 2] 没有这样的文件或目录
我也尝试用 python Test.py 替换 python ./Test.py,但我得到了相同的结果。
如何让我的 AWS Data Pipeline 执行我的 Test.py 脚本。
编辑
当我将 scriptUri 设置为 s3://project/bin/scripts/Test.py 时,我收到以下错误 :
/mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第 1 行:作者:找不到命令 /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第2行:导入:找不到命令 /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第3行:导入:找不到命令 /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第 4 行:导入:找不到命令 /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第 5 行:导入:找不到命令 /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh:第 7 行:打印:找不到命令
编辑 2
在 Test.py 中添加以下行
#!/usr/bin/env python
然后我收到以下错误:
错误:第 6 行,在 import boto3 ImportError: No module named boto3
使用 @franklinsijo 的建议,我在 EmrCluster 上创建了一个引导操作,其值如下:
s3://project/bin/scripts/BootstrapActions.sh
这是 BootstrapActions.sh
#!/usr/bin/env bash
sudo pip install boto3
成功了!!!!!!!
【问题讨论】:
-
为什么不在
ScriptUri中直接引用python脚本呢? -
感谢您的建议,我从 ref 收到以下错误。 ScriptUri 中的 python 脚本:s3://project/bin/scripts/Test.py:没有这样的文件或目录。我的 s3 链接是:s3.amazonaws.com/project/bin/scripts/Test.py
-
改了名字还是一样的错误。
-
并且您确定该文件存在于具有相同前缀的存储桶中?
-
我现在正在看。我应该在 ScriptUri 中添加 amazonaws.com 吗?
标签: bash amazon-web-services amazon-s3