HBase纪要

集群环境下的安装部署:

配置一个10个节点的集群。节点的名字分别是master.foo.com,host1.foo.com到host9.foo.com。

HBase master与HDFS  NameNode都运行在master.foo.com上。

Region服务器运行在host1.foo.com到host9.foo.com上。

3个节点的ZooKeeper分别运行在zk1.foo.com,zk2.foo.com,zk2.foo.com。

ZooKeeper的元数据目录设置为/var/zookeeper。

主要配置文件——hbase-site.xml、regionservers、hbase-env.sh都可以再Hbase的conf目录下找到。

配置如下:

1.hbase-site.xml

<configuration>
<property>
  <name>hbase.zookeeper.quorum</name>
<value>zk1.foo.com,zk2.foo.com,zk3.foo.com</value>
</ property >
<property>
  <name>hbase.zookeeper.property.dataDir</name>
<value>/var/zookeeper</value>
</ property >
<property>
  <name>hbase.rootdir </name>
<value>hdfs://master.foo.com:9000/hbase </value>
</ property >
<property>
  <name>dfs.replication </name>
<value>3 </value>
</ property >
<property>
  <name>hbase.cluster.distributed </name>
<value>true </value>
</ property >
</ configuration>


2.regionservers

  记录所有region服务器的主机列表。

  host1.foo.com
  host2.foo.com
  host3.foo.com
  host4.foo.com
  host5.foo.com
  host6.foo.com
  host7.foo.com
  host8.foo.com
  host9.foo.com

3.hbase-env.sh

   HBase的环境变量等信息需要在这个文件中设置。例如,Hbase守护进程的JVM启动参数:Java堆大小和垃圾回收策略。

  还可以设置HBase配置文件的目录、日志目录、SSH选项、进程pid文件的目录等。

  改变配置后需要重启HBase才能生效。

这里我们将HBase的堆设置为4GB,以替代默认的1GB。

 export  HBASE_HEAPSIZE=4096

 

 export HBASE_MANAGES_ZK=false         --不依赖Hbase管理集群

 

 配置HBase自己管理ZK

例:如果需要HBase在节点rs{1,2,3,4,5}.foo.com上管理ZooKeeper,并绑定客户端服务端口2222(默认2181)。

conf/hbase-env.sh

    export HBASE_MANAGES_ZK=true   

 

在conf/hbase-site.xml配置zk相关信息:

<property>
  <name>hbase.zookeeper.quorum</name>
<value>zk1.foo.com,zk2.foo.com,zk3.foo.com</value>
</ property >
<property>
  <name>hbase.zookeeper.property.dataDir</name>
<value>/var/zookeeper</value>
</ property >
<property>
  <name>hbase.zookeeper.property.clientPort </name>
<value>2222 </value>
</ property >

注意:一旦用户编辑完配置文件,就需要文件同步到集群的所有服务器上。

用户可以使用rsync完成这项工作。

集群中每台集群上的配置都相同,每台机器都可以作为master

如:rsync   -vaz   /usr/local/hbase   /usr/local


Hbase命令操作

Hbase管理命令:

Start-hbase.sh         --启动hbase数据库

Hbase  shell         --进入hbase shell界面

Exit                  --退出hbase shell界面

Stop-hbase.sh         --关闭数据库

hbase-daemon.sh  start master     --启动master

hbase-daemon.sh  start master   -backup   启动备份的master

hbase-daemon.sh  stop  regionserver   停止region

 

balance_switch  false        关闭负载均衡

Graceful_stop.sh   hostname    关闭hostname主机上的hbase(先移region,之后关闭)    

balance_switch  true          启动负载均衡

 

启动成功的守护进程:

HMaster

HQuarumPeer     ——如果是ZooKeeper自己管理则是QuorumPeerMain

HRegionServer 

ThriftServer   

 

通用命令:

Status   --提供Hbase的状态,如:服务器的数量

Version  --提供正在使用Hbase的版本

Table_help           --表引用命令提供帮助

Whoami              --提供有关用户的信息

Debug     --切换调试模式,非调试模式shell日志级别是error,不会在控制台打印

Debug?        --查看当前的调试模式

 

数据定义语言

Create ‘test’,’cf1’      创建表test,有一个cf1的列族

List                  --展示所有表

--删除表之前,一定要先将其禁用

Disable ‘test’

Is_disabled             --验证表是否被禁用

Enable                 --启用一个表

Is_enabled             验证表是否已启用

Alter                改变一个表

          Alter  ‘test’,readonly(option)       --设置表为只读

          Alter   ‘test’,’delete’=>’professional’   --删除指定列族professional

Drop  ‘test’

Disable_all             用于禁用所有匹配给定正则表达式的表

Drop_all  ‘t.*’           --删除匹配regex表,也要向禁用表

 

Exists ‘test’            判断表是否存在

 

数据操纵语言

Put  ‘test’,’row1’,’cf1’,’val1’

Put  ‘test’,’row1’,’cf1’,’val2’        --没有更新语句,直接覆盖

Scan ‘test’              --查看表下的所有数据

Scan ‘test’,{versions=>3}

get  ‘test’,’row1’,’cf1’       --获取单元格数据

get_counter               --返回一个计数器数值

incr                      --给计数器加1

delete ‘test’,’row1’,’cf1’,’ql1’          --删除特定单元格

deleteall ‘test’,’row1’                  --删除row1的所有单元格

count                     --计数并返回表中的行的数目

truncate                   --清空表数据

 

表授权语句:

Grant   授权

Revoke   撤销用户权限

User_permission       列出特定表的所有权限

  • R - 代表读取权限
  • W - 代表写权限
  • X - 代表执行权限
  • C - 代表创建权限
  • A - 代表管理权限

Grant  ‘Tutorialspoint’,’RWXCA’     --授予用户所有权限

Revoke ‘Tutorialspoint’             --撤销用户所有权限

User_permission   ‘emp’          --查看emp表的所有用户权限

 

工具:

Assign               --分配一个region到一台region服务器

Balance_switch         --切换负载均衡状态

Balancer              --启动负载均衡

Close_region           --关闭一个region

Compact              --开启某个region或一张表的异步合并操作

Move                --移动一个region到不同的服务器中

Split                 --拆分一个region或一张表

Unassign             --下线一个region

 

执行shell脚本:

Echo “status”   |  hbase shell

Cat ~/hbase-shell-status.rb

Hbase  shell    ~/hbase-shell-status.rb



客户端API:最佳实践

1.      禁止自动刷写   setAutoFlush(false)

    这时,添加的put实例会被添加到一个相同的写入缓存中,在禁用自动刷写时,这些操作直到写缓冲区被填满时才会被送出。

   或者用户调用flushCommits()方法

   或调用HTable实例的close方法隐式调用flushCommits()方法

 

2.      使用扫描缓存setCaching()

    如果使用默认值1,则map任务会在处理每条记录时都请求region服务器。

    而如果设置为500,则一次可以传送500行数据到客户端进行处理。

这里要权衡传输数据的开销和内存的开销。

 

  表级别的扫描缓存    setScannerCaching()

 

3.      限定扫描范围

Scan扫描的范围尽可能的小

 

4.      关闭ResultScanner

HTabel.getScanner()返回的ResultScanner实例会消耗大量资源。

一定要在try/catch的finally块中关闭ResultScanner

5.      块缓存用法

     对Scan实例能够通过setCacheBlocks()方法来设置使用region服务器的块缓存。

     如果在MapReduce作业中使用扫描,这个方法应当被设置成false。

     对于那些频繁访问的行,建议使用块缓存。

 

6.      优化获取行健的方式

     适当的选用过滤器,最快捷的返回数据

7.      关闭Put上的WAL(关闭日志)

    服务器端不会把这个Put写到WAL中,而只把它写到memstore里。

     使用put的wrireToWAL(false)来关闭WAL

 

 

 

配置上的一些优化措施:

1.      减少ZooKeeper超时的发生

Zookeeper.session.timeout   属性来设置

2.      增加处理线程

Hbase.regionserver.handler.count属性定义了响应外部用户访问数据表请求的线程数。

默认值10有点小。

3.      增加堆大小

在hbase-env.sh文件中调整HBASE_HEAPSIZE的设置

4.      启用数据压缩

推荐使用Snappy或者LZO

配置启动region服务器时检查压缩是否正确安装:

<property>

   <name>hbase.regionserver.codecs</name>

   <value>snappy,lzo</value>

</property>

启用压缩:

hbase支持列族级别上的数据压缩。

create  ‘testtable’,{name=>’colfam1’,compression=>’GZ’}   //创建表,并对’colfam1’列族上的数据启用GZ压缩

describe ‘testtable’

 

//修改表,并启用压缩

create  ‘testtable2’,’colfam1’

disable   ‘testtable2’           --修改表的属性时,一定要先禁用表

alter  ‘testtable2’.{name=>’colfam1’,compression=>’GZ’}

enable  ‘testtable2’


5.      增加region大小

更大的region可以减少集群总的region数目。

管理较少的region可以让集群的运行更平稳。

默认情况下,region的大小事256MB。可以配置1GB或者更大的region。

      Hbase.hregion.max.filesize属性的值   
            

6.      调整块缓存大小

控制堆中块缓存大小的属性是一个用浮点数类型的百分比,默认值是20%。

   perf.hfile.block.cache.size

增大块缓存的情况:

Ø  如果块缓存的使用中,发现有很多的块被换出

Ø  用户负载大多数为读请求时,hbase将更加需要块缓存

 

7.调整memstore限制

   memstore占用内存中堆大小的比例:

   上限:hbase.regionserver.global.memstore.upperLimit  (默认值为40%,设置为0.4)

  

下限:hbase.regionserver.global.memstore.lowerLimit(设置为0.35),用来控制服务器清空memstore之后剩余的大小。将上限和下限设置的接近一些可以避免过度刷写。

 

  处理读请求时,可以考虑同时减少memstore的上下限来增加块缓存的空间。

 

 

 

8.      增加阻塞时存储文件数目

     Hbase.hstore.blockingStoreFiles

   决定了当存储文件的数目达到阀值时,更新操作(put,delete)将会被阻塞,并以此来给合并操作留出来时间减少存储文件的数目。

大负载的突发写入请求时,可以增加这个值。(默认值是7)

 

 

 

9.      增加阻塞倍率

Hbase.hregion.memstore.block.multiplier的默认值是2

阻塞客户端更新数据的请求的安全阀值。

 

增加这个值,可以更加平滑地处理写入突发流量:可以临时接受更多的数据

 

 

10.  减少最大日志文件限制

 Hbase.regionserver.maxlogs=32    (默认值32)

控制基于磁盘的WAL文件数目,进而控制刷写频率。

对于写压力比较大的服务器,降低这个值会强迫服务器更频繁地将数据刷写到磁盘。这样刷写到磁盘上的数据所对应的日志就可以被丢弃了。

 

 

 

 

第12章     集群管理

减少节点

  Shell命令:

  Balance_switch   false              --关闭负载均衡

  Hbase-daemon.sh   stop  regionserver    --停止集群中的一个region服务器

  Balance_switch   true            --启用负载均衡

过程分析:

   关闭节点的负载均衡,避免负载均衡和master回复刚才下线的region服务器之间可能产生的竞争。

  Region服务器会先将它所有的region关闭,然后再把自己的进程停止。Region服务器在ZooKeeper中对应的临时节点将会过期。Master会注意到region服务器停止服务并将其按崩溃的服务器处理:master会将这台服务器上的region重新分配到其他机器上。

坏处:region会下线一段时间,时间的长度由ZooKeeper的超时时间决定。

第一个被关闭的region要等所有region都关闭,且master注意到region服务器的znode被删除之后才能上线。

 

Hbase0.90.2之后,下线方式:

   Graceful_stop.sh   hostname  

 

--hostname是用户要卸载的region服务器。

会把region从对应的服务器上一个个移出来以减少扰动。它会在移动到下一个region前先检查新位置上的region是否已经部署好。直到对应的要关闭的服务器上没有region了。

此时,脚本会让对应的服务器关闭。

Master会察觉到服务器停止了服务。

由于服务器关闭时没有region,所以不会有WAL切分的相关操作。

 

 

 

 

滚动重启

  使用greceful_stop.sh脚本来重启region服务器,并将之前属于他的region移回原位。

  Balance_switch  false

  $for  I   in   ‘cat  conf/regionservers|sort’;

      Do     ./bin/graceful_stop.sh  -- restart --reload  --debug  $i;

      Done  &>   /tmp/log.txt  &

  Balance_switch  true

 使用tail –f 命令查看/tmp/log.txt中脚本运行的进度。以上操作只对region服务器有效。

同时请确保在执行上述操作之前已禁用负载均衡。

 

 

实现滚动重启的步骤:

1.      解压用户的发行版,将配置调整好后分发到整个集群

 

2.      运行hbck以确认集群数据的一致性(主要验证meta表),如果有不一致的情况要修复一下。

  Hbase hbck

 

3.      重启master

   Hbase-daemon.sh  stop master;  hbase-daemon.sh   start  master

 

4.      关闭region均衡器

Echo  “balance_switch  false” | hbase  shell

 

5.      在每个region服务器上运行graceful_stop.sh脚本

$for I   in   ‘cat conf/regionservers|sort’;

     Do     ./bin/graceful_stop.sh  -- restart --reload  --debug  $i;

     Done   &>   /tmp/log.txt &

6.      再次重启master。这样会清除其保存的崩溃的服务器列表,并同时启动负载均衡

Hbase-daemon.sh  stop master;  hbase-daemon.sh   start  master

Echo  “balance_switch  true” | hbase shell

7.运行hbck以确认集群一致性。

 

 

 

新增服务器

 

1.       伪分布式模式

  在一台服务器上模拟整个集群的运行状态。所有进程都要分享本地资源。

适合少量数据的测试。

 

添加本地备份master:

Local-master-backup.sh   start  1

命令最后的数字指定了master的RPC端口和WebUI端口与默认配置值的偏移量。两个端口的默认值分别是60000和60010,偏移量会被加到相应的默认值上。

上面的命令执行后,一个新的master进程将会启动,与原来的配置一样,不过监听的端口号分别是60001和60011.

 

 

启动多个备份master

  Local-master-backup.sh   start 1   3  5

3个用于备份的master的RPC端口分别是60001,60003和60005

WebUI监听端口为60011,60013和60015。

 

 

 

停止备份master

   Local-master-backup.sh   stop 1

用户可以一次停止多个备份master,用户指定的端口偏移量用于停止对应的master。

 

 

 

添加本地region服务器

   使用local-regionservers.sh,和启动本地master服务器类似,指定偏移量即可

Region服务器默认使用60200作为RPC端口,使用60300作为Web UI端口。

   Local-regionservers.sh    start  1

   Local-regionservers.sh    start  1   2   3

 

   Local-regionservers.sh   stop  1

 

 

 

 

 

 

2.完全分布式集群

添加一个备份master

   通过备份master节点避免master出现故障而造成Hbase单点失效。

 

Master进程使用Zookeeper来协商哪一个是当前活动的进程。Zookeeper中有一个所有master进程都会竞争的专用znode。第一个竞争到的master会创建这个znode。当集群启动时,竞争获胜的master会成为当前提供服务的master,其他master进程只是轮询检查这个znode,当它消失时再次竞争。

 

/hbase/master  znode是临时znode。Region服务器对于的znode节点也是临时节点,用于报告他们的存在状态。

 

通常master服务器的配置与集群的其他机器相同,一旦用户确认配置没有问题,用一下命令启动一个备份master:

   Hbase-daemon.sh  start  master

假设已经有master正在运行,这条命令就会启动一个新的master进程等待Zookeeper中的Znode被移除。

   使用--backup参数指定备份的master

   Hbase-daemon.sh   start  master  --backup

会新启动一个master来等待一个专有的master,即使用start-hbase.sh脚本启动,或不加—backup参数启动的master在ZooKeeper中创建/hbase/master这个znode。

启动的备份master会进入轮询选举阶段。

 

在Hbase0.90.x开始,可以通过conf目录下添加backup-masters文件来指定备份服务器。

如:添加3个备份master运行在Zookeeper所在的服务器上

   Conf/backup-masters中的内容:

Zk1.foo.com

Zk2.foo.com

Zk3.foo.com

注意:在backup-masters中的节点会使用—backup选项来启动备份master进程。并且是在start-hbase.sh脚本启动主master和region服务器之后,备份master才会启动。

 

 

 

 

添加region服务器

   步骤:

1.      修改conf目录下的regionservers文件,这样可以使启动脚本能够添加新服务器。

简单地在文件中添加一行,内容为对应要添加的region服务器的主机名

 

2.      将修改的配置文件复制到集群中所有的机器上

 

3.      确认新添加的机器上已经安装Hbase,且配置正确

 

4.      在master机器上执行start-hbase.sh脚本,会跳过所有以已经启动region服务器的服务。

另一种,直接在新的机器上执行

Hbase-daemon.sh   start regionserver



日志分析

不同服务种类创建的日志文件

服务器类型                                                  log文件

HBase  Master                                           $HBASE_HOME/logs/HBase-<user>-master-<hostname>.log                                 

HBase   RegionServer                             $HBASE_HOME/logs/HBase-<user>-master-<hostname>.log

ZooKeeper                                                 只在控制台打印日志

NameNode                                                 $HADOOP_HOME/logs/hadoop-<user>-namenode-<hostname>.log

DataNode                                                   $HADOOP_HOME/logs/hadoop-<user>-datanode-<hostname>.log

JobTracker                                                 $HADOOP_HOME/logs/hadoop-<user>-jobtracker-<hostname>.log

TaskTracker                                                $HADOOP_HOME/logs/hadoop-<user>-jobtracker-<hostname>.log










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斗者_2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值