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