关于hbase

为什么hbase在建立表时预先分配数个region?
1)因为所有的数据都往一个region灌入,容易引起单节点负载升高,从而影响入库性能.

2)只有一个region随着数据量到达region的最大值,势必导致region分裂,造成系统负载过高,甚至服务停止。

hbase如何实现二级索引?

使用solr/ES自己开发二级索引,使用Lily Hbase(solr+hbase)实现二级索引。

 要点是:

1) 保证主表和索引表在同一个regionserver上(通过自定义的balancer实现) 

2) 使用coprocessor实现索引表的创建和插入。

hbase部分参数:

hbase.regionserver.global.memstore.upperLimit/lowerLimit
默认值:0.4/0.35
upperlimit说明:hbase.hregion.memstore.flush.size 这个参数的作用是当单个Region内所有的memstore大小总和超过指定值时,flush该region的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。
这个参数的作用是防止内存占用过大,当ReigonServer内所有region的memstores所占用内存总和达到heap的40%时,HBase会强制block所有的更新并flush这些region以释放所有memstore占用的内存。
owerLimit说明: 同upperLimit,只不过lowerLimit在所有region的memstores所占用内存达到Heap的35%时,不flush所有的memstore。它会找一个memstore内存占用最大的region,做个别flush,此时写更新还是会被block。lowerLimit算是一个在所有region强制flush导致性能降低前的补救措施。在日志中,表现为 “** Flush thread woke up with memory above low water.”

Base上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写;另外一部分作为BlockCache,主要用于读。
hbase.hregion.majorcompaction ,这个目前通过定时程序实现
hbase.hregion.majorcompaction表示majorcompaction的周期,默认是1天,majorcompaction与普通的compaction的区别是majorcompaction会清除过期的历史版本数据,同时合并storefile,而普通的compaction只做合并,通常都是majorcompaction,调为0,然后手工定期的去执行一下majorcompaction,适当调小点compacionThreshold。

现有系统设置:

hbase存储信令的主键规则:被叫号码左侧补0至20位再倒置,再加上19位的时间戳(即在Long.MAXVALUE-(new Date()).getTime()的值后补0到19位)+4位随机数

hbase.hregion.max.filesize默认256M,实际设置50G,超过50G做SPLIT,实际上compact和split对应用读写性能冲击很大,compact无法避免,但是对split可以关闭自动,改为手动,在访问量较低的时段手动进行。


不论是hbase-env.sh还是Hadoop-env.sh中的JAVA_HOME变量的设置,都应该是JDK的实际路径,而不是直接赋上${JAVA_HOME}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值