gpt4 book ai didi

bash - 如何使 AWS Data Pipeline ShellCommandActivity 脚本执行 python 文件

转载 作者:行者123 更新时间:2023-11-29 09:10:00 26 4
gpt4 key购买 nike

我正在使用 AWS Data Pipeline,它有一个 ShellCommandActivity,它将脚本 uri 设置为位于 s3 存储桶中的 bash 文件。 bash 文件将位于同一 s3 存储桶中的 python 脚本复制到 EmrCluster,然后脚本尝试执行该 python 脚本。

enter image description here

这是我的管道导出:

{
"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

这是测试.py

__author__ = 'MrRobot'
import re
import os
import sys
import boto3

print "We've entered the python file"

从 Stdout 日志中我得到:

download: s3://project/bin/scripts/Test.py to ./

从 Stdeer 日志中我得到:

python: can't open file 'Test.py': [Errno 2] No such file or directory

我也尝试用 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: line 1: author: command not found /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh: line 2: import: command not found /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh: line 3: import: command not found /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh: line 4: import: command not found /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh: line 5: import: command not found /mnt/taskRunner/output/tmp/df-0947490M9EHH2Y32694-59ed8ca814264f5d9e65b2d52ce78a53/ShellCommandActivityIdJiZP720170209T175934Attempt1_command.sh: line 7: print: command not found

编辑 2

将以下行添加到 Test.py

#!/usr/bin/env python

然后我收到以下错误:

error: line 6, in 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

这有效!!!!!!

最佳答案

配置 ShellCommandActivity
  • 将 python 文件的 S3 Uri 路径作为 Script Uri 传递。
  • 添加 shebang 行 #!/usr/bin/env python脚本。
  • 如果脚本中使用了任何非默认的 Python 库,请将它们安装到目标资源上。
    • 如果选择runsOn,将安装命令添加为bootstrap action用于 EMR 资源。
    • 如果选择了workerGroup,请在Worker group 上安装所有库在管道激活之前。

使用 pipeasy_install 安装 python 模块。

关于bash - 如何使 AWS Data Pipeline ShellCommandActivity 脚本执行 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com