根据我的理解,行被插入到 HBase 表中,并作为区域存储在不同的区域服务器中。因此,区域服务器存储数据
类似地,就 Hadoop 而言,数据存储在 hadoop 集群中的数据节点中。
假设我在 Hadoop 1.1.1 之上配置了 HBase 0.90.6,如下所示
2 个节点 - 主节点和从节点
- Master node acts as,
- Hadoop - Namenode、Secondary Namenode、作业跟踪器、数据节点、任务跟踪器
- HBase - Master、RegionServer 和 Zookeeper。
- Slave node acts as,
- Hadoop 数据节点和任务跟踪器
- HBase 区域服务器
根据我的说法,如果表数据存储在区域服务器中;那么数据节点和区域服务器的作用是什么?
数据节点存储数据。区域服务器本质上缓冲 I/O 操作;数据永久存储在HDFS(即数据节点)上。我认为将区域服务器放在“主”节点上不是一个好主意。
以下是区域管理方式的简化图:
您有一个运行 HDFS(NameNode + DataNode)的集群,复制因子为 3(每个 HDFS 块被复制到 3 个不同的 DataNode)。
您在与 DataNode 相同的服务器上运行 RegionServer。当写请求到达 RegionServer 时,它首先将更改写入内存并提交日志;然后在某个时刻,它决定将更改写入 HDFS 上的永久存储。这就是数据局部性发挥作用的地方:由于您在同一服务器上运行 RegionServer 和 DataNode,因此文件的第一个 HDFS 块副本将写入同一服务器。另外两个副本将被写入其他 DataNode。因此,为该区域提供服务的 RegionServer 几乎总是可以访问数据的本地副本。
如果 RegionServer 崩溃或 RegionMaster 决定将区域重新分配给另一个 RegionServer(以保持集群平衡)怎么办?新的 RegionServer 将被迫首先执行远程读取,但一旦执行压缩(将更改日志合并到数据中) - 新的文件将由新的 RegionServer 写入 HDFS,并在 RegionServer 上创建本地副本(再次强调,因为 DataNode 和 RegionServer 运行在同一台服务器上)。
注意:如果 RegionServer 崩溃,之前分配给它的 Region 将被重新分配给多个 RegionServer。
好读物:
以下是 Google Bigtable 和 HBase 实现之间的命名差异(来自 Lars George,“HBase,权威指南”):
- HBase-Bigtable
- 地区 - 平板电脑
- RegionServer - 平板电脑服务器
- 冲洗 - 轻微压实
- 次要压缩 - 合并压缩
- 主要压实 - 主要压实
- 预写日志-提交日志
- HDFS-GFS
- Hadoop MapReduce - MapReduce
- MemStore-内存表
- HFile - SSTable
- 动物园管理员 - 胖乎乎的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)