數據節點存儲數據。區域服務器本質上緩衝I/O操作;數據永久存儲在HDFS上(即數據節點)。我不認爲把區域服務器放在你的'主'節點上是個好主意。
下面是如何區域管理的簡化的圖象:
您有3複製因子(各HDFS塊被複制到3周不同的DataNodes)運行HDFS(的NameNode +的DataNodes)的羣集。
您在與DataNodes相同的服務器上運行RegionServers。當寫入請求到達RegionServer時,它首先將更改寫入內存並提交日誌;那麼在某一時刻,它決定是時候將更改寫入HDFS上的永久存儲器。以下是數據局部性:由於您在同一臺服務器上運行RegionServer和DataNode,因此該文件的第一個HDFS塊副本將寫入同一臺服務器。其他兩個副本將寫入其他DataNode。因此,服務該地區的RegionServer幾乎總是可以訪問本地數據副本。
如果RegionServer崩潰或RegionMaster決定將區域重新分配給另一個RegionServer(以保持集羣平衡)會怎麼樣? New RegionServer將被迫首先執行遠程讀取,但是一旦執行壓縮(將更改日誌合併到數據中) - 新文件將由新的RegionServer寫入HDFS,並且將在RegionServer上創建本地副本(再次,因爲DataNode和RegionServer在同一臺服務器上運行)。
注意:如果發生RegionServer崩潰,以前分配給它的區域將被重新分配給多個RegionServer。
好讀:
這是谷歌的Bigtable和HBase的實現(從拉斯喬治, 「HBase的,權威指南」)之間的命名差異:
- HBase的 - Bigtable的
- 地區 - 平板
- RegionServer的 - 平板電腦服務器
- 嵌入式 - 小型壓實
- 小型壓實 - 合併壓實
- 主要壓實 - 主要壓實
- 預寫日誌 - 提交日誌
- HDFS - GFS
- 的Hadoop MapReduce的 - MapReduce的
- 的memstore - 的memTable
- HFILE - 的SSTable
- 動物園管理員 - 丘比
我甚至可以看到在HDFS創建HBase的表,看起來像存儲塊。 鏈接http://hbase.apache.org/book/regionserver.arch.html指出,「HRegionServer是RegionServer的實現。這是負責服務和管理的區域。在分佈式集羣,一個RegionServer的運行在9.9節.2,「DataNode」。「 但是,我仍然很難理解區域服務器的角色。什麼樣的I/O操作以及爲什麼單獨的區域服務器只需要這些IO? – learninghuman
區域是某些行的範圍內的數據。說,你想從HBase表中得到一行。你的請求會到達RegionServer,它負責包含你的行的區域。 RegionServer將已經在內存中包含你的行(緩存),或者它需要從HDFS(dataNodes)中讀取它。如果您的RegionServer在包含相應區域的DataNode上運行,那麼這是一個本地文件系統讀取。否則,這是一個遠程讀取,速度很慢。這就是爲什麼你想在DataNode上放置RegionServer - 數據局部性原理。 ---對於HDFS /的DataNodes看到Hadoop的書籍(比如,hadoopbook.com) –
非常感謝您的解釋......但問題仍然彈出 1區服務器和數據節點之間的映射是如何進行的?也就是說我可以在與dn1相同的機器上有3個區域服務器rs1,在dn3上有dn2和rs3的rs2。什麼決定了rs1的範圍駐留在dn1上?我的理解是,rs1的區域也可以轉到dn2。那麼地方如何實現? 2.應該有相同數量的區域服務器和數據節點嗎? – learninghuman