【发布时间】:2023-03-09 01:23:02
【问题描述】:
因此,在 hdfs 上的 /var/log/... 中有一堆日志文件,可以解压缩或使用 snappy 压缩。
如果它们不以.snappy 结尾,我想压缩它们,并用结尾命名它们。但我想用数据局部性来做这件事,最好把名字弄好。
我尝试了 hadoop 流方法。
HAD=/usr/lib/hadoop
$HAD/bin/hadoop jar $HAD/hadoop-streaming.jar \
-D mapred.output.compress=true \
-D madred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec \
-D mapred.reduce.tasks=0 \
-input /var/log/… -output /user/hadoop/working \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper
但这会提供一堆零件文件,并且似乎是逐行执行。出于某种原因,它也选择了放气。所以我得到像part-00000.deflate 这样的文件。输入就像app_123456789_0123_1。我本来会喜欢app_123456789_0123_1.snappy,但该部分甚至没有完全映射到整个文件,也不是活泼的编解码器。
FAQ says,您可以生成文件名的输入文件,然后对每个名称执行任务。虽然没有简单的快速压缩工具。另一个选项看起来会更好(尽管我不想构建一个罐子,我想我可以)但是它说名称不会被保留。我认为这对我没有帮助。
是否有某种方法可以做到这一点,而不涉及从 HDFS 获取文件、在本地处理文件并将其放回?哪个处理文件名?
【问题讨论】: