我正在为一个客户工作,我应该将一些文件通过 Snappy 压缩放入 HDFS。我的问题是 snappy 编解码器未在 mapred-site.xml
或 hdfs-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/