从命令行检测hadoop中的压缩编解码器

bq9c1y66  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(374)

有什么简单的方法可以找到hadoop中用来压缩文件的编解码器吗?
我是否需要编写一个java程序,或者将文件添加到hive以便使用它 describe formatted table ?

ds97pgxw

ds97pgxw1#

如果您询问mapreduce使用什么编解码器进行中间Map输出和/或最终输出,您可以查看hadoop的配置文件,通常位于 <HADOOP_HOME>/etc/mapred-site.xml . 但是,我不知道如何直接从命令行进行检查。
中间Map输出压缩的设置应如下所示:

<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编解码器,并且我正在压缩中间Map输出和最终输出。希望有帮助!

qij5mzcb

qij5mzcb2#

一种方法是在本地下载一个文件(使用 hdfs dfs -get 命令),然后执行检测本地文件压缩格式的过程。
对于在hadoop之外压缩的文件来说,这应该非常有效。对于hadoop中生成的文件,这只适用于有限数量的情况,例如用gzip压缩的文本文件。
hadoop中压缩的文件可能是所谓的“容器格式”,例如avro、sequence文件、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

相关问题