hive 删除分区_数据仓库工具hive面试题集锦(纯干货)
進(jìn)入DATE時(shí)代,大數(shù)據(jù)技術(shù)成為互聯(lián)網(wǎng)發(fā)展的核心要素之一。與此同時(shí)大數(shù)據(jù)開發(fā)工程師的薪資也成為行業(yè)內(nèi)高薪的代表。想從事大數(shù)據(jù)開發(fā)需要掌握多種核心技術(shù):Hadoop、Hive、Storm、Spark、Scala等等。
而且這些技術(shù)知識(shí)點(diǎn)已經(jīng)成為大數(shù)據(jù)工程師進(jìn)入職場(chǎng)時(shí)面試中必備的考點(diǎn)。這里黑馬程序員主要和大家分享一下數(shù)據(jù)倉庫工具h(yuǎn)ive相關(guān)的面試題!
1、 Hive 的 join 有幾種方式,怎么實(shí)現(xiàn) join 的?
答:有3 種 join 方式:
1)在 reduce 端進(jìn)行 join,最常用的 join 方式。Map端的主要工作:為來自不同表(文件)的 key/value 對(duì)打標(biāo)簽以區(qū)別不同來源的記錄。然后用連接字段作為 key,其余部分和新加的標(biāo)志作為 value,最后進(jìn)行輸出。reduce 端的主要工作:在 reduce 端以連接字段作為 key 的分組已經(jīng)完成,我們只需要在每一個(gè)分組當(dāng)中將那些來源于不同文件的記錄 (在 map 階段已經(jīng)打標(biāo)志)分開,最后進(jìn)行笛卡爾。
2)在 map 端進(jìn)行 join,使用場(chǎng)景:一張表十分小、一張表很大。在提交作業(yè)的時(shí)候先將小表文件放到該作業(yè)的 DistributedCache 中,然后從 DistributeCache 中取出該小表進(jìn)行 join key / value 解釋分割放到內(nèi)存中(可以放大 Hash Map 等等容器中)。然后掃描大表,看大表中的每條記錄的 join key /value 值是否能夠在內(nèi)存中找到相同 join key 的記錄,如果有則直接輸出結(jié)果。
3)SemiJoin,semijoin 就是左邊連接是 reducejoin 的一種變種,在 map 端過濾掉一些數(shù)據(jù),在網(wǎng)絡(luò)傳輸過程中,只傳輸參與連接的數(shù)據(jù),減少了 shuffle的網(wǎng)絡(luò)傳輸量,其他和 reduce的思想是一樣的。實(shí)現(xiàn):將小表中參與 join 的 key 單獨(dú)抽取出來通過 DistributeCache 分發(fā)到相關(guān)節(jié)點(diǎn),在 map 階段掃描連接表,將 join key 不在內(nèi)存 hashset 的紀(jì)錄過濾掉,讓參與 join 的紀(jì)錄通過 shuffle 傳輸?shù)?reduce 端進(jìn)行 join,其他和 reduce join 一樣。
2、hive 內(nèi)部表和外部表的區(qū)別?內(nèi)部表:建表時(shí)會(huì)在 hdfs 創(chuàng)建一個(gè)表的存儲(chǔ)目錄,增加分區(qū)的時(shí)候,會(huì)將數(shù)據(jù)復(fù)制到此location下,刪除數(shù)據(jù)的時(shí)候,將表的數(shù)據(jù)和元數(shù)據(jù)一起刪除。外部表:一般會(huì)建立分區(qū),增加分區(qū)的時(shí)候不會(huì)將數(shù)據(jù)移到此表的 location下,刪除數(shù)據(jù)的時(shí)候,只刪除了表的元數(shù)據(jù)信息,表的數(shù)據(jù)不會(huì)刪除。
3、 hive 是如何實(shí)現(xiàn)分區(qū)的?建表語句:create table tablename (id) partitioned by (dt string)增加分區(qū):alter table tablenname add partition (dt = ‘2016-03-06’)刪除分區(qū):alter table tablename drop partition (dt = ‘2016-03-06’)
4、 Hive 有哪些方式保存元數(shù)據(jù),各有哪些優(yōu)缺點(diǎn)。
1)存儲(chǔ)于 derby 數(shù)據(jù)庫,此方法只能開啟一個(gè)hive客戶端,不推薦使用
2)存儲(chǔ)于mysql數(shù)據(jù)庫中,可以多客戶端連接,推薦使用。
5、 hive 如何優(yōu)化?
1)join 優(yōu)化,盡量將小表放在 join 的左邊,如果一個(gè)表很小可以采用 mapjoin。
2)排序優(yōu)化,order by 一個(gè) reduce 效率低,distirbute by +sort by 也可以實(shí)現(xiàn)全局排序。
3)使用分區(qū),查詢時(shí)可減少數(shù)據(jù)的檢索,從而節(jié)省時(shí)間。
6、 hive 中的壓縮格式 RCFile、 TextFile、 SequenceFile 各有什么區(qū)別?
TextFile:默認(rèn)格式,數(shù)據(jù)不做壓縮,磁盤開銷大,數(shù)據(jù)解析開銷大
SequenceFile:Hadoop API提供的一種二進(jìn)制文件支持,使用方便,可分割,可壓縮,支持三種壓縮,NONE,RECORD,BLOCK。RCFILE 是一種行列存儲(chǔ)相結(jié)合的方式。首先,將數(shù)據(jù)按行分塊,保證同一個(gè) record 在同一個(gè)塊上,避免讀一個(gè)記錄讀取多個(gè)block。其次,塊數(shù)據(jù)列式存儲(chǔ),有利于數(shù)據(jù)壓縮和快速的列存取。數(shù)據(jù)加載的時(shí)候性能消耗大,但具有較好的壓縮比和查詢響應(yīng)。7、 hive 相對(duì)于Oracle來說有那些優(yōu)點(diǎn)?
1)存儲(chǔ),hive 存儲(chǔ)在 hdfs 上,oracle 存儲(chǔ)在本地文件系統(tǒng)。
2)擴(kuò)展性,hive 可以擴(kuò)展到數(shù)千節(jié)點(diǎn),oracle 理論上只可擴(kuò)展到 100 臺(tái)左右。3)單表存儲(chǔ),數(shù)據(jù)量大 hive 可以分區(qū)分桶,oracle 數(shù)據(jù)量大只能分表。8、 Hive 的 sort by 和 order by 的區(qū)別?
order by 會(huì)對(duì)輸入數(shù)據(jù)做全局排序,只有一個(gè) reduce,數(shù)據(jù)量較大時(shí),很慢。
sort by 不是全局排序,只能保證每個(gè) reduce 有序,不能保證全局有序,需設(shè)置mapred.reduce.tasks>1。
覺得有用的小伙伴可以分享出去給更多需要的人看到哦~
總結(jié)
以上是生活随笔為你收集整理的hive 删除分区_数据仓库工具hive面试题集锦(纯干货)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 动态修改的数组——ArrayL
- 下一篇: Java链表—— LinkedList