Hbase+HDFS的时候,Hbase 还会用到本机硬盘吗?

这个问题不考虑操作系统的 swap 等等,而是 Hbase 这个软件会不会在已经对接 HDFS 的时候,继续往本机硬盘写数据(出于类似网络太慢,内存太小,先缓存在硬盘等等考虑)

Q1:

疑问一:单机模式的 Hbase 应该是默认把数据存在本机硬盘中,直接对接的是本机的文件系统对吧?没有用到 HDFS 吧?单机模式要对接 HDFS 应该要主动配置 HDFS 的对吧?

下面疑问假设已经对接了 HDFS

Q2:

疑问二:

  • HbaseHlog (WAL)问题,每次 Hbase 的客户端的一个写操作,都会产生一条 Hlog 记录是吗?
  • 此时产生的 Hlog 是攒够一定体积(64KB之类的),在一次性发送到 HDFS 存储吗?
  • 如果是的话,那这些 Hlog 存在哪里呢?
  • 是存在 HBase 进程的用户态内存?
  • 可是这样的话 Hbase 这个软件宕机了(假设承载 Hbase 的 Server 不宕机,只是 Hbase 这个软件崩了,可能是被 kill -9 了或者自己的 Bug 把自己搞死了) ,Hlog 不就没了吗?这不完犊子吗?
  • 或者是先存到本机的硬盘上?即发往 HDFS 前先通过本机的文件系统存在本机的硬盘中防丢?

参考:

引用自《Hbase原理和实践》第六章 6.1 Hbase 的写入流程
HBase 可以通过设置HLog的持久化等级决定是否开启 HLog 机制以及 HLog 的落盘方式。HLog的持久化等级分为如下五个等级。
SKIP_WAL:只写缓存,不写HLog日志。因为只写内存,因此这种方式可以极大地提升写入性能,但是数据有丢失的风险。在实际应用过程中并不建议设置此等级,除非确认不要求数据的可靠性。
ASYNC_WAL:异步将数据写入HLog日志中。
SYNC_WAL:同步将数据写入日志文件中,需要注意的是,数据只是被写入文件系统中,并没有真正落盘。HDFS Flush策略详见HADOOP-6313。
FSYNC_WAL:同步将数据写入日志文件并强制落盘。这是最严格的日志写入等级,可以保证数据不会丢失,但是性能相对比较差。
USER_DEFAULT:如果用户没有指定持久化等级,默认HBase使用SYNC_WAL等级持久化数据。
阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进