Hbase高级特性及其优化分析

一、Hbase中的常见属性

       VERSIONS:指版本数

       MIN_VERSIONS=> '0':最小版本数

       TTL=> 'FOREVER':版本存活时间

              假设versions=10,mini_version=4

              到达TTL时间后,version-mini_version=6,最老的6个版本的值会被清空

             

              create't2', {NAME => 'f1', VERSIONS => 1000,MIN_VERSIONS => '1000',TTL =>'31536000'}

             

       BLOOMFILTER=> 'ROW':布隆过滤器

                     -》NONE:不使用布隆过滤器

                     -》ROW:行级布隆过滤器

                     -》ROWCOL:行列布隆过滤器

                     进行storefile文件检索的时候:

                     ROW:会对当前的storefile进行判断,判断是否有我需要的rowkey,

                                   如果有就读,没有就跳过

                     ROWCOL:会对当前的storefile进行判断,判断是否有我需要的rowkey+列标签的组合,

                                   如果有就读,没有就跳过

                                   这种消耗的资源较大

       BLOCKSIZE=> '65536':数据块的大小,如果你的数据块越小,索引就越大

                                                 占用的内存就越高,速度会更快

                     create't3', {NAME => 'f1', BLOCKSIZE => '65536'}

       BLOCKCACHE=> 'true':缓存,默认就是true

                            建议:在企业中,对于不常使用的列簇,关闭缓存

       IN_MEMORY=> 'false':缓存中的级别,设置成TRUE,将优先缓存该列簇

                            缓存清理的算法:LRU

                           

二、hbase中实现预分区

       设计分区时按照rowkey的前缀

       -》第一种:创建了5个分区

              create'split1', 'f1', SPLITS => ['100', '200', '300', '400']

              put'split1','001000000_2016','f1:name','111'           会放到第一个分区中

              put'split1','501000000_2016','f1:name','222'           会放到第五个分区中

       -》第二种

              create'split2', 'f1', SPLITS_FILE => '/opt/datas/splits.txt'

       -》第三种(默认创建15个分区,一般不使用)

              create'split3', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

       -》第四种:Java client

              byte[][]splitKeys = {

                     Bytes.toBytes("100"),

                     Bytes.toBytes("200"),

                     Bytes.toBytes("300")

              };

三、hbase中的优化

       -》hbase中的压缩

              -》时间换取空间

              -》Hadoop是否支持需要压缩类型

                     snappy安装:将压缩包放到并解压/opt/modules/hadoop-2.5.0/lib/native

                     bin/hadoopchecknative

              -》检测hbase当前是否支持压缩

                     bin/hbaseorg.apache.hadoop.hbase.util.CompressionTest /home/beifeng/snappy.txt snappy

              -》修改配置支持压缩

                     拷贝hadoop/lib下的native下的所有so文件和hadoop-snappy-0.0.1-SNAPSHOT.jar到hbase/lib下面

                     cp../hadoop-2.5.0/lib/hadoop-snappy-0.0.1-SNAPSHOT.jar lib/

                     cp../hadoop-2.5.0/lib/native/* lib/

                     如果有多台regionserver,要将文件拷贝到每一台regionserver上

                     重启集群,测试

                     如果继续报错:

                     cp../hadoop-2.5.0/lib/native/* ../jdk1.7.0_67/jre/lib/amd64/

                     重启测试

                     2016-12-1919:10:48,830 INFO  [main]compress.CodecPool: Got brand-new decompressor [.snappy]

SUCCESS

              -》创建表测试

                     create'snappytest',{NAME=>'F1',COMPRESSION => 'SNAPPY'},{NAME=>'F2'}

      

       -》垃圾回收参数调优

              -》JVM:

                     新生代:空间比较小,主要存储新生成的对象,生存周期比较短

                                   Eden、survivor

                     老年代:空间表较大、主要存储应用程序中生命周期较长的对象

                     永生代:永久保存的区域,存储meta和class的信息

                                   元空间(本地内存)

                            GC:

                            ParrallelNew Collector 垃圾回收策略

                            特点:速度比较快,但是不适用与大数据量,GC停顿

                            并行标记回收器(ConcurrentMark-Sweep Collector):

                            特点:速度相对较慢,适用于大数据量的回收,避免GC停顿

                           

                     exportHBASE_REGIONSERVER_OPTS=”-Xmx8g -Xms8G -Xmn128m -XX:UseParNewGC-XX:UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc-XX:+PrintGCDetails -XX:+PrintGCTimeStamps-Xloggc:$HBASE_HOME/logs/gc-${hostname}-hbase.log”

                    

                     调优:将上述配置放入conf/hbase-env.sh文件

      

       -》hbase中内存的调优

              -》memstore

                     阈值:128M

                       <property>

                            <name>hbase.hregion.memstore.flush.size</name>

                            <value>134217728</value>

                       </property>

                     正常情况:关闭自动溢写

                                     在业务量较低时,手动触发flush

              -》cache

                     在注重读响应时间的应用场景下,可以将 BlockCache设置大些,Memstore设置小些,以加大缓存的命中率。

                        <name>hbase.regionserver.global.memstore.upperLimit</name>

                            <value>0.4</value>

                            <name>hfile.block.cache.size</name>

                            <value>0.4</value>

                     按照以下百分比分配给Single、Multi、InMemory使用:0.25、0.50和0.25。

                    

              -》本地memstore缓存

                     内存的孔洞过多,需要进行垃圾回收,造成业务停顿

                     <name>hbase.hregion.memstore.mslab.enabled</name>

                     <value>true</value>

                     缺点:容易造成资源的浪费

              -》compact:用于文件的合并和清除被删除的数据

                     -》minor compaction:小文件(满足一定的条件)的合并,轻量级,频繁执行

                                                        它不会删除被标记为“删除”的数据和以过期的数据

                     -》major compaction

                            把所有的storefile合并成一个单一的storefile文件,

                            在文件合并期间系统会删除标记为"删除"标记的数据和过期失效的数据,

                            同时会block所有客户端对该操作所属的region的请求直到合并完毕,

                            最后删除已合并的storefile文件。

                                <name>hbase.hregion.majorcompaction</name>

                                   <value>604800000</value>

                            改成0就是关闭

                           

                            企业中手动触发:major_compact

              -》split

                     最好关闭自动拆分,采用手动拆分方式:split

                        <name>hbase.hregion.max.filesize</name>

                            <value>10737418240</value>

                            建议改成100G

四、hbase表的迁移

       -》hadoop数据迁移类似

       -》hdfs

       -》表的迁移

              -》将数据迁移-》hadoop distcp 

                            bin/hdfsfsck /

                            bin/hbasehbck

              -》元数据的恢复

                           

       实验步骤:

       -》第一步:将t5表迁移到另一个hdfs集群

              在迁移之前要进行flush操作 (原路径 目标路径)

              bin/Hadoopdistcp hftp://192.168.134.191:50070/hbase/data/default/t5 hdfs://192.168.134.140:8020/distcp/

       -》第二步:删除t5表

       -》第三步:t5表迁移回来

              bin/Hadoopdistcp hftp://192.168.134.140:50070/distcp/t5hdfs://192.168.134.191:8020/hbase/data/default/

       -》第四步:查询hbase表

              list可以查询,无法操作

              ERROR:Unknown table t5!

       -》第五步:元数据恢复

              bin/hbasehbck  -fixAssignments –fixMeta

五、索引的介绍

 

       rowkey:110_20161211

                 110_20161212

                 110_20161213

                 110_20170213

                

       需求1:查找某个用户某一时间段内的通话记录

       需求2:查询某一时间段内所有用户的通话记录

      

       索引表方式实现:

              源  表:110_20161211

              索引表:20161211_110      value:对应源表中的rowkey:110_20161211

             

       需求:通过某一列的值来查询另一列的值

              name,age:查询所有今年18岁的用户的姓名

             

              传统思路:1-查询所有18岁的用户的rowkey

                              2-根据rowkey查询name

      

       索引实现:rowkey:18

                       info:rowkey:18岁对应的rowkey

                      

       索引表同步的问题:

              -》第一种(效率低):在客户端执行,对源表操作时,同时对索引表进行操作

              -》第二种:编写协处理器

                                   在server端运行在客户端同步的逻辑,但是中小型企业不会自己编写

              -》其他框架:第三方工具

                     -》Phoenix:底层就是协处理器

                     -》solr

                     -》elasticsearch

              协处理器类型:

                     observer:观察者类,类似于RDBMS中的触发器

                     endpoint:终端类,类似于存储过程

六、hbase与其他框架的集成

       -》Hive

       -》sqoop

       -》flume

       -》hue

      

-》sqoop与hbase集成(使用的是cdh版本的)

       用于hdfs与RDBMS之间的导入导出

       -》配置conf/sqoop-env.sh

       原始

新配置

              exportHADOOP_COMMON_HOME=/opt/modules/hadoop-2.5.0

 

              #Setpath to where hadoop-*-core.jar is available

              exportHADOOP_MAPRED_HOME=/opt/modules/hadoop-2.5.0

 

              #setthe path to where bin/hbase is available

              exportHBASE_HOME=/opt/modules/hbase-0.98.6-hadoop2

 

              #Setthe path to where bin/hive is available

              #exportHIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6

 

              #Setthe path for where zookeper config dir is

              exportZOOCFGDIR=/opt/modules/zookeeper-3.4.5/conf

       导入:

              bin/sqoopimport \

              --connect\

              jdbc:MySQL://hadoop-senior01.ibeifeng.com:3306/test\

              --usernameroot \

              --password123456 \

              --tablemy_user \

              --hbase-create-table\

              --hbase-tabletest \

              --hbase-row-keyid \

              --column-familyinfo \

              -m1

在HBase中查询:

       导出:没有导出

       怎么实现用sqoop导出hbase的数据?

       搭桥:hive

              hive与hbase集成

                     |

                     将hbase表中的数据存储到另一张hive表中

                     |

                     通过hdfs导出

                           

-》hue集成

       -》启动hbase的thrift

              bin/hbase-daemon.shstart thrift

       —》修改hue.ini配置文件(/opt/cdh-5.3.6/hue-3.7.0-cdh5.3.6/desktop/conf/)

         hbase_clusters=(Cluster|hadoop-senior01.ibeifeng.com:9090)

         # HBase configuration directory, wherehbase-site.xml is located.

        hbase_conf_dir=/opt/modules/hbase-0.98.6-hadoop2/conf

       -》启动hue

              hue:build/env/bin/supervisor

hadoop-senior01.ibeifeng.com:8888

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值