根据我的理解,行被插入到HBase表中,并被存储为不同区域服务器中的区域。因此,区域服务器存储数据
类似地,就Hadoop而言,数据存储在hadoop集群中的数据节点中。
假设我在Hadoop 1.1.1之上配置了HBase 0.90.6,如下所示
2个节点 - 主站和从站
基于我的陈述,如果表数据存储在区域服务器中;那么数据节点和区域服务器的作用是什么?
答案 0 :(得分:40)
数据节点存储数据。区域服务器本质上是缓冲I / O操作;数据永久存储在HDFS(即数据节点)上。我不认为将区域服务器放在“主”节点上是个好主意。
以下是区域管理方式的简化图:
您有一个运行HDFS(NameNode + DataNodes)的集群,复制因子为3(每个HDFS块被复制到3个不同的DataNode中)。
您在与DataNodes相同的服务器上运行RegionServers。当写入请求到达RegionServer时,它首先将更改写入内存并提交日志;然后在某些时候,它决定是时候将更改写入HDFS上的永久存储。以下是数据位置发挥作用:由于您在同一服务器上运行RegionServer和DataNode,因此该文件的第一个HDFS块副本将写入同一服务器。另外两个副本将写入其他DataNode。因此,为该地区提供服务的RegionServer几乎总能访问本地数据副本。
如果RegionServer崩溃或RegionMaster决定将区域重新分配给另一个RegionServer(以保持群集平衡),该怎么办?新的RegionServer将被强制先执行远程读取,但只要执行压缩(将更改日志合并到数据中) - 新的RegionServer将新文件写入HDFS,并在RegionServer上创建本地副本(再次,因为DataNode和RegionServer在同一台服务器上运行)。
注意:如果RegionServer崩溃,先前分配给它的区域将被重新分配给多个RegionServers。
好读:
Tom White,“Hadoop,The Definitive Guide”对HDFS架构有很好的解释。不幸的是,我没有阅读原版谷歌GFS论文,所以我不知道是否容易理解。
Google BigTable文章。 HBase是Google BigTable的实现,我发现本文中的架构描述最容易理解。
以下是Google Bigtable和HBase实施之间的命名差异(来自Lars George,“HBase,The Definitive Guide”):