100道hadoop常見面試題及答案解析

2021-09-16 12:15:57 字數 4488 閱讀 6002

//返回 filesystem 物件

filesystem fs = getfilesystem();

//檔案路徑

path path =

new path(「hdfs:

//獲取檔案目錄

filestatus filestatus = fs.getfilestatus(path);

//獲取檔案塊位置列表

blocklocation blklocations =

fs.getfileblocklocations(filestatus, 0, filestatus.getlen());

//迴圈輸出塊資訊

for(int i=0;i< blklocations.length;i++)

5.8 hdfs 儲存的機制?

hdfs 的三個實體

資料塊每個磁碟都有預設的資料塊大小,這是磁碟進行讀寫的基本單位.構建於單個磁碟之上的檔案

系統通過磁碟塊來管理該檔案系統中的塊.該檔案系統中的塊一般為磁碟塊的整數倍.磁碟塊

一般為 512 位元組.hdfs 也有塊的概念,預設為 64mb(乙個 map 處理的資料大小).hdfs 上

的檔案也被劃分為塊大小的多個分塊,與其他檔案系統不同的是,hdfs 中小於乙個塊大小的

檔案不會佔據整個塊的空間.

hdfs 用塊儲存帶來的第乙個明顯的好處乙個檔案的大小可以大於網路中任意乙個磁碟的

容量,資料塊可以利用磁碟中任意乙個磁碟進行儲存.第二個簡化了系統的設計,將控制單元

設定為塊,可簡化儲存管理,計算單個磁碟能儲存多少塊就相對容易.同時也消除了對元資料

的顧慮,如許可權資訊,可以由其他系統單獨管理.

datanode 節點

datanode 是 hdfs 檔案系統的工作節點,它們根據需要儲存並檢索資料塊,受 namenode

節點排程.並且定期向 namenode 傳送它們所儲存的塊的列表

namenode 節點

namenode 管理 hdfs 檔案系統的命名空間,它維護著檔案系統樹及整棵樹的所有的檔案

及目錄.這些檔案以兩個檔案形式永久儲存在本地磁碟上(命名空間映象檔案和編輯日誌文

件).namenode 記錄著每個檔案中各個塊所在的資料節點資訊但並不永久儲存這些塊的位

置資訊,因為這些資訊在系統啟動時由資料節點重建.

沒有 namenode,檔案系統將無法使用.如提供 namenode 服務的機器損壞,檔案系統上的

所有檔案丟失,我們就不能根據 datanode 的塊來重建檔案.因此,對 namenode 的容錯非

常重要.第一種機制,備份那些組成檔案系統元資料持久狀態的檔案.通過配置使 namenode

在多個檔案系統上儲存元資料的持久狀態或將資料寫入本地磁碟的同時,寫入乙個遠端掛載

的網路檔案系統.當然這些操作都是原子操作.第二種機制是執行乙個輔助的 namenode,它

會儲存合併後的命名空間映象的副本,並在 name/node 發生故障時啟用.但是輔助

namenode 儲存.態總是滯後於主力節點,所以在主節點全部失效後難免丟失資料.在這種情

況下,一般把儲存在遠端掛載的網路檔案系統的資料複製到輔助 namenode 並作為新的主

namenode 執行

5.9 hdfs 的 client 端,複製到第三個副本時宕機, hdfs 怎麼恢復保證下次寫第三副

本?datanode 會定時上報 block 塊的資訊給 namenode ,namenode 就會得知副本缺失,

然後 namenode 就會啟動副本複製流程以保證資料塊的備份!

5.10 block 塊資訊是先寫 datanode 還是先寫 namenode?

client 向 namenode 發起檔案寫入的請求。

namenode 根據檔案大小和檔案塊配置情況,返回給 client 它所管理部分 datanode

的資訊。

client 將檔案劃分為多個 block,根據 datanode 的位址資訊,按順序寫入到每乙個

datanode 塊中。

5.11 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 一樣。

5.12 hive 內部表和外部表的區別?

內部表:建表時會在 hdfs 建立乙個表的儲存目錄,增加分割槽的時候,會將資料複製到此

location 下,刪除資料的時候,將表的資料和元資料一起刪除。

外部表:一般會建立分割槽,增加分割槽的時候不會將資料移到此表的 location 下,刪除資料的

時候,只刪除了表的元資料資訊,表的資料不會刪除。

5.13 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』)

5.14 hive 支援 not in 嗎?

不支援,可以用 left join 實現此功能

5.15 hive 有哪些方式儲存元資料,各有哪些優缺點。

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

2)儲存於 mysql 資料庫中,可以多客戶端連線,推薦使用。

5.16 hive 如何優化

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

2)排序優化,order by 乙個 reduce 效率低,distirbute by +sort by 也可以實現全域性排序

3)使用分割槽,查詢時可減少資料的檢索,從而節省時間。

5.17 hive 能像關聯式資料庫那樣,建多個庫嗎?

可以建立多個庫,多庫多表都支援。

5.18 hive 中的壓縮格式 rcfile、 textfile、 sequencefile 各有什麼區別?

textfile:預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大

sequencefile:hadoop api 提供的一種二進位制檔案支援,使用方便,可分割,可壓縮,支

持三種壓縮,none,record,block

rcfile 是一種行列儲存相結合的方式。首先,將資料按行分塊,保證同乙個 record 在同

乙個塊上,避免讀乙個記錄讀取多個 block。其次,塊資料列式儲存,有利於資料壓縮和快

速的列訪問。資料載入的時候效能消耗大,但具有較好的壓縮比和查詢響應。

5.19 hive 相對於 oracle 來說有那些優點?

1)儲存,hive 儲存在 hdfs 上,oracle 儲存在本地檔案系統

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

3)單錶儲存,資料量大 hive 可以分區分桶,oracle 資料量大只能分表。

5.20 hive 的 sort by 和 order by 的區別

order by 會對輸入資料做全域性排序,只有乙個 reduce,資料量較大時,很慢。

sort by 不是全域性排序,只能保證每個 reduce 有序,不能保證全域性有序,需設定

mapred.reduce.tasks>1

hadoop常見面試題

namenode儲存內容 檔案系統的命名空間 a 檔名稱 current version b 檔案目錄結構 edits c 檔案的屬性 許可權,建立時間 副本數 fsimage d 檔案對應哪些資料塊 資料塊對應哪些datanode節點 fstime 說明d 不會持久化儲存這個對映關係,是通過集群的...

10道MySQL常見面試題

1 mysql索引種類 1.普通索引 2.唯一索引 3.主鍵索引 4.組合索引 5.全文索引 2 索引在什麼情況下遵循最左字首的規則?最左字首原理的一部分,索引index1 a,b,c 只會走a a,b a,b,c 三種型別的查詢,其實這裡說的有一點問題,a,c也走,但是只走a欄位索引,不會走c欄位...

常見面試題

1.get和post的區別 1 本質區別 get是向伺服器請求資料,post是向伺服器傳送資料。2 伺服器獲取值的方式 get方式提交的資料,伺服器端使用request.querystring獲取變數的值。post方式提交的資料,伺服器端使用request.form獲取資料。3 安全性 get安全效...