Uno*_*Uno 5 storage hadoop hdfs
HDFS如何存储数据?
我想以压缩方式存储大文件.
例如:我有1.5 GB的文件,默认复制因子为3.
它需要(1.5)*3 = 4.5 GB的空间.
我相信目前没有隐式压缩数据.
是否有一种压缩文件并将其存储在HDFS中以节省磁盘空间的技术?
HDFS将任何文件存储在许多"块"中.块大小可以基于每个文件进行配置,但具有默认值(如64/128/256 MB)
因此,如果文件为1.5 GB,块大小为128 MB,则hadoop会将文件分解为~12个块(12 x 128 MB~ = 1.5 GB).每个块也可以复制可配置的次数.
如果您的数据压缩得很好(如文本文件),那么您可以压缩文件并将压缩文件存储在HDFS中 - 同样适用于上述情况,因此如果1.5GB文件压缩到500MB,那么这将被存储为4个块.
但是,使用压缩时要考虑的一件事是压缩方法是否支持拆分文件 - 也就是说你可以随机寻找文件中的位置并恢复压缩流(例如GZIp不支持拆分,BZip2会这样做).
即使该方法不支持拆分,hadoop仍会将文件存储在多个块中,但是您将失去"数据局部性"的一些好处,因为块很可能会在您的群集中传播.
在地图缩减代码中,Hadoop默认安装了许多压缩编解码器,并且会自动识别某些文件扩展名(例如GZip文件的.gz),使您不必担心输入/输出是否需要压缩.
希望这是有道理的
编辑一些额外的信息以回应评论:
从Map Reduce作业输出写入HDFS时,请参阅FileOutputFormat的API,特别是以下方法:
将文件上传到HDFS时,是的,它们应该预先压缩,并且具有该压缩类型的相关文件扩展名(开箱即用,hadoop支持扩展名为.gz的gzip,因此file.txt.gz表示gzip压缩文件)
| 归档时间: |
|
| 查看次数: |
7194 次 |
| 最近记录: |