hdfs文件内部压缩

inkz8wg9  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(383)

我正在寻找一个默认的压缩hdfs。我看到了这一点,但我不想我的文件有gzip一样的扩展(事实上,他们应该是可访问的,如果他们没有压缩)实际上,我要找的是完全一样的选项“压缩内容,以节省磁盘空间”在windows上。此选项在内部压缩文件,但可以像访问普通文件一样访问它们。任何想法都会有帮助。
谢谢

vlf7wbxs

vlf7wbxs1#

在hdfs中存储压缩文件的标准方法是在将任何文件写入hdfs时使用默认的压缩参数。这在mapper库、sqoop、flume、hive、hbase目录等中可用。我在这里引用一些来自hadoop的例子。在这里,您不需要担心在hadoop中为了提高效率而在本地压缩文件。最好使用默认的hdfs文件格式选项来执行这项工作。这种类型的压缩将与hadoopMap程序处理顺利集成。
通过mapper库编写的作业
在mapper程序中创建writer时。这是定义。您将编写自己的Map器和缩减器,将文件写入hdfs,并将编解码器定义为writer方法的参数。

createWriter(Configuration conf, FSDataOutputStream out, Class keyClass, Class valClass, org.apache.hadoop.io.SequenceFile.CompressionType**compressionType**, CompressionCodec codec)

sqoop导入
下面的选项发送文件导入到hdfs的默认压缩参数

sqoop import --connect jdbc://mysql://yourconnection/rawdata --table loglines --target-dir /tmp/data/logs/ --compress

使用sqoop,您还可以使用选项指定特定的编解码器

sqoop --connect jdbc://mysql://yourconnection/rawdata --table loglines --target-dir /tmp/data/logs compression-codec org.apache.hadoop.io.compress.SnappyCodec

配置单元导入
在下面的示例中,您可以使用所需的选项将文件读入配置单元。这也是您在读取本地文件时可以设置的属性。

SET hive.exec.compress.output=true;
SET parquet.compression=**SNAPPY**; --this is the default actually
CREATE TABLE raw (line STRING) STORED AS PARQUET ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log' INTO TABLE raw;

在导入hdfs时,我没有提到所有数据压缩方法的示例。
hdfs cli没有(例如hdfs dfs-copyfromlocal)提供任何直接的压缩方法。这是我对使用hadoop cli的理解。

1l5u6lss

1l5u6lss2#

这在标准hdfs实现中不存在,您必须自己管理它。你必须管理自己的压缩。但是,如果解决这个问题对您来说足够重要的话,hadoop的专有实现mapr可以做到这一点。
在使用hadoop一段时间之后,这不再困扰我了。pig和mapreduce之类的自动处理压缩对我来说足够了。我知道这不是一个真正的答案,但我不能告诉你的问题,如果你只是恼火或你有一个真正的问题,这是造成。习惯添加 | gunzip 一切都没花多久。我举个例子:
hadoop fs -cat /my/file.gz | gunzip cat file.txt | gzip | hadoop fs -put - /my/file.txt.gz

wlp8pajw

wlp8pajw3#

当您使用压缩文件时,您需要考虑使其可拆分,即hadoop可以在运行map reduce时拆分此文件(如果文件不可拆分,则只能由单个map读取)
通常的解决方法是使用容器格式,例如序列文件、orc文件等,您可以在其中启用压缩。如果你使用的是简单文本文件(csv等)-twitter有一个lzo项目,但我没有亲自使用它

相关问题