我如何理解wal:write-ahead日志提供了一致的put/delete操作。在区域中进行更改之前,所有操作都会写入到它。如果区域服务器出现问题,我们可以修复来自wal的信息。
我不明白的是,wal是如何在hdfs之上实现的?
来自hdfs文档:
客户端创建文件的请求不会立即到达namenode。实际上,最初hdfs客户机将文件数据缓存到一个临时本地文件中。应用程序写入将透明地重定向到此临时本地文件。当本地文件累积的数据超过一个hdfs块大小时,客户机会联系namenode。namenode将文件名插入到文件系统层次结构中,并为其分配数据块。namenode用datanode和目标数据块的标识响应客户机请求。然后,客户机将数据块从本地临时文件刷新到指定的datanode。关闭文件时,临时本地文件中剩余的未刷新数据将传输到datanode
所以,如果我做了一个小改动,它的内容还没有转发到hdfs,就有可能丢失wal的内容?
编辑:据我所知:http://hadoop-hbase.blogspot.com.by/2012/05/hbase-hdfs-and-durable-sync.html
我们可以强制hdfs客户机同步数据,而无需等待数据块大小变为相等。
2条答案
按热度按时间wlzqhblo1#
你可以看看刷新间隔。hoep此链接有助于:http://hbase.apache.org/0.94/book/perf.writing.html
3bygqnnd2#
在hbase中写入的数据经过以下几个阶段:put->wal->memstore->hfile。hfile是存储在hdfs中的实际文件。这就是上面的名称节点和数据节点所在的位置。并对hfile进行排序。
排序操作是在memstore中完成的,在达到一定的缓冲区大小后,它将刷新到hfile。
现在为了避免memstore中的数据丢失,使用了wal。
你可以在这里获得详细信息