这个问题不考虑操作系统的swap
等等,而是 Hbase 这个软件会不会在已经对接HDFS
的时候,继续往本机硬盘写数据(出于类似网络太慢,内存太小,先缓存在硬盘等等考虑)
Q1:
疑问一:单机模式的 Hbase
应该是默认把数据存在本机硬盘中,直接对接的是本机的文件系统对吧?没有用到 HDFS
吧?单机模式要对接 HDFS
应该要主动配置 HDFS
的对吧?
下面疑问假设已经对接了 HDFS
Q2:
疑问二:
Hbase
的Hlog
(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等级持久化数据。