hadoop - 如何使用 Snappy 压缩将文件放入 HDFS

标签 hadoop compression hdfs snappy

我正在为一个客户工作,我应该将一些文件通过 Snappy 压缩放入 HDFS。我的问题是 snappy 编解码器未在 mapred-site.xmlhdfs-site.xml

中定义

不知何故,我必须优先使用 hdfs put 命令放置文件,并且它们应该被压缩。没有机会更改配置文件,因为它是生产机器并且其他人正在积极使用它。

另一个建议的解决方案是在不压缩的情况下将文件导入 HDFS,然后创建压缩的 hive 外部表并使用其源文件,同时删除未压缩的文件。但这还有很长的路要走,而且不能保证一定有效。

任何有关使用带有某种参数的hdfs put 来压缩文件的建议,我们将不胜感激。

最佳答案

我建议您编写 map-reduce 作业来压缩 hdfs 中的数据。我不知道是否有办法对 hadoop put 操作进行自动压缩,但假设它不存在。一种选择是放置已经压缩的文件:

snzip file.tar
hdfs dfs -put file.tar.sz /user/hduser/test/

另一种方法是在 mapreduce 作业中压缩它。作为一种选择,您可以使用 hadoop streaming jar 在 hdfs 中压缩文件:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \
-Dmapred.output.compress=true \
-Dmapred.compress.map.output=true \
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec \
-Dmapred.reduce.tasks=0 \
-input <input-path> \
-output $OUTPUT \

关于hadoop - 如何使用 Snappy 压缩将文件放入 HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742398/

相关文章:

hadoop - 将大型 XML 解析为 TSV

linux - 如何从本地拷贝hadoop examples jar到hadoop环境?

hadoop - 在没有本地文件系统帮助的情况下,如何将HDFS中的多个文件附加到HDFS中的单个文件?

hadoop - Mapreduce 处理同一目录中的多个文件

hadoop - 在 Hadoop 中运行 pyspark 时不是文件异常

javascript - 使用 IIS httpCompression 时压缩 javascript/css 文件的好处

c# - 调整 jpeg 图像的大小会影响它们的压缩吗?

android - 在android中使用ffmpeg将mp4转换为m4a

hadoop - 如何更改配置单元表/数据库的所有权

java - 使用Java以编程方式读取存储在HDFS中的文本文件的内容