hbase 0.90->0.92升级

0.90->0.92版本之间在hdfs上面存储文件的一些区别:
(1)0.92在hbase.rootdir下面多了文件hbase.id,用来存储集群的ClusterId
(2)每个Table目录下面了个文件.tableinfo.0000000001(默认从
0000000001开始,修改表的属性这个值会增加),用来存储Table的HTableDescriptor

(2)0.90使用HFileV1存储Region数据,0.92使用HFileV2存储数据,读取时根据文件里面存储的version信息来使用那个HFile
相同的地方:
HLog都是一样的用的SequenceFile格式存储
.logs
.oldlogs
.corrupt
.tmp
.regioninfo
hbase.rootdir/hbase.version

HMaster启动
0.92.x 相比0.90.x不同的地方:
(1)如果hbase.rootdir/hbase.id不存在,那么创建这个文件,写入集群的clusterId
(2)-ROOT- 表下面有没有.tableinfo开头的HTD(HTableDescriptor)文件,没有就创建,写入HTD
(3)扫描一下-ROOT- 表,看下.META. Region对应的row 的 info:v是否有值,有,这个值是否>=HConstants.META_VERSION (常量0),如果没有或者<0那么说明没有迁移过,需要迁移,执行下面的操作:
    (3.1)迁移root表到新的版本,扫描全表,看下info:regioninfo是否是0.92前的版本,HRegionInfo.VERSION_PRE_092(常量0),如果是执行:(1)HTD是否写到FS上面,没有就写到FS上面。(2)创建新版本的HRegionInfo,写入到相应的info:regioninfo中,如果有info:splitA and info:splitB也会更新到新版本。
    (3.2)迁移meta表到新的版本,扫描全表,看下info:regioninfo是否是0.92前的版本,HRegionInfo.VERSION_PRE_092(常量0),如果是执行:(1)HTD是否写到FS上面,没有就写到FS上面。(2)创建新版本的HRegionInfo,写入到相应的info:regioninfo中,如果有info:splitA and info:splitB也会更新到新版本。
    (3.3)更新-ROOT-的Version标志,也就是.META.表对应的row写入info:v  HConstants.META_VERSION

说明:info:regioninfo 对应的value 前一个byte是VERSION字段,根据这个VERSION来定位是0.92前的版本还是0.92后面的版本


0.92.x里面默认写的HFile文件格式是HFile V2版本,通过配置中的hfile.format.version来决定,hbase-default.xml里面默认是2,也就是HFile V2。 
文件结尾的4 byte是VERSION信息,HFile V1是1,HFile V2是2,读取时根据文件最后的4 byte来决定使用相应的Reader来解析数据。



.META. 表里面的信息:
  0.90.x系列
  info:regioninfo 对应的value是:VERSION,endKey,offLine,regionId,regionName,split,startKey,tableDesc,hashCode
  0.92.x系列
   info: regioninfo 对应的value是: VERSION, endKey, offLine, regionId, regionName, split, startKey, tableName, hashCode
区别是:
  (1) VERSION,0.90.x是0,0.92.x是1 
  (2)  tableDesc  0.90.x存储的是 HTableDescriptor, tableName   0.92.x存储的是TableName
0.92.x读取的时候先读一个byte的VERSION,然后根据相应的VERSION来解析相应的 info: regioninfo数据。

0.90.x Server返回给ClientResponse格式是:call.idInt+ error flagBoolean+value

0.92.xServer返回给ClientResponse格式是:call.idInt+ flagByte+lengthInt+ StatusInt+value

所以0.90.x0.92.x不兼容不能互读数据。

扫描二维码关注公众号,回复: 843176 查看本文章

 

zk的目录不能复用,需要换个新的目录,配置项是hbase.zookeeper.property.dataDir。0.90.x使用的是zookeeper-3.3.3,0.92.x使用的是zookeeper-3.4.3

猜你喜欢

转载自bupt04406.iteye.com/blog/1541413