【问题标题】:How do I copy a file from S3 to Amazon EMR in Data Pipeline after EMR is provisioned?预置 EMR 后,如何将文件从 S3 复制到 Data Pipeline 中的 Amazon EMR?
【发布时间】:2015-12-31 11:31:31
【问题描述】:
我正在 AWS 中创建数据管道来运行 Pig 任务。但我的 Pig 任务需要 EMR 中的其他文件。在创建集群之后和运行任务的 pig 之前,如何告诉 Data Pipeline 将文件复制到 EMR?
我只需要运行这两个命令。
hdfs dfs -mkdir /somefolder
hdfs dfs -put somefile_from_s3 /somefoler/
【问题讨论】:
标签:
hadoop
amazon-web-services
amazon-s3
amazon-emr
【解决方案1】:
如果您可以选择修改 Pig 脚本,则可以运行 mkdir 并将命令放在脚本顶部 (https://pig.apache.org/docs/r0.9.1/cmds.html)。
否则,您可以使用在 EmrCluster 上运行的 ShellCommandActivity 并在 PigActivity 运行之前执行这些命令。此选项有一个缺点,因为如果 ShellCommandActivity 成功,但 PigActivity 失败,则只需再次重新运行 PigActivity 不会获得运行活动所需的文件,这意味着必须重新运行整个管道。所以,我会推荐第一个解决方案。
无论哪种方式,我都很乐意为您制作工作样本。请让我知道您希望看到哪种解决方案。
谢谢。
【解决方案2】:
您可以在创建集群时添加步骤,如 here 所示
您可以配置 hive 或 pig 脚本来执行复制。您也可以使用命令行添加步骤。
【解决方案3】:
另外,您是否尝试过直接使用“s3://”?在大多数情况下,您可以通过 's3://' 方案将 s3 用作本机 Hadoop 文件系统。这避免了将数据从 S3 复制到 HDFS 的需要。
--
-- import logs and break into tuples
--
raw_logs = -- load the weblogs into a sequence of one element tuples
LOAD 's3://elasticmapreduce/samples/pig-apache/input' USING TextLoader AS (line:chararray);