distcp迁移实操_hbase日常操作收集

hbase日常操作收集

基本命令

建表

create 'testtable','coulmn1','coulmn2'

也可以建表时加coulmn的属性如:

create 'testtable',

{NAME => 'coulmn1', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10',

COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'},

{NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30',

COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'}

其中的属性有versions:设置历史版本数,TTL:过期时间,COMPRESSION:压缩方式,当配置lzo的情况

删除表

删除表之前先要禁用表

disable 'testtable'

drop 'testtable'

describe 'testtable'(查看表结构)

alter修改表结构

list列出所有表

hbase中的disable和enable

disable和enable都是hbase中比较常见的操作,很多对table的修改都需要表在disable的状态下才能进行。

disable

当通过disable ‘sunwg01′将表sunwg01的状态更改为disable的时候,hbase会在zookeeper中的table结点下做个记录,如下:

[zk: hadoop01:2181(CONNECTED) 32] get /hbase/table/sunwg01

3203@hadoop01DISABLED

cZxid = 0×3017

ctime = Fri Jun 29 14:00:07 CST 2012

mZxid = 0×3022

mtime = Fri Jun 29 14:05:05 CST 2012

pZxid = 0×3017

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0×0

dataLength = 26

numChildren = 0

结点/hbase/table/sunwg01的值并不是3203@hadoop01DISABLED,而还有些不可能见的字符在里面。

在zookeeper记录下该表的同时,还会将表sunwg01的region全部下线,region为offline状态。

enable

enable的过程和disable相反,会把表sunwg01的所有region上线,并删除zookeeper下的标志。但有个问题需要主要,如果在enable前,META中有region的server信息,那么此时会在该server上将该region online;如果没有server的信息,那么此时还要随机选择一台机器作为该region的server。

日常维护的命令

major_compact 'testtable'

通常生产环境会关闭自动major_compact(配置文件中hbase.hregion.majorcompaction设为0),选择一个晚上用户少的时间窗口手工major_compact。

如果hbase更新不是太频繁,可以一个星期对所有表做一次major_compact,这个可以在做完一次major_compact后,观看所有的storefile数量,如果storefile数量增加到major_compact后的storefile的近二倍时,可以对所有表做一次major_compact,时间比较长,操作尽量避免高锋期。

flush 'testtable'

将所有memstore刷新到hdfs,通常如果发现regionserver的内存使用过大,造成该机的regionserver很多线程block,可以执行一下flush操作,这个操作会造成hbase的storefile数量剧增,应尽量避免这个操作。

还有一种情况,在hbase进行迁移的时候,如果选择拷贝文件方式,可以先停写入,然后flush所有表,拷贝文件。

balance_switch

balance_switch flase|true,配置master是否执行平衡各个regionserver的region数量,当我们需要维护或者重启一个regionserver时,会关闭balancer,这样就使得region在regionserver上的分布不均,这个时候需要手工的开启balance。

重启一个regionserver

bin/graceful_stop.sh --restart --reload --debug nodename

这个操作是平滑的重启regionserver进程,对服务不会有影响,他会先将需要重启的regionserver上面的所有region迁移到其它的服务器,然后重启,最后又会将之前的region迁移回来。

当我们修改一个配置时,可以用这种方式重启每一台机子,这个命令会关闭balancer,所以最后我们要在hbase shell里面执行一下balance_switch true。

对于hbase regionserver重启,不要直接kill进程,这样会造成在zookeeper.session.timeout这个时间长的中断,也不要通过bin/hbase-daemon.sh stop regionserver去重启,如果运气不太好,-ROOT-或者.META.表在上面的话,所有的请求会全部失败。

关闭下线一台regionserver

bin/graceful_stop.sh --stop nodename

和上面一样,系统会在关闭之前迁移所有region,然后stop进程,同样最后我们要手工balance_switch true,开启master的region均衡。

检查region是否正常以及修复

bin/hbase hbck #检查

bin/hbase hbck -fix #修复

会返回所有的region是否正常挂载,如没有正常挂载可以使用下一条命令修复,如果还是不能修复,那需要看日志为什么失败,手工处理。

hbase的迁移

copytable方式

bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zookeeper1,zookeeper2,zookeeper3:/hbase 'testtable'

目前0.92之前的版本的不支持多版本的复制,0.94已经支持多个版本的复制。当然这个操作需要添加hbase目录里的conf/mapred-site.xml,可以复制hadoop的过来。

Export/Import

bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]

bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable /user/testtable

跨版本的迁移,我觉得是一个不错的选择,而且copytable不支持多版本,而export支持多版本,比copytable更实用一些。

直接拷贝hdfs对应的文件

首先拷贝hdfs文件,如:

bin/hadoop distcp hdfs://srcnamenode:9000/hbase/testtable/ hdfs://distnamenode:9000/hbase/testtable/

然后在目的hbase上执行:

bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable

生成meta信息后,重启hbase

这个操作是简单的方式,操作之前可以关闭hbase的写入,执行flush所有表(上面有介绍),再distcp拷贝,如果hadoop版本不一致,可以用hftp接口的方式,我推荐使用这种方式,成本低。

错误处理

关于错误No server address listed in .META. for region

有的时候会遇到如下的错误:

hbase(main):001:0> scan ‘sunwg01′

ROW COLUMN+CELL

ERROR: org.apache.hadoop.hbase.client.NoServerForRegionException: No server address listed in .META.

for region sunwg01,,1340950453949.4464c1f0c6bdee802052d669af6db6ae.

原因是hbase在.META.中没有办法找到该region的server信息,也就是没有办法找到该region所在server地址。

这个时候比较简单的处理方式就是先disable table,然后enable table,在enable的时候会对region重新分配regionserver。

hbase(main):002:0> disable ‘sunwg01′

0 row(s) in 2.1500 seconds

hbase(main):003:0> enable ‘sunwg01′

0 row(s) in 2.0700 seconds

hbase(main):004:0> scan ‘sunwg01′

ROW COLUMN+CELL

r1 column=f1:k1, timestamp=1340950459281, value=100

1 row(s) in 0.0570 seconds

其他信息

RegionSever统计信息说明

通过浏览器访问RegionServer的60030端口可以查看该RegionSever的各方面的统计信息。

通过这些统计信息可以对RegionServer的各个方面有大概的了解,知道当前ReginoServer的运行情况,为RegionServer的优化和配置提供数据支持

Metrics中的各个状态信息:名称

含义

requestsPerSecond

上次统计到现在的每秒的请求数,包括写和读

numberOfOnlineRegions

在线的region的个数

numberOfStores

总的store的个数,多个column family会对应多个store

numberOfStorefiles

总的storefile的个数

storefileIndexSizeMB

总的storefile的索引大小

rootIndexSizeKB

总的根索引的大小

totalStaticIndexSizeKB

总的非压缩的data block索引大小,包括根索引,枝索引,叶索引

totalStaticBloomSizeKB

总的非压缩Bloom索引大小

memstoreSizeMB

总memstore的大小,memstore中存储尚未被flush到hdfs上的数据

readRequestsCount

读请求数

writeRequestsCount

写请求数

compactionQueueSize

compact队列长度

flushQueueSize

region flush队列长度

usedHeapMB

已经使用的堆大小

maxHeapMB

总的堆大小,总的堆大小一般是堆设置减去4mb,这4mb是保留区域大小,可以通过参数修改

blockCacheSizeMB

已使用块缓冲的大小

blockCacheFreeMB

空闲的块缓冲大小

blockCacheCount

块缓冲数

blockCacheHitCount

块缓冲命中数

blockCacheMissCount

块缓冲未命中数

blockCacheEvictedCount

lru淘汰块数

blockCacheHitRatio

总块缓冲命中率

blockCacheHitCachingRatio

指定访问cache的缓冲命中率

hdfsBlocksLocalityIndex

hdfs块本地访问比率

hbase监控指标均可通过http形式的jmx方式采集:

# 采集master 上的hb.m.AverageLoad

http://172.17.19.81:60010/jmx?qry=hadoop:service=Master,name=Master

# 采集master 上的hb.m.AverageLoad以外的指标

http://172.17.19.81:60010/jmx?qry=hadoop:service=Master,name=MasterStatistics

# 采集region server 上的指标(hbase.txt 文件中 hbase.regionserver.*)

http://172.17.19.81:60030/jmx?qry=hadoop:service=RegionServer,name=RegionServerStatistics

# 采集region server 上的动态统计指标(hbase.txt 文件中 hbase.RegionServerDynamicStatistics.*)

http://172.17.19.81:60030/jmx?qry=hadoop:service=RegionServer,name=RegionServerDynamicStatistics

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值