更新時間:2020-06-28 15:28:16 來源:動力節(jié)點 瀏覽2550次
1.hive表關(guān)聯(lián)查詢,如何解決數(shù)據(jù)傾斜的問題?
傾斜原因:
map輸出數(shù)據(jù)按key Hash的分配到reduce中,由于key分布不均勻、業(yè)務(wù)數(shù)據(jù)本身的特、建表時考慮不周、等原因造成的reduce上的數(shù)據(jù)量差異過大。
1)、key分布不均勻;
2)、業(yè)務(wù)數(shù)據(jù)本身的特性;
3)、建表時考慮不周;
4)、某些SQL語句本身就有數(shù)據(jù)傾斜;
如何避免:對于key為空產(chǎn)生的數(shù)據(jù)傾斜,可以對其賦予一個隨機值。
解決方案
1>.參數(shù)調(diào)節(jié):
hive.map.aggr=true
hive.groupby.skewindata=true
有數(shù)據(jù)傾斜的時候進行負載均衡,當選項設(shè)定位true,生成的查詢計劃會有兩個MR Job。第一個MR Job中,Map的輸出結(jié)果集合會隨機分布到Reduce中,每個Reduce做部分聚合操作,并輸出結(jié)果,這樣處理的結(jié)果是相同的Group By Key有可能被分發(fā)到不同的Reduce中,從而達到負載均衡的目的;第二個MR Job再根據(jù)預處理的數(shù)據(jù)結(jié)果按照Group By Key分布到Reduce中(這個過程可以保證相同的Group By Key被分布到同一個Reduce中),最后完成最終的聚合操作。
2>.SQL語句調(diào)節(jié):
1)、選用join key分布最均勻的表作為驅(qū)動表。做好列裁剪和filter操作,以達到兩表做join的時候,數(shù)據(jù)量相對變小的效果。
2)、大小表Join:
使用map join讓小的維度表(1000條以下的記錄條數(shù))先進內(nèi)存。在map端完成reduce.
4)、大表Join大表:
把空值的key變成一個字符串加上隨機數(shù),把傾斜的數(shù)據(jù)分到不同的reduce上,由于null值關(guān)聯(lián)不上,處理后并不影響最終結(jié)果。
5)、count distinct大量相同特殊值:
count distinct時,將值為空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最后結(jié)果中加1。如果還有其他計算,需要進行g(shù)roup by,可以先將值為空的記錄單獨處理,再和其他計算結(jié)果進行union。
2.請談一下hive的特點是什么?hive和RDBMS有什么異同?
hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進行運行。其優(yōu)點是學習成本低,可以通過類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計,不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。
hive存儲的數(shù)據(jù)量比較大,適合海量數(shù)據(jù),適合存儲軌跡類歷史數(shù)據(jù),適合用來做離線分析、數(shù)據(jù)挖掘運算,事務(wù)性較差,實時性較差
rdbms一般數(shù)據(jù)量相對來說不會太大,適合事務(wù)性計算,實時性較好,更加接近上層業(yè)務(wù)
hive的計算引擎是hadoop的mapreduce,存儲是hadoop的hdfs文件系統(tǒng)
rdbms的引擎由數(shù)據(jù)庫自己設(shè)計實現(xiàn)例如mysql的innoDB,存儲用的是數(shù)據(jù)庫服務(wù)器本地的文件系統(tǒng)
hive由于基于hadoop所以存儲和計算的擴展能力都很好,
rdbms在這方面比較弱,比如orcale的分表和擴容就很頭疼
hive表格沒有主鍵、沒有索引、不支持對具體某一行的操作,適合對批量數(shù)據(jù)的操作,不支持對數(shù)據(jù)的update操作,更新的話一般是先刪除表然后重新落數(shù)據(jù)
rdbms事務(wù)性強,有主鍵、索引,支持對具體某一行的增刪改查等操作
hive的SQL為HQL,與標準的RDBMS的SQL存在有不少的區(qū)別,相對來說功能有限
rdbms的SQL為標準SQL,功能較為強大。
3.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
4.請說明hive中Sort By,Order By,Cluster By,Distrbute By各代表什么意思
order by:會對輸入做全局排序,因此只有一個reducer(多個reducer無法保證全局有序)。只有一個reducer,會導致當輸入規(guī)模較大時,需要較長的計算時間。
sort by:不是全局排序,其在數(shù)據(jù)進入reducer前完成排序。
distribute by:按照指定的字段對數(shù)據(jù)進行劃分輸出到不同的reduce中。
cluster by:除了具有distribute by的功能外還兼具sort by的功能。
5.簡要描述數(shù)據(jù)庫中的null,說出null在hive底層如何存儲,并解釋selecta.*from t1 a left outer join t2 b on a.id=b.id where b.id is null;語句的含義
null與任何值運算的結(jié)果都是null,可以使用is null、is not null函數(shù)指定在其值為null情況下的取值。
null在hive底層默認是用'\N'來存儲的,可以通過alter table test SET SERDEPROPERTIES('serialization.null.format'='a');來修改。
這段語句目的是查詢出t1表中與t2表中id相等的所有信息。

以上就是動力節(jié)點java培訓機構(gòu)的小編針對“2020年企業(yè)常見Java基礎(chǔ)筆試題”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。