1. 程式人生 > >hive的基礎知識以及引數調優

hive的基礎知識以及引數調優

hive的基礎知識

資料型別

基本資料型別

資料型別 長度
tinyint 1byte
smalint 2byte
int 4byte
bigint 8byte
boolean true 或者 false
float 單精度浮點型
double 雙精度浮點型
string 字元序列 用單引號或者雙引號
timestamp 整數,浮點數,字串
binary 位元組陣列

集合資料型別

資料型別 描述
struct struct(first string,last string)第一個元素可以用.first來引用
map 相當於Java的map 可以用key來引用值 map(‘first’,’xx’,’last’, ‘zz’)第一個值可以用map[‘first’]引用
array 相當於Java的陣列 array(‘xx’,’zz’) xx可以用array[0]引用

優點:提供更高吞吐量的資料,減少‘頭部定址’的次數
缺點:破壞標準格式,帶來資料冗餘

文字檔案的資料編碼

hive中預設的記錄和欄位分隔符

分隔符 描述
\n 換行符 預設行與行之間的分割,也只有這種
^A create table 用8進位制的\001表示
^B create table 用8進位制的\002表示,用於分割array和struct的元素,map鍵值對
^C create table 用8進位制的\003表示,用於分割map鍵和值

排序

保留字 描述
order by 全域性排序
sort by 區域性排序
distribute by 控制map的輸出在reduce怎樣劃分
cluster by =distribute by t.id sort by t.id

hive引數調優

一、壓縮

啟動壓縮 有返回壓縮的格式就是啟動
set io.compression.codecs;
中間壓縮(中間資料值上個mapreduce作業的輸出)
set hive.exec.compress.intermediate=true;
set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.intermediate.compression.type=BLOCK;
結果輸出進行壓縮
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

檔案格式 容量 壓縮情況 備註
TEXT 585 資料有引數化的分隔符號,用textfile
RCFILE 505 14% 執行資料分析,並高效的儲存資料,用rcfile
Parquet 221 62% 資料所在的檔案的塊尺寸小,用sequencefile
ORCFile 131 78% 支援事務,並且希望減少資料的儲存空間,提高效能,用orcfile

二、連線

// (1) 自動連線 當連線一個大表和小表,自動將小表快取到本地,在map的階段與大表進行連線,其次避免了hive查詢中的傾斜連線
set hive.auto.conver.join=true;
set hive.auto.conver.join.noconditionaltask=true;
set hive.auto.conver.join.noconditionaltask.size=10000000;
set hive.auto.conver.join.use.nonstaged=true;
// (2) 傾斜連線 兩個大表進行連線,會先基於連線鍵進行排序,然後mapper將特點鍵值的所有行發給同一個reducer。
set hive.optimize.skewjoin=true;//是否在連線之後的傾斜建立獨立的執行計劃
set hive.skewjoin.key=100000;//
set hive.skewjoin.mapjoin.map.tasks=10000;//指定map連線的作業數,可控制粒度一起使用
set hive.skewjoin.mapjoin.min.split=33554432;//控制粒度
// (3)桶連線
set hive.optimize.bucktmapjoin=true; // 是否嘗試桶map連線
set hive.optimize.bucktmapjoin.sortedmerge=true; //是否嘗試在map連線中使用歸併排序

三、優化limit操作

//預設的limit仍然會查詢整個查詢,然後再返回限定的行數
set hive.limit.optimize.enable=true;
set hive.limit.row.max.size=100000;
set hive.limit.optimize.limit.file=10;
set hive.limit.optimize.fetch.max=50000;

四、啟動併發執行

set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=8;

五、使用單一reduce執行多個group by

set hive.multigroupby.singlereducer=true;

六、控制並行的reduce任務數

set hive.exec.reducers.bytes.per.reducer=256000000;
set hive.exec.reducers.max=1009

歡迎拍磚指正,共同進步^_^