client端
HTable.setWriteBufferSize(writeBufferSize)
设置HTable客户端的写buffer大小,与上面的参数配合使用。当达到设置的writeBufferSize时,才会触发提交到服务端的请求。(不适合实时读写业务)
Put.setWriteToWAL(false) 关闭WAL日志
客户端向集群中的RegionServer提交PUT数据时,首先会先写WAL(Write Ahead Log)日志(即HLog),只有当WAL日志写成功后,再接着写MemStore,然后客户端被通知提交数据成功;如果写WAL日志失败,客户端则被通知提交失败。这样做的好处是可以做到RegionServer宕机后的数据恢复。
关闭WAL可提升写入性能,但是一旦RegionServer宕机,Put的数据将会无法根据WAL日志进行恢复。
批量PUT(put(List)),多线程写入。根据业务选择。
在spark写入hbase时,可以使用Mapreduce的方式,具体参考api saveAsHadoopDataset。
server端
server端写入数据流程
从zookeeper中的meta表获取region信息,根据表名,rowkey找到对应的regionserver。
数据写到HLog(参考client端的关闭WAL日志操作)和Memostore
MemStore达到一个阈值后则把数据刷成一个StoreFile文件。若MemStore中的数据有丢失,则可以总HLog上恢复 <