TypechoJoeTheme

MetMan's Blog

网站页面

NetCDF文件压缩功能

MetMan博 主
2023-10-21
/
0 评论
/
169 阅读
/
417 个字
/
百度已收录
10/21
本文最后更新于 2023年10月21日,已超过 334天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

无损压缩zlib

netCDF4格式支持无损压缩算法DEFLATE压缩文件节省文件存储空间。DEFLATE算法使用Lempel-Ziv编码和Huffman编码组合。

无损压缩是相对于有损压缩说的,指压缩完的数据能够完全还原恢复。

netCDF4/HDF5使用zlib库提供的压缩算法,这也是netcdf4安装需要zlib库原因。gzip压缩工具也是用的zlib压缩算法。

压缩等级(即deflation level)从无压缩等级0到最大压缩等级9,数值越大,压缩率越高,但所需压缩时间也会越长。

按照NCO文档说法,从最低等级(dfl_lvl=1)到最高等级(dfl_lvl=9),文件大小差异一般小于10%。对于一般的气候数据集deflation算法能够压缩30-60%。

常用的两个nc4压缩命令:

  • nccopy (netcdf4库自带命令)
$ nccopy -4 -d N in.nc out.nc  # N-压缩等级,0-9
  • ncks (来自NCO工具包)
$ ncks -4 -L N in.nc out.nc   # N-压缩等级,0-9

数据测试

试验准备

以一个模式初始场数据为例,原始数据格式是netcdf 64bit-offset。

  • 通过nccopy转换为nc4无压缩格式
$ du -k test_64bit.nc 
33322660     test_64bit.nc #大概32GB大小
$ nccopy -4 test_64bit.nc test4.nc 
33322702     test4.nc     #nc4格式文件稍微大一些
  • 测试各等级压缩率和压缩时间

测试脚本:

#!/bin/bash

for lvl in `seq 1 9`
do
    echo $lvl
    time ncks -4 -L $lvl test4.nc test4_$lvl.nc
done

试验结果

压缩等级压缩后文件大小/KB压缩率%压缩时间/s
033322702
11632454248.99804
21620321848.63781
31610155348.32844
41608333848.27862
51601338748.06934
61595353447.881097
71592839247.801243
81589598647.702080
91588418247.673887

注:压缩率公式$$compress\_rate = \frac{压缩后文件大小}{压缩前文件大小}$$

结果验证

使用nccmp工具验证压缩前后结果是否相同,是否是无损压缩。

有损压缩

szip技术

使用szip库压缩netCDF4/HDF5文件。

以下结果来自Yepes-Arbós and Acosta(HPCM 2021)测试结果。SZ压缩率比gzip高很多,但压缩时间没有太大变化。

Packing技术

有损压缩技术Packing能够很容易达到50%压缩率。Packed数据再用deflation压缩能压缩到80%。

$ ncpdq in.nc out.nc    #标准packing ,~50%压缩率
$ ncpdq -4 -L 9 in.nc out.nc  #Deflated packing, ~80%压缩
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/14/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码