HBase中数据落地到磁盘的几个时刻

HBase的数据都是先写到memstore中,然后才会flush到磁盘,那么什么时候会触发memstore的flush?

一、从memstore来看

当一个region的memstore中缓存的数据达到memstore的大小时,会触发memstore级别的flush操作。memcache的size由参数hbase.hregion.memstore.flush.size指定,默认是128M。一般需要将该值调大,但并非越大越好。

二、从region来看

当region所有的memstore的size之和达到参数hbase.hregion.memstore.block.multipiler * hbase.hregion.memstore.flush.size的值时会触发flush。参数默认值分别为4和5242880。当需要调整这两个参数的时候,一般选择调整后一个参数,不动第一个。region级别的flush一般很少发生,因为Column Family的数量一般不会超过三个(经验值),所以正常情况下,达不到上述两个参数的乘积。

三、从regionserver来看

  1. 当regionserver所有的memstore缓存的数据的大小之和超过低水位线时,将会触发flush操作,且先从memstore最大的region开始flush,以此类推,直到下降到低水位线之下。
  2. 如果regionserver所有的memstore缓存的数据大小之和超过高水位线,那么reginserver将会阻塞读写,并强制flush
相关参数
hbase.regionserver.global.memstore.size 默认值 0.40(百分比)
hbase.regionserver.global.memstore.size.lower.limit 0.95 (百分比)

高水位的值为 :heapsize(堆内存)* hbase.regionserver.global.memstore.size
低水位的值为 :heapsize(堆内存)* hbase.regionserver.global.memstore.size * hbase.regionserver.global.memstore.size.lower.limit
一般堆内存大小不超过32GB,否则指针压缩就失效了

四、从WAL看

WAL的大小为hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs决定,达到这个值之后,就会触发flush。2.0之后,hbase.regionserver.hlog.blocksize的默认值由一个HDFS 的block大小变为HDFS block的大小的两倍了。
一般需要略大于hbase.regionserver.global.memstore.upperLimit * HBASE_HEAPSIZE,避免WAL频繁的触发flush。一般调大hbase.regionserver.maxlogs的值,默认是32

五、定期flush

参数hbase.regionserver.optionalcacheflushinterval默认值1h;设置为0表示禁止自动flush;

六、手动flush

使用 flush 'tablename' 或者 flush 'regionname'对一张表或者一个region进行flush,region的名字可以在web界面看到

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下两种方式将HDFS数据导入到HBase: 1. 使用HBase提供的工具类:HBase提供了hbase org.apache.hadoop.hbase.mapreduce.ImportTsv这个工具类,可以将TSV、CSV、SequenceFile等格式的数据导入到HBase。 使用该工具进行数据导入的步骤如下: (1) 将待导入数据转化为逗号分隔的文本文件(CSV文件),例如: id,name,age 1,张三,18 2,李四,20 3,王五,22 (2) 使用以下命令进行数据导入: $ hadoop jar /path/to/hbase.jar \ org.apache.hadoop.hbase.mapreduce.ImportTsv \ -Dimporttsv.separator=',' \ -Dimporttsv.columns=HBASE_ROW_KEY,cf:name,cf:age \ test_table \ /path/to/data.csv 其,-Dimporttsv.separator=','表示CSV文件字段之间的分隔符为逗号;-Dimporttsv.columns=HBASE_ROW_KEY,cf:name,cf:age表示将CSV文件的第一列作为行键,第二列和第三列分别放入名为cf:name和cf:age的列族。 2. 使用自定义MapReduce程序:如果需要对数据进行自定义转换或多步处理,可以使用自定义的MapReduce程序将数据从HDFS导入到HBase。 具体步骤如下: (1) 编写自定义Mapper类,将HDFS数据转换为HBase数据格式。 (2) 编写自定义Reducer类,将Mapper阶段输出的键值对写入HBase。 (3) 配置MapReduce作业,并提交到Hadoop集群上运行。在作业配置指定HBase表的名称、列族以及行键。 (4) 等待MapReduce作业完成,检查HBase数据是否正确导入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值