壹輪技術面(待補充):
1、數據傾斜:
數據傾斜壹般產生的原因是數據在map端hash分配到reduce端時,某壹個key的數量遠大於其他的key,導致某壹個reduce的處理時間較長。
1)key分布不均勻
2)數據本身就是如此
3)數據關聯時沒有把握好關聯鍵
解決方案
1)參數調整:hive.map.aggr = true;hive.groupby.skewindata=true;
?當存在數據傾斜時開啟負載均衡,此時會生成兩個MapReduce任務,第壹個MR任務會將map端產生的key隨機的分配到reduce,先進行壹次聚合,第二個MR任務會將第壹個任務的預處理結果作為輸入,將相同的key分配到同壹個reduce當中。
2)sql調整:在處理大量空值導致數據傾斜的情況下,可以先將空值附壹個特殊值去處理,比如給壹個隨機數加字符串的方式,因為空值數據是關聯不上的,不會影響後期處理。
2、order by,sort by,cluster by,distribute by的區別
1)order by是全局排序,排序過程在壹個reduce中進行,在數據量較大時就會很慢
2)sort by是局部排序,排序結果在同壹個reduce中使有序的
3)distribute by是將數據按照字段劃分到壹個reduce中,壹般與sort by連用進行分組排序的作用
4)cluster by除具有distribute by功能外還具有sort by的功能
order by優化(阿裏面試):
1)開啟嚴格模式,order by之後添加limit子句
2)利用sort by,在每個reduce中先排序取出top項,再把預處理結果order by輸出
3、hive中內部表和外部表的區別
1)在創建表的時候,內部表是將數據移動到數據倉庫指向的路徑,外部表僅記錄數據所在的路徑,不對數據的位置做任何改變。
2)在刪除表的時候,內部表會將元數據和數據都刪除,外部表只刪除元數據。
4、列轉行、行轉列
1)列轉行:lateral view explode(split('column_name',','))作為壹個新表
2)行轉列:concat_ws(',',collect_set(column_name))
5、mapreduce運行原理
6、數據倉庫分層原理(阿裏面試)
7、維度建模中三種事實表的應用場景(阿裏面試)
二輪面試(待補充)