
- HBase教程
- HBase - 首頁
- HBase - 概述
- HBase - 架構
- HBase - 安裝
- HBase - Shell
- HBase - 常用命令
- HBase - 管理API
- HBase - 建立表
- HBase - 列出表
- HBase - 停用表
- HBase - 啟用表
- HBase - 描述和修改
- HBase - 檢查表是否存在
- HBase - 刪除表
- HBase - 關閉服務
- HBase - 客戶端API
- HBase - 建立資料
- HBase - 更新資料
- HBase - 讀取資料
- HBase - 刪除資料
- HBase - 掃描
- HBase - 計數和截斷
- HBase - 安全性
- HBase資源
- HBase - 問答
- HBase - 快速指南
- HBase - 有用資源
HBase面試問題
親愛的讀者,這些HBase面試問題是專門為了讓您熟悉在HBase主題的面試中可能遇到的問題型別而設計的。根據我的經驗,優秀的採訪者在面試期間很少會計劃問任何特定問題,通常問題會從主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行。
有5個原子命令,它們由Hbase執行不同的操作。
Get、Put、Delete、Scan和Increment。
透過Hbase Shell建立與Hbase的連線,Hbase Shell是一個Java API。
主伺服器將區域分配給區域伺服器並在叢集中處理負載均衡。
Zookeeper維護配置資訊,提供分散式同步,並維護客戶端和區域伺服器之間的通訊。
在Hbase中,停用表是為了允許修改表或更改其設定。當表被停用時,無法透過scan命令訪問它。
Hbase > is_disabled “表名”
該命令將停用所有以字母p開頭的表。
過濾器用於從Hbase表中獲取特定資料,而不是所有記錄。
它們有以下型別。
- 列值過濾器
- 列值比較器
- 鍵值元資料過濾器。
- 行鍵過濾器。
Hbase沒有內建的身份驗證/許可權機制。
索引只能在鍵列上建立,但在RDBMS中可以在任何列上建立。
只有一個HMaster節點,存在單點故障。
Hbase中的目錄表維護元資料資訊。它們被命名為-ROOT-和.META.。-ROOT-表儲存關於.META.表位置的資訊,而.META.表儲存所有區域及其位置的資訊。
Hbase執行在Hadoop之上,Hadoop是一個分散式系統。Haddop只能根據需要透過動態新增更多機器來進行縱向擴充套件。因此,Hbase是一個橫向擴充套件的過程。
在Hbase中,客戶端不會直接寫入HFile。客戶端首先寫入WAL(Write Access Log),然後由Memstore訪問。Memstore會定期將資料重新整理到永久儲存中。
隨著越來越多的資料寫入Hbase,會建立許多HFile。壓縮是將這些HFile合併成一個檔案的過程,並且在成功建立合併檔案後,丟棄舊檔案。
有兩種型別的壓縮。主壓縮和次壓縮。在次壓縮中,相鄰的小HFile被合併以建立一個單個HFile,而不會刪除已刪除的HFile。要合併的檔案是隨機選擇的。
在主壓縮中,將一列的所有HFile合併,並建立一個單個HFile。已刪除的HFile將被丟棄,並且通常會手動觸發。
Delete column命令刪除列的所有版本,而delete family刪除特定族的所有列。
Hbase中的單元格是Hbase表的最小單位,它以元組的形式儲存資料{行、列、版本}。
此類用於儲存有關列族的資訊,例如版本數、壓縮設定等。在建立表或新增列時,它用作輸入。
版本的較低界限指示為列儲存在Hbase中的最小版本數。例如,如果值為3,則將維護三個最新的版本,而較舊的版本將被刪除。
TTL是一種資料保留技術,使用它可以將單元格的版本保留到特定時間段。一旦達到該時間戳,特定版本將被刪除。
Hbase不支援表連線。但是,使用mapreduce作業,我們可以指定連線查詢以從多個Hbase表中檢索資料。
Hbase中的每一行都由一個唯一的位元組陣列標識,稱為行鍵。
Hbase中的資料可以透過兩種方式訪問。
使用行鍵和表掃描獲取一系列行鍵值。
以批處理方式使用mapreduce。
它們是-(i) 短而寬 (ii) 高而瘦
當存在以下情況時,會考慮短而寬的表設計。
列數少。
行數多。
當存在以下情況時,會考慮高而瘦的表設計。
列數多。
行數少。
hbase > alter '表名', {NAME => '列族名', VERSIONS => 4}
此命令從表中刪除列族。
Hbase > disable ‘tablename’ Hbase > alter ‘tablename’ {NAME => ‘oldcolfamily’,NAME=>’newcolfamily’} Habse > enable ‘tablename’
scan 'tablename', {LIMIT=>10, STARTROW=>"start_row", STOPROW=>"stop_row"}
對錶執行主壓縮。
在Hbase中執行資料批次載入主要有兩個步驟。
使用自定義mapreduce作業從資料來源生成Hbase資料檔案(StoreFile)。StoreFile以Hbase內部格式建立,可以有效載入。
使用另一個工具(如completebulkload)匯入準備好的檔案,以將資料匯入到正在執行的叢集中。每個檔案都載入到一個特定的區域。
Hbase使用稱為區域複製的功能。在此功能中,對於表的每個區域,都將在不同的RegionServer中開啟多個副本。負載均衡器確保區域副本不會在同一區域伺服器上共同託管。
Hmaster是主伺服器,負責監控叢集中的所有RegionServer例項,並且是所有元資料更改的介面。在分散式叢集中,它執行在NameNode上。
HRegionServer是RegionServer的實現。它負責服務和管理區域。在分散式叢集中,RegionServer執行在DataNode上。
HBase提供了兩種不同的BlockCache實現:預設的堆內LruBlockCache和BucketCache(通常)堆外。
預寫日誌(WAL)將對HBase中資料的更改記錄到基於檔案的儲存中。如果RegionServer在MemStore重新整理之前崩潰或不可用,則WAL可確保可以重放對資料的更改。
對於每個RegionServer只有一個WAL,RegionServer必須按順序寫入WAL,因為HDFS檔案必須是順序的。這會導致WAL成為效能瓶頸。
當區域被編輯時,需要重放屬於該區域的WAL檔案中的編輯。因此,WAL檔案中的編輯必須按區域分組,以便可以重放特定的集合以重新生成特定區域中的資料。按區域對WAL編輯進行分組的過程稱為日誌拆分。
可以停用WAL以提高效能瓶頸。
這是透過呼叫Hbase客戶端欄位Mutation.writeToWAL(false)來完成的。
當由於許多客戶端查詢同一張表而導致表中出現意外熱點時,會進行手動區域拆分。
Habse Store承載一個MemStore和0個或多個StoreFile(HFile)。對於給定區域的表,Store對應於一個列族。
Habse中的HFile儲存實際資料(而不是元資料),它是根據BigTable的SSTable檔案設計的。
預設情況下,HBase中的表最初會建立一個區域。然後對於批次匯入,所有客戶端都將寫入同一區域,直到它足夠大以進行拆分並分佈到整個叢集中。因此,建立空區域是為了使此過程更快。
熱點問題是指大量客戶端流量集中到叢集的一個節點或少數幾個節點的情況。此流量可能代表讀取、寫入或其他操作。此流量會壓垮負責託管該區域的單個機器,導致效能下降,並可能導致區域不可用。
可以透過將行鍵分散到多個區域來避免或最小化熱點問題。實現此目的的不同技術包括加鹽和雜湊。
在 Hbase 中,值始終與其座標一起傳輸;當單元格值透過系統時,它將伴隨其行、列名和時間戳。如果行和列名很大,特別是與單元格值的大小相比,那麼為了便於隨機訪問而在 HBase 儲存檔案(StoreFile(HFile))上保留的索引最終可能佔據比資料本身更大的 HBase 分配的 RAM 塊,因為單元格值座標很大。
行鍵的作用域是列族。相同的行鍵可以存在於表中存在的每個列族中,而不會發生衝突。
Hbase:meta 表以以下格式儲存系統中區域的詳細資訊。
info:regioninfo(此區域的序列化 HRegionInfo 例項)
info:server(包含此區域的 RegionServer 的伺服器:埠)
info:serverstartcode(包含此區域的 RegionServer 程序的啟動時間)
名稱空間是表的邏輯分組。它類似於關係資料庫系統中的資料庫物件。
只能透過查詢該列族的所有行來獲取列族中所有列的完整列表。
從 Hbase 獲取的記錄始終按行鍵 -> 列族 -> 列限定符 -> 時間戳的順序排序。
下一步是什麼?
接下來,您可以回顧您之前完成的與該主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您能回答非常複雜的問題,而是您必須使自己的基礎概念非常紮實。
其次,如果您無法回答一些問題,實際上並沒有太大關係,但重要的是,無論您回答了什麼,都必須充滿自信地回答。所以在面試期間要保持自信。我們在 tutorialspoint 祝您面試順利,並祝您未來的工作一切順利。乾杯 :-)