hive新增壓縮

2021-06-23 06:44:08 字數 1195 閱讀 3387

hive在儲存資料時會對hdfs上的資料做對映,在mysql中僅僅儲存的是元資料資訊。所有的資料都是儲存在hdfs上的。

現在有個需求是需要對hive操作生成的資料改為壓縮資料儲存,提高hdfs的儲存空間利用率。這裡有幾點需要記錄的:

1.如果是本地檔案通過hadoop fs -put 操作上傳到hdfs的時候是不會對資料做任何處理的,即使hdfs-site.xml中配置了壓縮引數也是不生效的。為什麼?因為這個操作僅僅是乙個複製的過程。沒有呼叫mapreduce任務,如果想使資料壓縮就需要通過mapreduce任務來操作。

2.由1可知如果簡單的把文字資料拷貝到hive表的目錄下是不會出現壓縮後的資料的,即不會有壓縮操作。

3.hive配置map過程的壓縮和最終結果的壓縮可以在兩個地方:hadoop下的mapred-site.xml中或則hive的hive-site.xml中。如果是前者配置了所有的hadoop上的mapreduce任務都會做壓縮處理,如果是後者配置了則只有hive的sql語句所建立的mapreduce任務會做壓縮處理。所以如果不想所有的任務都做壓縮操作,可以在hive-site.xml中配置。

4.hive配置壓縮可以有兩種方式:其一是在hive的shell中 set 各種引數,這個是會話有效的。其二是就是在hive-site.xml中配置是全域性有效的。

5.工作中用到了sqoop直接把資料從資料庫中匯入到hive中,但是如果sqoop不指定壓縮,匯入到hdfs中的資料其實還是文字格式。所以需要指定引數 --compression-codec org.apache.hadoop.io.compress.bzip2codec 來保證匯入到hdfs中的資料是使用bzip2的壓縮方式(bzip2壓縮支援分隔)

6.下面展示下hive-site.xml中配置的引數列表

hive.exec.compress.intermediate //開啟hive壓縮

true

mapred.output.compress //開啟mapreduce的壓縮

true

mapred.output.compression.codec //指定mr輸出的壓縮格式

org.apache.hadoop.io.compress.bzip2codec

hive.exec.compress.output

true

mapred.compress.map.output //開啟map階段的壓縮,減少map資料的傳輸

true

給apache 新增壓縮傳輸

首先到apache原始碼目錄,找到mod deflate.c檔案 一般為httpd 2.4.10 modules filters mod deflate.c,進入上面找到的目錄執行下面的命令 usr local apache2 bin apxs i c a mod deflate.c 如果重啟的時候...

亂碼 使用者新增 壓縮 動態庫

修改字符集環境變數 echo lang 列印環境變數lang zh cn.gbk 環境變數lang的值 export lang c 修改環境變數lang的綴 只有root使用者有許可權新增使用者 新增使用者 useradd m 使用者名稱 設定密碼 passwd 使用者名稱 刪除使用者 userde...

ruby新增壓縮檔案,亂碼問題

打包的 很簡單 zip zipfile.open zip檔名.zip zip zipfile create do zip zip.add zip包中的顯示的檔名 或者檔案路徑 要打包的檔案 路徑 end 需要把檔名稱轉碼 zip zipfile.open zip檔名.zip zip zipfile ...