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?
?
?
zk的目录不能复用,需要换个新的目录,配置项是hbase.zookeeper.property.dataDir。0.90.x使用的是zookeeper-3.3.3,0.92.x使用的是zookeeper-3.4.3