繁体   English   中英

s3distcp在单个命令中将文件和目录从HDFS复制到S3

[英]s3distcp copy files and directory from HDFS to S3 in a single command

我在HDFS中有以下2个文件和1个目录。

-rw-r--r-- 1 hadoop hadoop 11194859 2017-05-05 19:53 hdfs:///outputfiles/abc_output.txt
drwxr-xr-x-hadoop hadoop 0 2017-05-05 19:28 hdfs:/// outputfiles / sample_directory
-rw-r--r-- 1 hadoop hadoop 68507436 2017-05-05 19:55 hdfs:///outputfiles/sample_output.txt

我想以单个命令将gzip格式的abc_output.txt和sample_directory复制到HDFS的S3上。 我不希望这些文件在S3上合并。

我的S3存储桶应包含以下内容:abc_output.txt.gzip sample_directory.gzip

我尝试了以下方法:

s3-dist-cp --s3Endpoint = s3.amazonaws.com --src = hdfs:/// outputfiles / --dest = s3:// bucket-name / outputfiles / --outputCodec = gzip

但这会将所有文件和文件夹从源复制到目标。

通过在运行时在EMR上引用Deduce HDFS路径 ,我还尝试了以下命令:

s3-dist-cp --s3Endpoint = s3.amazonaws.com --src = hdfs:/// outputfiles / --dest = s3:// bucket-name / outputfiles / --srcPattern =。* abc_output.txt。 sample_directory。 --outputCodec = gzip,但这失败了。

S3DistCp支持两种有关如何压缩从源到目标的复制数据的选项。 --srcPattern --group通过http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

该文档证明了可以做什么。 其余的..无法完成。

使用srcPattern,可以编写与源文件匹配的RegEx。 s3distcp可以简单地将那些匹配的文件分别复制到目标位置。

例如:-- --srcPattern='.*(txt|sample_folder).*'将复制所有扩展名为txt文件,并在目标位置创建匹配目录,以将名称为sample_folder源文件夹内的文件复制到目标位置

http://regexr.com/3ftn0 (您可以根据需要设计ReGex。)

如果除了--srcPattern之外还应用--outputCodec=gzip选项,则将单独压缩匹配的单个文件。 它们不会整体压缩。 如果需要将所有匹配的文件压缩到一个文件中(其内容未连接在一起),则可以在输出上分别运行s3-dist-cp和压缩命令。

如果要将文件abc_output.txt和sample_directory中的所有文件连接成一个文件并以gzip格式压缩,则需要使用--groupBy。 为了使用groupby,匹配的正则表达式模式应该相似,您需要在正则表达式中带有一个括号,以指示应如何对文件进行分组,并将所有与括号语句匹配的项目组合到一个输出文件中。

例如 :

--groupBy='.*(file|noname).*[0-9].*' --outputCodec=gz 

http://regexr.com/3ftn9上的文件将连接所有匹配的文件内容并创建一个.gz文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM