memstoreFlushSize是什么呢?

memstoreFlushSize为HRegion上设定的一个阈值,当MemStore的大小超过这个阈值时,将会发起flush请求。

它的计算首先是由Table决定的,即每个表可以设定自己的memstoreFlushSize,通过关键字MEMSTORE_FLUSHSIZE来设定,

如果表中未设定,则取参数hbase.hregion.memstore.flush.size,

如果参数再无配置的话,则默认为1024*1024*128L,即128M。

★HBase版本:1.3.1

源码位置:https://github.com/apache/hbase/blob/master/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java

源码内容:

void setHTableSpecificConf() {
if (this.htableDescriptor == null) return;
long flushSize = this.htableDescriptor.getMemStoreFlushSize(); if (flushSize <= 0) {
flushSize = conf.getLong(HConstants.HREGION_MEMSTORE_FLUSH_SIZE,
HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE);
}
this.memstoreFlushSize = flushSize;
this.blockingMemStoreSize = this.memstoreFlushSize *
conf.getLong(HConstants.HREGION_MEMSTORE_BLOCK_MULTIPLIER,
HConstants.DEFAULT_HREGION_MEMSTORE_BLOCK_MULTIPLIER);
}

那么,如何设置table的memstoreFlushSize呢?这里选择了在通过java api创建表的时候进行设置。代码样例:

package api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory; public class create_table_sample1 {
public static void main(String[] args) throws Exception {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "192.168.6.3,192.168.6.4,192.168.6.5");
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin(); HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("TEST1"));
desc.setMemStoreFlushSize(2097152L); //2M(默认128M) HColumnDescriptor family1 = new HColumnDescriptor(constants.COLUMN_FAMILY_DF.getBytes());
family1.setTimeToLive(2 * 60 * 60 * 24); //过期时间
family1.setMaxVersions(2); //版本数
desc.addFamily(family1);
HColumnDescriptor family2 = new HColumnDescriptor(constants.COLUMN_FAMILY_EX.getBytes());
family2.setTimeToLive(3 * 60 * 60 * 24); //过期时间
family2.setMaxVersions(3); //版本数
desc.addFamily(family2); try {
admin.createTable(desc);
} catch (Exception e) {
e.printStackTrace();
}
admin.close();
connection.close();
}
}

通过hbase shell也许也可以设置,不过没有试验过。

--END--

最新文章

  1. C中signed与unsigned
  2. 最大密集子图(01分数规划+二分+最小割)POJ3155
  3. Windows不重启就使环境变量修改生效
  4. 《day15---多线程安全问题_JDK1.5的锁机制》
  5. 常用的php数组排序函数
  6. poj 3150 Cellular Automaton
  7. POJ 2352 Stars
  8. rel=nofollow 是什么意思
  9. HDU-6060 RXD and dividing
  10. 知识点:spring 完全手册
  11. python入门之两种方法修改文件内容
  12. bzoj2716/2648 / P4169 [Violet]天使玩偶/SJY摆棋子
  13. grafana 邮件报警
  14. thinkPHP3.2.2 数据库对表的操作
  15. Windows Phone 页面切换动画
  16. codeforces 256 div2 C. Painting Fence 分治
  17. MySQL —— 基本查询方法
  18. Android各版本及API对应关系,持续更新!
  19. [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x不兼容点
  20. 近期关于CI/CD策略以及git分支模型的思考

热门文章

  1. 简述FPGA项目之前的一些事
  2. Java堆外内存之一:堆外内存场景介绍(对象池VS堆外内存)
  3. 同步机制之--java之CountDownLatch闭锁
  4. Java Web不能不懂的知识
  5. Centos6-7安装Python3.5以及SSL的编译安装,识别https
  6. nginx web服务优化
  7. 【POJ】3616 Milking Time(dp)
  8. Ceph的工作原理及流程
  9. apt-get使用国内镜像源
  10. [Z] 关于Python Tornado的一些资料