从命令行在Hadoop中进行压缩编解码器检测

时间:2014-11-14 16:28:41

标签: hadoop

有没有简单的方法可以找到用于在Hadoop中压缩文件的编解码器?

我是否需要编写Java程序,或将文件添加到Hive以便我可以使用describe formatted table

2 个答案:

答案 0 :(得分:1)

如果您在询问mapreduce用于中间地图输出和/或最终输出的编解码器,您可以检查Hadoop的配置文件,通常位于<HADOOP_HOME>/etc/mapred-site.xml。但是,我不知道直接从命令行检查的方法。

中间地图输出压缩的设置应如下所示:

<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>

<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>

作业输出压缩的设置应如下所示:

<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>

<property>
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>BLOCK</value>
</property>

<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>

从这两个片段中,您可以看到我正在使用GZIP编解码器,并且我正在压缩中间地图输出以及最终输出。希望有所帮助!

答案 1 :(得分:1)

一种方法是在本地下载文件(使用hdfs dfs -get命令),然后按the procedure检测本地文件的压缩格式。

对于Hadoop压缩外部的文件,这应该很有效。对于在Hadoop中生成的文件,这仅适用于有限数量的情况,例如用Gzip压缩的文本文件。

在Hadoop中压缩的文件很可能被称为&#34;容器格式&#34;,例如Avro,Sequence Files,Parquet等。这意味着不是整个文件都被压缩,而是文件中只有数据块。你提到的hive describe formatted table命令确实可以帮助你找出底层文件的输入格式。

了解文件格式后,您应参考文件格式的文档/源代码,以获取有关编解码器检测的参考。一些文件格式甚至带有命令行工具来查看文件的元数据,该元数据显示压缩编解码器。一些例子:

Avro

hadoop jar /path/to/avro-tools.jar getmeta FILE_LOCATION_ON_HDFS --key 'avro.codec'

Parquet

hadoop jar /path/to/parquet-tools.jar meta FILE_LOCATION_ON_HDFS