我使用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,那么为什么它在关机时会被损坏。
我需要对刷新表的代码进行任何更改吗?
谢谢,哈尔
1条答案
按热度按时间t5fffqht1#
我几年前就得到了这样的东西,那是因为同步问题。我能看到解决办法。下面是另一个描述,带有put操作的序列图。
你的情况如何?可能这个put非常小,并且在内存存储中结束,而不是在hfile中,在hfile中您要检查它是否“损坏”。
尝试写25mb或更多—因为这是hadoop的页面大小,这会触发所有写入。这样你就可以简单地消除其他问题。如果这是可行的,那么您可以使用存储策略或只是等待更多时间。愚蠢的建议,但请注意,在正常的系统将有更多的写入,所以完全写入到hfile将触发无论如何。另一种选择是强制执行,但是您的产品可能会因为写入太多而出问题。