1 hive表關聯查詢,如何解決資料傾斜的問題?
傾斜原因:
map輸出資料按key hash的分配到reduce中,由於key分布不均勻、業務資料本身的特、建表時考慮不周、等原因造成的reduce 上的資料量差異過大。
1)、key分布不均勻;
2)、業務資料本身的特性;
3)、建表時考慮不周;
4)、某些sql語句本身就有資料傾斜;
如何避免:對於key為空產生的資料傾斜,可以對其賦予乙個隨機值。
解決方案
1>.引數調節:
hive.map.aggr = true
hive.groupby.skewindata=true
有資料傾斜的時候進行負載均衡,當選項設定位true,生成的查詢計畫會有兩個mr job。第乙個mr job中,map的輸出結果集合會隨機分布到reduce中,每個reduce做部分聚合操作,並輸出結果,這樣處理的結果是相同的group by key有可能被分發到不同的reduce中,從而達到負載均衡的目的;第二個mr job再根據預處理的資料結果按照group by key 分布到 reduce 中(這個過程可以保證相同的 group by key 被分布到同乙個reduce中),最後完成最終的聚合操作。
2>.sql 語句調節:
1)、選用join key分布最均勻的表作為驅動表。做好列裁剪和filter操作,以達到兩表做join 的時候,資料量相對變小的效果。
2)、大小表join:
使用map join讓小的維度表(1000 條以下的記錄條數)先進記憶體。在map端完成reduce.
4)、大表join大表:
把空值的key變成乙個字串加上隨機數,把傾斜的資料分到不同的reduce上,由於null 值關聯不上,處理後並不影響最終結果。
5)、count distinct大量相同特殊值:
count distinct 時,將值為空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最後結果中加1。如果還有其他計算,需要進行group by,可以先將值為空的記錄單獨處理,再和其他計算結果進行union。
2. 請談一下hive的特點是什麼?hive和rdbms有什麼異同?
hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。其優點是學習成本低,可以通過類sql語句快速實現簡單的mapreduce統計,不必開發專門的mapreduce應用,十分適合資料倉儲的統計分析。
3. 請把下一語句用hive方式實現?
select a.key,a.value
from a
where a.key not in (select b.key from b)
答案:
select a.key,a.value from a where a.key not exists (select b.key from b)
4. multi-group by 是hive的乙個非常好的特性,請舉例說明?
from a
insert overwrite table b
select a.a, count(distinct a.b) group by a.a
insert overwrite table c
select a.c, count(distinct a.b) group by a.c
5. 請說明hive中 sort by,order by,cluster by,distrbute by各代表什麼意思。
order by:會對輸入做全域性排序,因此只有乙個reducer(多個reducer無法保證全域性有序)。只有乙個reducer,會導致當輸入規模較大時,需要較長的計算時間。
sort by:不是全域性排序,其在資料進入reducer前完成排序。
distribute by:按照指定的字段對資料進行劃分輸出到不同的reduce中。
cluster by:除了具有 distribute by 的功能外還兼具 sort by 的功能。
6.簡要描述資料庫中的 null,說出null在hive底層如何儲存,並解釋selecta.* from t1 a left outer join t2 b on a.id=b.id where b.id is null; 語句的含義
null與任何值運算的結果都是null, 可以使用is null、is not null函式指定在其值為null情況下的取值。
null在hive底層預設是用'\n'來儲存的,可以通過alter table test set serdeproperties('serialization.null.format' = 'a');來修改。
查詢出t1表中與t2表中id相等的所有資訊。
7.寫出hive中split、coalesce及collect_list函式的用法(可舉例)。
split將字串轉化為陣列。
split('a,b,c,d' , ',') ==> ["a","b","c","d"]
coalesce(t v1, t v2, …) 返回引數中的第乙個非空值;如果所有值都為 null,那麼返回null。
collect_list列出該欄位所有的值,不去重 select collect_list(id) from table;
8.寫出將 text.txt 檔案放入 hive 中 test 表『2016-10-10』 分割槽的語句,test 的分割槽欄位是 l_date。
load data local inpath '/your/path/test.txt' overwrite into table test partition (l_date='2016-10-10')
Hive 面試以及知識點
1.hive表關聯查詢,如何解決資料傾斜的問題?傾斜原因 map輸出資料按key hash的分配到reduce中,由於key分布不均勻 業務資料本身的特 建表時考慮不周 等原因造成的reduce 上的資料量差異過大。1 key分布不均勻 2 業務資料本身的特性 3 建表時考慮不周 4 某些sql語句...
大資料學習知識點
檔案儲存 hadoop hdfs tachyon kfs 離線計算 hadoop mapreduce spark 流式 實時計算 storm spark streaming s4 heron k v nosql 資料庫 hbase redis mongodb 資源管理 yarn mesos 日誌收集...
hive知識點詳解
hive支援的常用資料型別和檔案格式 hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元...