解決直接讀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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章