【问题标题】:Amazon Web Services - how to run a script dailyAmazon Web Services - 如何每天运行脚本
【发布时间】:2017-01-31 21:49:22
【问题描述】:

我有一个每天运行的 R 脚本,它从几个不同的网站抓取数据,然后将抓取的数据写入几个不同的 CSV 文件。每天,在特定时间(每天都在变化)我打开 RStudio,打开文件,然后运行脚本。我每次都检查它是否正确运行,然后将输出保存到 CSV 文件中。每天必须这样做通常很痛苦(每天大约需要 10-15 分钟)。如果我能以某种方式让这个脚本在预定义的特定时间自动运行,我会喜欢它,我的一个朋友说 AWS 能够做到这一点?

这是真的吗?如果是这样,AWS 的具体功能/方面是什么能够做到这一点,这样我可以更深入地研究它?

谢谢!

【问题讨论】:

    标签: r amazon-web-services


    【解决方案1】:

    考虑到这一点,我想到了两个选择:

    • 托管一个带有 R 的 EC2 实例,并配置一个 CRON-Job 以定期执行您的 R-Script。
      一种简单的入门方法:使用this AMI。
      为了执行脚本,R 提供了一个 CLI rscript。参见例如here 了解如何设置
    • Go Serverless:AWS Lambda 是一种托管微服务。目前 R 不受本机支持,但在官方 AWS 博客 here 上,他们提供了有关如何运行 R 的分步指南。基本上,您使用 Python 从 Python 执行 R rpy2-Package.
      完成此设置后,通过 CloudWatch Events(~托管 cron-job)安排功能。 Here 您可以找到有关如何执行此操作的分步指南。
      还有一件事:您说您的函数输出 CSV 文件:要正确保存它们,您需要将它们放入 AWS-S3 之类的文件存储中。您可以通过aws.s3-package 执行此操作。另一种选择是使用预先安装在 lambda 函数中的AWS SDK for python。你可以例如将 csv 文件写入/tmp/-dir 并在 R 脚本完成后通过 boto3's S3 upload_file function 将文件移动到 S3。

    恕我直言,第一个选项更容易设置,但第二个更强大。

    【讨论】:

      【解决方案2】:

      这有点违反直觉,但您可以使用带有事件规则的 Cloudwatch 定期运行。它可以运行 Lambda 或向 SNS 主题或 SQS 队列发送消息。您将面临的挑战是 Lambda 不支持 R,因此您必须让 Lambda 启动其他内容,或者在 SNS 主题或 SQS 队列上等待某些内容才能为您运行脚本。这不是一个完美的解决方案,因为可能有很多活动部件。

      【讨论】:

      • 有人想告诉我为什么这被否决了吗?
      • 我认为这很有帮助,谢谢。我将首先尝试 Floo0 的第一个托管 EC2 实例的建议,但你们俩也提出了这个建议,我可能会尝试。
      【解决方案3】:

      @stdunbar 关于使用 CloudWatch Events 触发 lambda 函数是正确的。您可以设置触发频率或使用 Cron。但正如他所提到的,Lambda 本身并不支持 R。

      这可能有助于您将 R 与 Lambda 一起使用:R Statistics ready to run in AWS Lambda and x86_64 Linux VMs

      【讨论】:

      • 不确定这是否会起作用,因为portableR 目前不支持curl...现在确定@Canovic 使用哪个刮板...
      • 我用 rselenium 和 rvest 来刮。第一个建议,这两个都可以使用 EC2 实例吗?
      【解决方案4】:

      如果您正在运行 Windows,更简单的解决方案之一是编写一个 .BAT 脚本来运行您的 R 脚本,然后使用 Window 的任务调度程序来根据需要运行。

      要从批处理文件中调用 R 脚本,请使用以下语法:

      C:\Program Files\R\R-3.2.4\bin\Rscript.exe" C:\rscripts\hello.R
      

      只需验证“RScript”应用程序的路径以及您的 R 代码是否正确。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 2021-06-13
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2021-08-17
        相关资源
        最近更新 更多