博客專欄

        EEPW首頁 > 博客 > 實用干貨分享(5)- Hive存儲格式及壓縮算法測試比對分析

        實用干貨分享(5)- Hive存儲格式及壓縮算法測試比對分析

        發布人:中電金信人 時間:2022-06-05 來源:工程師 發布文章

         編輯

         

        Hive文件存儲格式及優缺點


        textfile

        默認的文件格式,行存儲。建表時不指定存儲格式即為textfile,導入數據時把數據文件拷貝至hdfs不進行處理。


        優點:最簡單的數據格式,便于和其他工具(pig, grep, sed, awk)共享數據、便于查看和編輯;加載較快。


        缺點:耗費存儲空間,I/O性能較低;Hive不進行數據切分合并,不能進行并行操作,查詢效率低。


        適用于小型查詢,查看具體數據內容的測試操作。


        sequencefile

        行存儲,含有鍵值對的二進制文件。


        優點:可壓縮、可分割,優化磁盤利用率和I/O;可并行操作數據,查詢效率高。


        缺點:存儲空間消耗最大;對于Hadoop生態系統之外的工具不適用,需要通過text文件轉化加載。


        rcfile

        行列式存儲。先將數據按行分塊,同一個record在一個塊上,避免讀一條記錄需要讀多個block;然后塊數據列式存儲。


        優點:可壓縮,高效的列存取;查詢效率較高。


        缺點:加載時性能消耗較大,需要通過text文件轉化加載;讀取全量數據性能低。


        orcfile

        編輯

        優化后的rcfile,行列式存儲。優缺點與rcfile類似,查詢效率最高。適用于Hive中大型的存儲、查詢。


        parquet

        編輯

        列式存儲,以二進制方式存儲。


        優點:可壓縮,高效的列存取;優化I/O。


        缺點:不支持upadate操作(數據寫入后不可更改),不支持ACID。


        Hive壓縮算法對比


        Hive壓縮算法包含6種,其中包含default、gzip、bzip2、lzo、lz4、snappy等壓縮格式,具體采用壓縮算法及比對詳細如下:


        編輯


        檢查Hadoop本地庫支持壓縮格式


        檢查命令:hadoop checknative

        hadoop checknative 命令檢查本地庫是否支持壓縮,若不支持,需要進行源碼編譯將native library編譯進Hadoop。


        native library checking:

        hadoop:  true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libhadoop.so.1.0.0

        zlib:     true /lib64/libz.so.1

        zstd:     true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libzstd.so.1

        snappy:  true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libsnappy.so.1

        lz4:     true revision:10301

        bzip2:   true /lib64/libbz2.so.1

        openssl:  true /lib64/libcrypto.so

        isa-l:   true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libisal.so.2


        Hive壓縮算法設置


        default壓縮格式

        編輯

        set hive.exec.compress.output=true; 

        set mapred.output.compress=true;

        set mapred.output.compression.codec=org.apache.hadoop.io.compress.defaultcodec;


        gzip壓縮格式

        編輯

        set hive.exec.compress.output=true; 

        set mapred.output.compress=true; 

        set mapred.output.compression.codec=org.apache.hadoop.io.compress.gzipcodec;


        bzip2壓縮格式

        編輯

        set hive.exec.compress.output=true; 

        set mapred.output.compress=true; 

        set mapred.output.compression.codec=org.apache.hadoop.io.compress.bzip2codec;


        lzo壓縮格式

        編輯

        set hive.exec.compress.output=true; 

        set mapred.output.compress=true; 

        set mapred.output.compression.codec=com.hadoop.compression.lzo.lzopcodec;


        lz4壓縮格式

        編輯

        set hive.exec.compress.output=true; 

        set mapred.output.compress=true; 

        set mapred.output.compression.codec= org.apache.hadoop.io.compress.lz4pcodec;


        snappy壓縮格式

        編輯

        set hive.exec.compress.output=true;

        set mapred.compress.map.output=true;

        set mapred.output.compress=true;

        set mapred.output.compression=org.apache.hadoop.io.compress.snappycodec;

        set mapred.output.compression.codec=org.apache.hadoop.io.compress.snappycodec;

        set io.compression.codecs=org.apache.hadoop.io.compress.snappycodec;


        壓縮算法測試及結果比對


        測試案例

        編輯

        測試一個Hive在不同的壓縮格式下進行對壓縮比、查詢效率、插入效率進行結果比對。


        測試環境

        編輯

        大數據平臺產品:CDH6.1

        節點個數:2+6

        內存:256G

        CPU:64核


        測試數據

        編輯

        表名稱:ods.o_cor_test

        源文件大小:3.8G  

        查詢速度:19.41S

        建表語句: 

        CREATE TABLE ODS.O_COR_TEST

        (  BOOK_ID                 STRING,

          EVENT_ID                 STRING,

          TRX_ID_IN                STRING,

          TRX_ID_OUT               STRING,

          LINE_ID                  STRING,

          HEADER_ID                STRING,

          BATCH_ID                 STRING,

          BOOK_TYPE                STRING,

          ASSET_TYPE               STRING,

          CATEGORY_ID              STRING,

          INTERFACE_CONTROL_ID_IN  STRING,

          INTERFACE_CONTROL_ID_OUT STRING,

          EFFECTIVE_DATE           DATE,

          INEFFECTIVE_DATE         DATE,

          DATA_DATE                DATE,

          ACCOUNTING_DATE          DATE,

          EVENT_TYPE               STRING,

          ACTIVE_CODE              STRING,

          AMORTIZED_COST           STRING,

          FAIR_COST                STRING,

          CONTACT_IN               STRING,

          CONTACT_OUT              STRING,

          COST                     STRING,

          INT                      STRING,

          INT_ADJUST               STRING,

          EVALUATION_ADJUST        STRING,

          FAIR_COST_ADJUST         STRING,

          CV_RESERVE               STRING,

          RV_RESERVE               STRING,

          HV_RESERVE               STRING,

          RA_COST                  STRING,

          LEASE_COST               STRING,

          LEASE_CV_RESERVE         STRING,

          LEASE_RV_RESERVE         STRING,

          LEASE_HV_RESERVE         STRING,

          INVESTMENT_INCOME        STRING,

          INVESTMENT_LOSS          STRING,

          FAIR_COST_GAIN_LOSS      STRING,

          V_LOSS                   STRING,

          OTHER_INCOME             STRING,

          ORIGINAL                 STRING,

          TRANS_INT_IN             STRING,

          TRANS_INT_OUT            STRING,

          INT_ACCRUED              STRING,

          EXPENSE                  STRING,

          RECOV_ORIGINAL           STRING,

          RECOV_TRANS_INT_IN       STRING,

          RECOV_TRANS_INT_OUT      STRING,

          RECOV_INT_ACCRUED        STRING,

          RECOV_EXPENSE            STRING,

          LOSS_ORIGINAL            STRING,

          LOSS_TRANS_INT_IN        STRING,

          LOSS_TRANS_INT_OUT       STRING,

          LOSS_INT_ACCRUED         STRING,

          LOSS_EXPENSE             STRING,

          LEASE_ORIGINAL           STRING,

          GUARANTEE1               STRING,

          GUARANTEE2               STRING,

          GUARANTEE3               STRING,

          BALANCE_OUT              STRING,

          LY_INVESTMENT_INCOME     STRING,

          LY_INVESTMENT_LOSS       STRING,

          LY_FAIR_COST_GAIN_LOSS   STRING,

          LY_V_LOSS                STRING,

          LAST_UPDATE_DATE         DATE,

          LAST_UPDATED_BY          STRING,

          CREATION_DATE            DATE,

          CREATED_BY               STRING,

          LAST_UPDATE_LOGIN        STRING,

          ATTRIBUTE_CATEGORY       STRING,

          ATTRIBUTE1               STRING,

          ATTRIBUTE2               STRING,

          ATTRIBUTE3               STRING,

          ATTRIBUTE4               STRING,

          ATTRIBUTE5               STRING,

          ATTRIBUTE6               STRING,

          ATTRIBUTE7               STRING,

          ATTRIBUTE8               STRING,

          ATTRIBUTE9               STRING,

          ATTRIBUTE10              STRING,

          INT_AMORTIZED            STRING,

          START_DATE               DATE,

          END_DATE                 DATE,

          DEL_FLAG                 STRING

        )



        測試方法


        本測試采用每次開啟Hive壓縮模式并設置Hive的壓縮算法,對于Hive每種文件存儲格式新建Hive表,并向不同分區插入數據,測試并記錄各種壓縮算法的壓縮效率、查詢速率、插入速度。


        注:每次設置終端退出后設置無效。


        查詢速率測試sql語句:

        select count(*) from ods.o_cor_test where etl_date=


        壓縮算法對比


        編輯

        編輯

        編輯

        編輯


        測試結果


        當應用場景多為查詢時,建議使用orcfile存儲格式且壓縮格式為default。


        當應用場景多為存儲時,建議使用orcfile存儲格式且壓縮格式為bzip2。


        當應用場景多為插入時,建議使用sequencefile存儲格式且壓縮格式為snappy。


        一般常用存儲格式為orcfile且壓縮格式為default。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 干貨

        技術專區

        關閉
        主站蜘蛛池模板: 荣成市| 南平市| 唐山市| 集安市| 彩票| 安丘市| 新和县| 云霄县| 政和县| 嘉鱼县| 紫金县| 贵阳市| 西安市| 望谟县| 仁布县| 彭山县| 嘉禾县| 麻栗坡县| 赤城县| 和田市| 汕尾市| 济宁市| 丽水市| 时尚| 揭东县| 上高县| 平乡县| 呈贡县| 虹口区| 贺兰县| 上饶县| 邢台县| 广饶县| 盐池县| 南昌县| 阳山县| 永德县| 巍山| 景东| 正镶白旗| 舒城县|