【问题标题】:Run a python script via AWS Data Pipelines通过 AWS Data Pipelines 运行 python 脚本
【发布时间】:2018-04-21 07:15:05
【问题描述】:

我使用 AWS Data Pipelines 运行每晚 SQL 查询来填充表格以获取汇总统计信息。用户界面有点时髦,但最终我把它弄好了。

现在我想用 python 脚本做一些类似的事情。我每天早上在笔记本电脑上运行一个文件 (forecast_rev.py),但这当然意味着 必须每天打开笔记本电脑并启动它。当然,我可以安排一个管道来做同样的事情,这样就可以去度假而不在乎了。

在我的一生中,我找不到关于此的教程、AWS 文档或 StackOverflow!我什至不知道如何开始。有没有人愿意分享步骤的简单管道?

【问题讨论】:

标签: python amazon-data-pipeline


【解决方案1】:

我遇到过类似的情况,我是怎么过来的。
我将描述我是如何使用 Ec2Resource 做到的。如果您正在 EMRCluster 中寻找解决方案,请参考 @franklinsijo answer

步骤
1。将您的 Python 脚本存储在 s3 中。
2。创建一个 shell 脚本 (hello.sh)(如下所示)并将其存储到 s3
3。创建 Ec2Resource 节点和 ShellCommandActivity 节点并提供这些信息。

  • 在“Script Uri”中提供 shell 脚本 S3 url,并在 ShellCommandActivity 中将“stage”设置为 true。它应该在您的DefaultResource 上运行

这里是 shell 脚本 (hello.sh),它从 s3 下载你的 python 程序并存储在本地,安装 python 和所需的 3rd 方库,最后执行你的 python 文件。

hello.sh

echo 'Download python file to local temp'
aws s3 cp s3://path/to/python_file/hello_world.py /tmp/hello.py
# Install python(on CentOs )
sudo yum -y install python-pip
pip install <dependencies>
python /tmp/hello.py

我在尝试使用 bang line 时遇到了困难,所以不要将它们包括在这里。
如果aws cp 命令不起作用(awscli 较旧),这里有一个针对这种情况的快速解决方案。

  1. 按照上面的步骤 1-3 操作,同时创建一个s3DataNode
    I. 在 S3DataNode 的“文件路径”中提供您的 python s3 url。
    二、将 DataNode 作为“输入”提供给ShellCommandActivity
    三、在ShellCommandActivity 的“命令”字段中写入以下命令

命令

echo 'Install Python2'
sudo yum -y install python-pip
pip install <dependencies>
python ${INPUT1_STAGING_DIR}/hello_world.py

【讨论】:

  • 错误:请在组件上定义:'command' 或:'scriptUri':'ShellCommandActivityObj'
  • Provide shell script S3 url in "Script Uri"。请提供在第 3 步之后编写的详细信息。
  • 感谢您的想法,但我无法实现它。我最终以不同的方式在 ec2 实例上使用 cron 作业。不理想,但它似乎成立。
  • @JanmejayaNanda 我听从了你的指示。当我激活管道时,我不断在“类型”ShellCommandActivity 上跳过“状态”。作为测试,我让 python 在我的脚本中的数据库中创建另一个表,这不是。为什么我会收到此错误
【解决方案2】:
  1. 您需要将 Python 脚本存储在 S3 存储桶中
  2. 创建安装 python 和所有依赖项的 Shell 脚本,将 python 脚本从 S3 复制到本地存储并运行它。 Shell script example
  3. 将此 shell 脚本存储在 S3 上
  4. 使用ShellCommandActivity 启动您的shell 脚本。

您可以使用此模板作为示例: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-template-redshiftrdsfull.html 它使用存储在 s3 上的 python 脚本将 MySQL 模式转换为 RedShift 模式。

运行python程序的python shell脚本示例:

#!/bin/bash
curl -O https://s3.amazonaws.com/datapipeline-us-east-1/sample-scripts/mysql_to_redshift.py
python mysql_to_redshift.py

【讨论】:

  • 提供的 shell 脚本示例丢失。请将其嵌入答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多