Hbase多线程写入问题

小小晋 发布于 2015/02/02 11:23
阅读 1K+
收藏 0

Dear all:

多线程写入hbase(Version 0.98.6-cdh5.2.0),官方已经摒弃了HtablePool方式写入,推荐使用HConnection#getTable方式。

问题:我不想put一次,就flushCommit。于是我在client端使用了setFlusthAo(false)以及缓存的大小XMB。

这种客户端只能达到table达到XMB的时候才能自动flushCommit。但是我们的业务只允许几秒延迟的,于是乎我使用了每隔三秒flushCommit一次(在getTable的时候,启动线程对这个table每隔3s flushCommit一次)。

发现Htable线程不是安全的,在我flushCommit的同时,会有其他线程对这个table进行写入。然后报异常

ConcurrentModificationException

跟踪了下:  protected List<Row> writeAsyncBuffer = new LinkedList<Row>();

是后台提交数据到服务端同时,其他线程还往这里面put数据,导致这个出异常。

请问对于这种问题,谁有没有碰到过?然后是怎么处理的,谢谢!

加载中
返回顶部
顶部