• Hbase压缩之ZSTD


    ZSTD介绍

    zstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。
    zstd 是一种快速压缩算法,提供了很高的压缩比。它还为小数据提供了一种特殊的模式,称为字典压缩。
    zstd还有一个特别的功能,支持以训练方式生成字典文件,相比传统压缩方式能大大的提高小数据包的压缩率。
    在过去的两年里,Linux内核、HTTP协议、以及一系列的大数据工具(包括Hadoop 3.0.0,HBase 2.0.0,Spark 2.3.0,Kafka 2.1.0)等都已经加入了对zstd的支持。
    可以预见,zstd将是未来几年里会被广泛关注和应用的压缩算法

    下面是官网给出的性能对比图
    在这里插入图片描述

    另外。提供–fast参数 可以提供更快的压缩和解压缩速度,以换取压缩比的一些损失

    官网地址


    ZSTD安装

    方式1

    在Hadoop3中增加了Zstd压缩本地库,需要依赖facebook的Zstd库。编译Hadoop时开启Zstd本地库编译的步骤如下:

    1. 下载编译并安装Zstd依赖库
    wget https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz
    
    tar -xzf zstd-1.4.4.tar.gz
    
    cd zstd-1.4.4
    
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 编译Hadoop3时默认是不开启的,需要在maven参数中设置相关开启参数。
    mvn clean package -Dzstd.lib=/usr/local/lib   -Dbundle.zstd=true
    
    • 1

    方式2

    1. 下载rpm包
    https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/
    
    • 1
    1. install
    sudo rpm -i libzstd-1.5.2-1.el7.x86_64.rpm
    
    • 1

    集成到hadoop、hbase

    1. 查看hadoop支持压缩算法
    hadoop checknative
    
    • 1

    在这里插入图片描述

    1. 查看hbase支持压缩算法
    cd $HBASE_HOME/bin
    hbase --config ~/conf_hbase org.apache.hadoop.util.NativeLibraryChecker
    
    • 1
    • 2

    在这里插入图片描述


    测试zstd

    更改表压缩方式

    0.
    disable 'TEST:FAST_DIFF_ZSTD'
    
    1.
    alter 'TEST:FAST_DIFF_ZSTD', NAME => 'i', COMPRESSION => 'ZSTD'
    
    2.
    Updating all regions with the new schema...
    All regions updated.
    Done.
    Took 1.1960 seconds
    
    3. desc 'TEST:FAST_DIFF_ZSTD'
    DATA_BLOCK_ENCODING => 'FAST_DIFF', COMPRESSION => 'SNAPPY
    
    4.enable 'TEST:FAST_DIFF_ZSTD'
    
    5. major_compact 'TEST:FAST_DIFF_ZSTD'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    读写测试

    1. 写测试:
      在这里插入图片描述
    2. 读测试: 在这里插入图片描述

    各个压缩方式对比

    在这里插入图片描述

    问题

    1. 可能安装上也不支持
    ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Compression algorithm 'zstd' previously failed test. Set hbase.table.sanity.checks to false at conf or table descriptor if you want to bypass sanity checks
    	at org.apache.hadoop.hbase.util.TableDescriptorChecker.warnOrThrowExceptionForFailure(TableDescriptorChecker.java:307)
    	at org.apache.hadoop.hbase.util.TableDescriptorChecker.sanityCheck(TableDescriptorChecker.java:121)
    	at org.apache.hadoop.hbase.master.HMaster$12.run(HMaster.java:2502)
    	at org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134)
    	at org.apache.hadoop.hbase.master.HMaster.modifyTable(HMaster.java:2496)
    	at org.apache.hadoop.hbase.master.HMaster.modifyTable(HMaster.java:2532)
    	at org.apache.hadoop.hbase.master.MasterRpcServices.modifyTable(MasterRpcServices.java:1414)
    	at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
    	at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:393)
    	at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
    	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338)
    	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318)
    Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: Compression algorithm 'zstd' previously failed test.
    	at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:92)
    	at org.apache.hadoop.hbase.util.TableDescriptorChecker.checkCompression(TableDescriptorChecker.java:285)
    	at org.apache.hadoop.hbase.util.TableDescriptorChecker.sanityCheck(TableDescriptorChecker.java:119)
    	... 10 more
    
    For usage try 'help "alter"'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1. 解决方案
    配置hbase-site.xml参数:
    
    <property>  
        <name>hbase.table.sanity.checks</name>  
        <value>false</value>  
    </property>  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 重启hbase
  • 相关阅读:
    SocketTool V4.0 使用说明
    Severe Tire Damage:世界上第一个在互联网上直播的摇滚乐队
    python 字符串(str)、列表(list)、元组(tuple)、字典(dict)
    局域网监控软件如何防止数据泄密
    yolov8_track追踪加分割(yolo目标检测+追踪+分割)
    harvard dataverse数据公开上传网站-数据库repository
    关于 Spring Boot 自动装配你知道多少?
    【leetcode top100】两数相加。无重复字符的最长子串,盛水最多的容器,三数之和
    【八大经典排序算法】冒泡排序
    TypeError: Argument ‘angle‘ can not be treated as a double
  • 原文地址:https://blog.csdn.net/Lzx116/article/details/126281780