Hbase优化总结

1.关闭自动的split
大 Region 意味着较大的 StoreFile,compaction 时对内存也是一个挑战。如果你的应用场景中,某个时间点的访问量较低,那么在此时做 compact 和 split,既能顺利完成 split 和 compaction,又能保证绝大多数时间平稳的读写性能。compaction 是无法避免的,split 可以从自动调整为手动。只要通过将这个参数值调大到某个很难达到的值,比如 100G,就可以间接禁用自动 split(RegionServer 不会对未到达 100G 的 Region 做 split)。再配合 RegionSplitter 这个工具,在需要 split 时,手动 split。手动 split 在灵活性和稳定性上比起自动 split 要高很多,而且管理成本增加不多
2.Scan的时候设置cache

  • 在HBase的conf配置文件中进行配置 hbase.client.scanner.caching
  • 通过调用 HTble.setScannerCaching(int scannerCaching) 进行配置;
  • 通过调用 Sacn.setCaching(int caching) 进行配置,三者的优先级越来越高。

3.缓存策略(setCaching);

                        HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
            if (admin.tableExists(tableName)) {
                logger.info("table {} is exists", tableName);
                return;
            }
            HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
            for (String str : cfs) {
                HColumnDescriptor columnDescriptor = new HColumnDescriptor(str);
//               columnDescriptor.setCompressionType(Compression.Algorithm.SNAPPY);
                //中数据的最大版本,如果只需要保存最新版本的数据,那么可以设置 setMaxVersions(1)
                columnDescriptor.setMaxVersions(1);
   //创建表的时候,可以通过 HColumnDEscriptor.setInMemory(true) 将表放到RegionServer的缓存中,保证在读取的时候被cache命中。
                columnDescriptor.setInMemory(true);
                columnDescriptor.setTimeToLive(-1);
                descriptor.addFamily(columnDescriptor);
            }
            admin.createTable(descriptor, splitKey);

4.Hbase split
在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中。
在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中。在自动split策略中,当一个region达到一定的大小就会自动split成两个region。table在region中是按照row key来排序的,并且一个row key所对应的行只会存储在一个region中,这一点保证了Hbase的强一致性 。

在一个region中有一个或多个stroe,每个stroe对应一个column families(列族)。一个store中包含一个memstore 和 0 或 多个store files。每个column family 是分开存放和分开访问的。

https://yq.aliyun.com/articles/43539

5.Hbase Delete过程
Hbase的删除并不像传统关系型数据库的删除,hbase删除动作并不会立刻将HBase存储的数据进行删除,而是心在制定的KeyValue存储单元上打上删除标志。等到下一次region合并、分裂等操作时才会将所有的数据进行移除。
在进行删除会。可以通过指定对某一行的某一个列簇、或者某一个列、或者某一个列中具体版本的数据进行删除。
如果在没有任何设定的情况下,则会删除整行数据。如果使用 addFamily 函数,则会删除改行中的指定列簇中的所有数据。

6.HBase Compaction
  HBase是一种Log-Structured Merge Tree架构模式,用户数据写入先写WAL,再写缓存,满足一定条件后缓存数据会执行flush操作真正落盘,形成一个数据文件HFile。随着数据写入不断增多,flush次数也会不断增多,进而HFile数据文件就会越来越多。然而,太多数据文件会导致数据查询IO次数增多,因此HBase尝试着不断对这些文件进行合并,这个合并过程称为Compaction。

  Compaction会从一个region的一个store中选择一些hfile文件进行合并。合并说来原理很简单,先从这些待合并的数据文件中读出KeyValues,再按照由小到大排列后写入一个新的文件中。之后,这个新生成的文件就会取代之前待合并的所有文件对外提供服务。HBase根据合并规模将Compaction分为了两类:MinorCompaction和MajorCompaction
  

http://www.thebigdata.cn/HBase/30633.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值