解决直接读HFile时因表数据写入而导致文件目录变化问题

转载请标明出处:http://blackwing.iteye.com/admin/blogs/2188077

数据量大的情况下,通过直接读取HFile来获得hbase表数据性能比通过HTable读取有优势,但当读取HFile时,table同时有数据写入,那么可能因为split、compact等原因导致某些HFile不存在,导致任务失败。

如果通过hdfs的snapshot快照功能,对某个table进行快照后,在读取快照,则不会出现问题。步骤如下:

1. 把需要快照的表设置为snapshottable
hdfs dfsadmin -allowSnapshot <path>

对应的java入口
HdfsAdmin : void allowSnapshot(Path path)



2. 生成快照
hdfs dfs -createSnapshot <path> [<snapshotName>]

对应的java入口
FileSystem : createSnapshot(Path path) 或者 createSnapshot(Path path, String snapshotName)


快照会存放在被快照目录的隐藏文件.snapshot目录下;创建snapshot时,需要是文件夹的owner


接下来,之间读取.snapshot目录下对应快照就行。


官方参考文章:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

你可能感兴趣的:(hadoop,hbase,snapshot)