大資料Hive 面試以及知識點

2021-07-23 17:28:07 字數 2811 閱讀 5548

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上的資料有了結構,元...