HDP3.1中HBase从2.0.6升级到2.2.7
- 下载解压HBase 二进制包,上传至http服务器上,下载地址
https://www.apache.org/dyn/closer.lua/hbase/2.2.7/hbase-2.2.7-bin.tar.gz - 停止所有master节点,包括standby master
- 在ambari-web中修改hbase 高级设置中的custom hbase-site.xml,添加配置
hbase.procedure.upgrade-to-2-2=true(重要,否则master无法启动,会提示Unsupported procedure type class org.apache.hadoop.hbase.master.assignment.AssignProcedure found),参考https://hbase.apache.org/book.html#upgrade2.2
hbase.unsafe.stream.capability.enforce=false(可选,若后续启动有异常再加)
-
启动master,本次启动后master会正常退出,在日志中可查看到
-
停止所有region-server
解压高版本tar包,替换/usr/hdp/$version/hbase -
在ambari-web页面先启动regionserver,再启动hmaster
-
(可选)启动thriftserver,在hue中检查数据状态
-
QA:
- .启动服务时,日志报错缺少方法,原因是找不到ambari-metrics-hadoop-sink的依赖
java.lang.AbstractMethodError: org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink.init(Lorg/apache/commons/configuration2/SubsetConfiguration;)V
at org.apache.hadoop.metrics2.impl.MetricsConfig.getPlugin(MetricsConfig.java:207)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.newSink(MetricsSystemImpl.java:531)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSinks(MetricsSystemImpl.java:503)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:479)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:188)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:163)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:62)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:58)
at org.apache.hadoop.hbase.metrics.BaseSourceImpl$DefaultMetricsSystemInitializer.init(BaseSourceImpl.java:54)
at org.apache.hadoop.hbase.metrics.BaseSourceImpl.<init>(BaseSourceImpl.java:116)
at org.apache.hadoop.hbase.io.MetricsIOSourceImpl.<init>(MetricsIOSourceImpl.java:46)
at org.apache.hadoop.hbase.io.MetricsIOSourceImpl.<init>(MetricsIOSourceImpl.java:38)
at org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.createIO(MetricsRegionServerSourceFactoryImpl.java:84)
at org.apache.hadoop.hbase.io.MetricsIO.<init>(MetricsIO.java:35)
at org.apache.hadoop.hbase.io.hfile.HFile.<clinit>(HFile.java:195)
at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:539)
at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:478)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:3093)
at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236)
at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:3111)
解决方案:
在 hbase-env.sh里加上ambari-metrics-hadoop-sink 相关依赖
export HBASE_CLASSPATH=${HBASE_CLASSPATH}:{{stack_root}}/current/ext/hbase/*:/usr/lib/ambari-metrics-hadoop-sink/*
这里一定要注意该方法的参数,如果缺失的方法是org/apache/commons/configuration2/SubsetConfiguration,则需要的是/usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink-with-common-2.7.4.0.118.jar
如果是org/apache/commons/configuration/SubsetConfiguration,则需要的是/usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink-with-common-2.6.1.0.143.jar
- 启动hbase的时候报错:
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
解决方案:在hbase-site.xml中加入
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>