我在S3上有一个很大的.tar.gz
文件,想要将它移动到EMR HDFS(或临时S3 bucker)并解压缩它,这样我就可以在里面读取一些较小的文件了。
我现在正在做的是有一个shell脚本将文件从S3下载到本地(带AWS CLI
)并且有scala / spark作业在未压缩的下载文件上运行以生成一些结果。
我想要做的是在一个Scala / Spark作业中执行所有作业,它应该将文件从S3移动到EMR(或另一个S3临时位置)解压缩并处理文件。
我知道我们有S3DistCp可以在S3和EMR之间移动文件但是如何在Scala代码中使用它(现在我只能在EMR shell中运行S3DistCp)?我们有没有使用该命令的库?
此外,如果我将S3DistCp与--outputCodec=None
一起使用,它只会解压缩gz文件,我该如何处理tar部分呢?
答案 0 :(得分:0)
您可以直接从EMR使用S3DistCp。 一种方法是SSH到主节点并在终端窗口中执行命令。
如果您希望创建在HDFS上具有某些数据的群集,则可以在创建群集时直接在AWS管理控制台中提交一个或多个步骤。在控制台添加步骤对话框中,以类似的方式填写字段:
Step type: Custom JAR
Name*: S3DistCp Step
JAR location: command-runner.jar
Arguments: s3-dist-cp --src s3://<your-bucket-name>/ --dest /data/input/<where-you-want-your-input> --outputCodec=None --targetSize 10
Action of failure: Continue
在您的情况下,我会在创建群集时添加另一个将解压缩gzip压缩文件的步骤(您可以在EMR Web控制台中执行此操作)。 阅读AWS EMR文档中的更多内容: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html
最后,您可以运行解压缩的文件。
干杯!