使用HBase(客户端为0.98,服务器为HBase 1.1.2),基础数据存储为HDFS。
我尝试使用以下代码刷新表,并且能够看到在Hadoop中刷新到HFile位置的数据。
htable.put(puts);
htable.close();
admin.flush(tableName);
Hadoop中的数据位置
./hadoop fs -du /hbase/data/default/tableName/
当我关闭电源并重新启动节点时,重新启动Hadoop并且HBase能够看到HDFS中的数据已损坏。
如果数据已正确刷新到HFile,为什么在电源关闭期间它会被损坏。
我是否需要对代码进行更改才能刷新表格?
谢谢, HAR
答案 0 :(得分:0)
几年前我得到的东西就是sync problem。我可以看到解决方案。 Here是另一种描述,带有put操作的序列图。
你的情况会怎样?也许那个put非常小,并且以内存存储结束,而不是在HFile中,在那里你要查看它是否已损坏"或不是。
尝试写入25MB或更多 - 因为这是hadoop的页面大小,并且会触发所有写入。这样你就可以简单地消除其他问题。如果可行 - 那么您可以使用存储策略或只是等待更多。愚蠢的建议,但请注意,在正常系统中会有更多写入,因此无论如何都会触发对HFile的完整写入。其他选择是强迫它,但是你的制作可能会因为写入太多而变坏。