數據分析面試:數據倉庫工具hive面試題集錦,建議收藏

關注我們吧,查看更多幹貨文章,視頻。回覆“數據”還有數據分析相關資料領取,每週更有免費直播課,有問題也可私信諮詢小編哦!

進入DATE時代,大數據技術成為互聯網發展的核心要素之一。與此同時大數據開發工程師的薪資也成為行業內高薪的代表。想從事大數據開發需要掌握多種核心技術:Hadoop、Hive、Storm、Spark、Scala等等。而且這些技術知識點已經成為大數據工程師進入職場時面試中必備的考點。這裡主要和大家分享一下數據倉庫工具hive相關的面試題!

1、 Hive 的 join 有幾種方式,怎麼實現 join 的?

答:有3 種 join 方式:

1)在 reduce 端進行 join,最常用的 join 方式。

Map 端的主要工作:為來自不同表(文件)的 key/value 對打標籤以區別不同來源的記錄。然後用連接字段作為 key,其餘部分和新加的標誌作為 value,最後進行輸出。

reduce 端的主要工作:在 reduce 端以連接字段作為 key 的分組已經完成,我們只需要在每一個分組當中將那些來源於不同文件的記錄 (在 map 階段已經打標誌)分開,最後進行笛卡爾。

2)在 map 端進行 join,使用場景:一張表十分小、一張表很大。  在提交作業的時候先將小表文件放到該作業的 DistributedCache 中,然後從 DistributeCache 中取出該小表進行 join key / value 解釋分割放到內存中(可以放大 Hash Map 等等容器中)。然後掃描大表,看大表中的每條記錄的 join key /value 值是否能夠在內存中找到相同 join key 的記錄,如果有則直接輸出結果。

3)SemiJoin,semijoin 就是左邊連接是 reducejoin 的一種變種,在 map 端過濾掉一些數據,在網絡傳輸過程中,只傳輸參與連接的數據,減少了 shuffle的網絡傳輸量,其他和 reduce的思想是一樣的。

實現:將小表中參與 join 的 key 單獨抽取出來通過 DistributeCache 分發到相關節點,在 map 階段掃描連接表,將 join key 不在內存 hashset 的紀錄過濾掉,讓參與 join 的紀錄通過 shuffle 傳輸到 reduce 端進行 join,其他和 reduce join 一樣。

2、hive 內部表和外部表的區別?

內部表:建表時會在 hdfs 創建一個表的存儲目錄,增加分區的時候,會將數據複製到此location下,刪除數據的時候,將表的數據和元數據一起刪除。

外部表:一般會建立分區,增加分區的時候不會將數據移到此表的 location下,刪除數據的時候,只刪除了表的元數據信息,表的數據不會刪除。

3、 hive 是如何實現分區的?

建表語句:

create table tablename (id) partitioned by (dt string)

增加分區:

alter table tablenname add partition (dt = ‘2016-03-06’)

刪除分區:

alter table tablename drop partition (dt = ‘2016-03-06’)

4、 Hive 有哪些方式保存元數據,各有哪些優缺點。

1)存儲於 derby數據庫,此方法只能開啟一個hive客戶端,不推薦使用

2)存儲於mysql數據庫中,可以多客戶端連接,推薦使用。

5、 hive 如何優化?

1)join 優化,儘量將小表放在 join 的左邊,如果一個表很小可以採用 mapjoin。

2)排序優化,order by 一個 reduce 效率低,distirbute by +sort by 也可以實現全局排序。

3)使用分區,查詢時可減少數據的檢索,從而節省時間。

6、 hive 中的壓縮格式 RCFile、 TextFile、 SequenceFile 各有什麼區別?

TextFile:默認格式,數據不做壓縮,磁盤開銷大,數據解析開銷大

SequenceFile:Hadoop API提供的一種二進制文件支持,使用方便,可分割,可壓縮,支持三種壓縮,NONE,RECORD,BLOCK。

RCFILE 是一種行列存儲相結合的方式。首先,將數據按行分塊,保證同一個 record 在同一個塊上,避免讀一個記錄讀取多個block。其次,塊數據列式存儲,有利於數據壓縮和快速的列存取。數據加載的時候性能消耗大,但具有較好的壓縮比和查詢響應。

7、 hive 相對於 Oracle 來說有那些優點?

1)存儲,hive 存儲在 hdfs 上,oracle 存儲在本地文件系統。

2)擴展性,hive 可以擴展到數千節點,oracle 理論上只可擴展到 100 臺左右。

3)單表存儲,數據量大 hive 可以分區分桶,oracle 數據量大隻能分表。

8、 Hive 的 sort by 和 order by 的區別!

order by 會對輸入數據做全局排序,只有一個 reduce,數據量較大時,很慢。

sort by 不是全局排序,只能保證每個 reduce 有序,不能保證全局有序,需設置mapred.reduce.tasks>1。

end.


分享到:


相關文章: