1. 程式人生 > >Hive中資料壓縮(企業優化)

Hive中資料壓縮(企業優化)

二 、配置mapreduce和hive中使用snappy壓縮

        將snappy解壓,將Lib下的native複製到hadoop下的lib

  1、 實際就是對mapreduce過程中資料進行壓縮

2、hadoop支援的壓縮格式

3、在mapreduce中設定壓縮

4、在hive中設定壓縮

5、資料檔案格式

  資料儲存
* 按行儲存資料:TEXTFILE     
* 按列儲存資料:  RCFILE   ORC(儲存列數較多的表)    PARQUET(常用)

6、幾種儲存格式壓縮比較

6.1、建立Text表

    create table page_views(
   track_time string,
   url string,
   session_id string,
   referer string,
   ip string,
   end_user_id string,
   city_id string
    )
  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

  STORED AS TEXTFILE ;

載入資料到表中  load data local inpath '/home/beifeng/opt/datas/page_views.data' into table page_views ;

6.2、建立ORC表

create table page_views_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS orc ;

載入資料到orc表  insert into table page_views_orc select * from page_views ;

6.3、建立parquet表

create table page_views_parquet(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS PARQUET ;

載入資料到parquet表  insert into table page_views_parquet select * from page_views ;

檢視三種儲存格式的表的大小   dfs -du -h /user/hive/warehouse/page_views/ ;   相同資料量orc格式佔記憶體最小

在實際專案開發中資料儲存格式一般用orcfile格式和qarquet格式

                            資料壓縮格式一般用snappy格式

7、建立一張orc儲存格式表,並用snappy壓縮。預設的壓縮格式為zlib

create table page_views_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

STORED AS orc tblproperties ("orc.compress"="SNAPPY");

8、Hive企業使用優化

    8.1、使用 Limit 、where 、*、不走mapreduce

    8.2、大表拆分-建立子表:建立表時使用As select 

    8.3、外部表和分割槽表結合使用

            CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name    
            [(col_name data_type [COMMENT col_comment], ...)]
            [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

            [ROW FORMAT row_format] 

    8.4、資料:儲存格式和資料壓縮,在6中已講

    8.5、將8.2、8.3、8.4結合起來建立一張表,該表為一張表的子表,用snappy壓縮,表格式為parquet

            set parquet.compression=SNAPPY ;
            create table page_views_par_snappy
            ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
            STORED AS parquet

            AS select * from page_views ;

    8.6、hive高階優化——join優化Join優化官網      面試常問

    資料傾斜

    Common/Shuffle/Reduce Join

     連線發生的階段,發生在 Reduce Task
     大表對大表
     每個表的資料都是從檔案中讀取的

Map Join
  連線發生的階段,發生在 Map Task
  小表對大表
  * 大表的資料放從檔案中讀取 cid
  * 小表的資料記憶體中 id
  DistributedCache

    SMB Join

  Sort-Merge-BUCKET Join   桶的概念

 設定啟用自動優化

9、執行計劃

    EXPLAIN select * from emp ;      檢視一個語句的執行資訊


    EXPLAIN select deptno,avg(sal) avg_sal from emp group by deptno ;

    EXPLAIN EXTENDED select deptno,avg(sal) avg_sal from emp group by deptno ;   檢視一個語句的詳細執行資訊

10、Hive高階優化

        對屬性進行設定

                並行執行:設定job可以並行執行的個數。改為true

                JVM重用:預設每個mapreduce任務都會開啟新的JVM來執行程式,開啟JVM需要時間,可設定每個 JVM執行多個任務

                Reduce數目:map個數預設是根據塊大小分配。自己手動除錯Reduce個數,直到每個Reduce任務完成的時間都在一個時間範圍之內。適用每天都需要測的大量資料

                推測執行:屬於mapreduce的優化,當在一定標準內mapreduce任務沒有完成,自動開啟新的任務進行執行。在使用hive時應該都設定為false

建立分割槽表時一般為手動

        * bf_log_ip

load data path '' into table bf_log_ip partition(month='2015-09',day='20') ;

        瞭解以下自動進行分割槽

--------------------- 

作者:Yukaola 
來源:CSDN 
原文:https://blog.csdn.net/Yukaola/article/details/79763006 
版權宣告:本文為博主原創文章,轉載請附上博文連結!