2020年企業(yè)常見Java基礎(chǔ)筆試題

2020年企業(yè)常見Java基礎(chǔ)筆試題

深圳達(dá)內(nèi)教育      2022-04-07 08:49:01     11

2020年企業(yè)常見Java基礎(chǔ)筆試題,1.hive表關(guān)聯(lián)查詢,如何解決數(shù)據(jù)傾斜的問題?傾斜原因:map輸出數(shù)據(jù)按key Hash的分配到reduce中,由于key分布不均勻、業(yè)務(wù)數(shù)據(jù)本

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

1.hive表關(guān)聯(lián)查詢,如何解決數(shù)據(jù)傾斜的問題?

傾斜原因:

map輸出數(shù)據(jù)按key Hash的分配到reduce中,由于key分布不均勻、業(yè)務(wù)數(shù)據(jù)本身的特、建表時(shí)考慮不周、等原因造成的reduce上的數(shù)據(jù)量差異過大。

1)、key分布不均勻;

2)、業(yè)務(wù)數(shù)據(jù)本身的特性;

3)、建表時(shí)考慮不周;

4)、某些SQL語句本身就有數(shù)據(jù)傾斜;

如何避免:對(duì)于key為空產(chǎn)生的數(shù)據(jù)傾斜,可以對(duì)其賦予一個(gè)隨機(jī)值。

解決方案

1>.參數(shù)調(diào)節(jié):

hive.map.aggr=true

hive.groupby.skewindata=true

有數(shù)據(jù)傾斜的時(shí)候進(jìn)行負(fù)載均衡,當(dāng)選項(xiàng)設(shè)定位true,生成的查詢計(jì)劃會(huì)有兩個(gè)MR Job。第一個(gè)MR Job中,Map的輸出結(jié)果集合會(huì)隨機(jī)分布到Reduce中,每個(gè)Reduce做部分聚合操作,并輸出結(jié)果,這樣處理的結(jié)果是相同的Group By Key有可能被分發(fā)到不同的Reduce中,從而達(dá)到負(fù)載均衡的目的;第二個(gè)MR Job再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照Group By Key分布到Reduce中(這個(gè)過程可以保證相同的Group By Key被分布到同一個(gè)Reduce中),最后完成最終的聚合操作。

2>.SQL語句調(diào)節(jié):

1)、選用join key分布最均勻的表作為驅(qū)動(dòng)表。做好列裁剪和filter操作,以達(dá)到兩表做join的時(shí)候,數(shù)據(jù)量相對(duì)變小的效果。

2)、大小表Join:

使用map join讓小的維度表(1000條以下的記錄條數(shù))先進(jìn)內(nèi)存。在map端完成reduce.

4)、大表Join大表:

把空值的key變成一個(gè)字符串加上隨機(jī)數(shù),把傾斜的數(shù)據(jù)分到不同的reduce上,由于null值關(guān)聯(lián)不上,處理后并不影響最終結(jié)果。

5)、count distinct大量相同特殊值:

count distinct時(shí),將值為空的情況單獨(dú)處理,如果是計(jì)算count distinct,可以不用處理,直接過濾,在最后結(jié)果中加1。如果還有其他計(jì)算,需要進(jìn)行g(shù)roup by,可以先將值為空的記錄單獨(dú)處理,再和其他計(jì)算結(jié)果進(jìn)行union。

2.請(qǐng)談一下hive的特點(diǎn)是什么?hive和RDBMS有什么異同?

hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類SQL語句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。

hive存儲(chǔ)的數(shù)據(jù)量比較大,適合海量數(shù)據(jù),適合存儲(chǔ)軌跡類歷史數(shù)據(jù),適合用來做離線分析、數(shù)據(jù)挖掘運(yùn)算,事務(wù)性較差,實(shí)時(shí)性較差

rdbms一般數(shù)據(jù)量相對(duì)來說不會(huì)太大,適合事務(wù)性計(jì)算,實(shí)時(shí)性較好,更加接近上層業(yè)務(wù)

hive的計(jì)算引擎是hadoop的mapreduce,存儲(chǔ)是hadoop的hdfs文件系統(tǒng)

rdbms的引擎由數(shù)據(jù)庫(kù)自己設(shè)計(jì)實(shí)現(xiàn)例如mysql的innoDB,存儲(chǔ)用的是數(shù)據(jù)庫(kù)服務(wù)器本地的文件系統(tǒng)

hive由于基于hadoop所以存儲(chǔ)和計(jì)算的擴(kuò)展能力都很好,

rdbms在這方面比較弱,比如orcale的分表和擴(kuò)容就很頭疼

hive表格沒有主鍵、沒有索引、不支持對(duì)具體某一行的操作,適合對(duì)批量數(shù)據(jù)的操作,不支持對(duì)數(shù)據(jù)的update操作,更新的話一般是先刪除表然后重新落數(shù)據(jù)

rdbms事務(wù)性強(qiáng),有主鍵、索引,支持對(duì)具體某一行的增刪改查等操作

hive的SQL為HQL,與標(biāo)準(zhǔn)的RDBMS的SQL存在有不少的區(qū)別,相對(duì)來說功能有限

rdbms的SQL為標(biāo)準(zhǔn)SQL,功能較為強(qiáng)大。

3.Multi-group by是hive的一個(gè)非常好的特性,請(qǐng)舉例說明?

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.請(qǐng)說明hive中Sort By,Order By,Cluster By,Distrbute By各代表什么意思

order by:會(huì)對(duì)輸入做全局排序,因此只有一個(gè)reducer(多個(gè)reducer無法保證全局有序)。只有一個(gè)reducer,會(huì)導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),需要較長(zhǎng)的計(jì)算時(shí)間。

sort by:不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序。

distribute by:按照指定的字段對(duì)數(shù)據(jù)進(jìn)行劃分輸出到不同的reduce中。

cluster by:除了具有distribute by的功能外還兼具sort by的功能。

5.簡(jiǎn)要描述數(shù)據(jù)庫(kù)中的null,說出null在hive底層如何存儲(chǔ),并解釋selecta.*from t1 a left outer join t2 b on a.id=b.id where b.id is null;語句的含義

null與任何值運(yùn)算的結(jié)果都是null,可以使用is null、is not null函數(shù)指定在其值為null情況下的取值。

null在hive底層默認(rèn)是用'N'來存儲(chǔ)的,可以通過alter table test SET SERDEPROPERTIES('serialization.null.format'='a');來修改。

這段語句目的是查詢出t1表中與t2表中id相等的所有信息。

以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年企業(yè)常見Java基礎(chǔ)筆試題”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java筆試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。