資料倉儲工具hive面試題集錦

2021-10-10 10:53:34 字數 2603 閱讀 5231

進入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。

覺得有用的小夥伴可以分享出去給更多需要的人看到哦~

hive 資料倉儲面試題目集錦

內部表和外部表的區別 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metastore.warehouse.dir 預設 u...

資料倉儲面試題

資料倉儲面試問題彙總 1.用hive實現交集 並集 差集 交集 用inner join 就可以實現 並集 union 順便說一下union all 和union 的區別,union 會去除重複項因此要慢一點,而union all 不會 差集 left join on a.id b.id where ...

hive(資料倉儲工具)

hive是基於hadoop的乙個 資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。其優點是學習成本低,可以通過類sql語句快速實現簡單的mapreduce統計,不必開發專門的mapreduce應用,十分適合 資...