我正在EMR上运行Hive,需要将一些文件复制到所有EMR实例中。
据我了解,一种方法是只需将文件复制到每个节点的本地文件系统,另一种方法是将文件复制到HDFS,但我还没有找到从S3直接复制到HDFS的简单方法。
那么,最好的做法是什么?
现在,亚马逊本身已经实现了一个基于distcp的封装器,名为:s3distcp。
S3DistCp是对DistCp的扩展,专门针对亚马逊网络服务(AWS),特别是Amazon Simple Storage Service(Amazon S3)。您可以通过在作业流程中添加S3DistCp步骤来使用S3DistCp。使用S3DistCp,您可以高效地将大量数据从Amazon S3复制到HDFS,以便后续步骤在您的Amazon Elastic MapReduce(Amazon EMR)作业流程中处理。您还可以使用S3DistCp在Amazon S3存储桶之间或从HDFS到Amazon S3复制数据
示例:从Amazon S3复制日志文件到HDFS
以下示例演示了如何将存储在Amazon S3存储桶中的日志文件复制到HDFS。在此示例中,使用--srcPattern选项限制要复制的数据为守护程序日志。
elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \
s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \
--args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,\
--dest,hdfs:///output,\
--srcPattern,.*daemons.*-hadoop-.*'