了解 hbase 如何使用 hdfs
Posted
技术标签:
【中文标题】了解 hbase 如何使用 hdfs【英文标题】:understanding how hbase uses hdfs 【发布时间】:2016-10-04 09:48:50 【问题描述】:我正在尝试。 所以这是我的理解(如果我错了,请纠正我): 我知道 hbase 使用 hdfs 来存储数据并且数据被分成多个区域,并且每个区域服务器我服务于许多区域,所以我猜一个区域(专门)可以与多个数据节点通信以获取和放置数据,所以如果这是正确的,那么如果该区域服务器出现故障,那么存储在这些数据节点中的数据将无法再访问 提前谢谢你:)
【问题讨论】:
【参考方案1】:通常,Regionserver 运行在数据节点上。
由于 HDFS 的工作方式,Regionserver 将尽可能执行对本地数据节点的读取和写入,然后 HDFS 将确保将数据复制到另外两个随机数据节点上。因此,在任何时候,该 regionserver 写入的数据都存储在 HDFS 的 3 个节点上。
当一个 regionserver 服务于一个 region 时,只有它会读/写那个 region 的数据,但是如果 regionserver 进程崩溃,HBase master 会选择另一个 regionever 来服务那个 region。数据会在几分钟内不可用,但 HBase 会很快恢复。
如果整个主机发生故障,那么由于HDFS确保数据写入另外两个节点,场景是一样的——master会选择一个新的regionserver来打开故障区域并且数据不会丢失。
【讨论】:
三个数据节点中(用于复制),区域服务器只通信(或使用)一个数据节点 对于读取,通常是的。对于写入,写入将转到 1 个 DN,然后由 HDFS 复制到其他 DN。如果某个区域发生故障并在新主机上启动,那么很可能该主机在本地没有所需的数据,因此 Regionserver 将与集群中的其他节点通信以读取数据。因此,在这种情况下,它可以与集群中的任何其他数据节点通信 @StephenODonnell 是否会在重大压缩后重新建立数据位置? 是的,在一个主要的压缩之后,数据应该都在本地节点上。每个小压缩也会慢慢建立局部性,但它需要一个大压缩才能完全恢复它。以上是关于了解 hbase 如何使用 hdfs的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Spark Streaming读取HBase的数据并写入到HDFS