实现步骤
-
准备三台虚拟机,01作为主节点,02、03作为从节点。(把每台虚拟机防火墙都关掉,配置免密码登录,配置每台的主机名和hosts文件。)
-
01节点上安装和配置:Hadoop+Hbase+JDK+Zookeeper
-
02、03节点上安装和配置:Hbase+JDK+Zookeeper
-
修改conf/hbase-env.sh
配置示例:
#修改JAVA_HOME
export JAVA_HOME=xxxx
#修改Zookeeper和Hbase的协调模式,hbase默认使用自带的zookeeper,如果需要使用外部zookeeper,需要先关闭。
export HBASE_MANAGES_ZK=false
5. 修改hbase-site.xml,配置开启完全分布式模式
配置示例:
#指定hbase在hdfs上的存储路径
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
#开启完全分布式hbase
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
#配置Zookeeper的连接地址与端口号
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
6. 配置region服务器,修改conf/regionservers文件,每个主机名独占一行,hbase启动或关闭时会按照该配置顺序启动或关闭主机中的hbase。
假设hadoop01是HMaster,则没必要写入自己的主机名,否则会在本机上也开启一个regionserver。
配置示例:
hadoop02
hadoop03
注意:regionserver最好跟datanode是一致,regionserver是需要去写文件的,万一它要写的块正好在它所在主机的 datanode上就不需要经过网络传输了,这样节省了资源。
7. 将01节点配置好的hbase通过远程复制拷贝到02,03节点上
8. 启动01,02,03的Zookeeper服务
9. 启动01节点的Hadoop
10. 启动01节点的Hbase,进入到hbase安装目录下的bin目录
执行:sh start-hbase.sh
(注意:如果每台机子的regionservers中配置了相同的主机名,则不需要在每台主机上都执行该命令,执行该改命令的主机即为Hmaster,执行后会自动开启批量启动脚本regionservers中配置的主机)
11. 查看各节点的java进程是否正确
12. 通过浏览器访问http://xxxxx:16010来访问web界面,通过web界面管理hbase(hadoop1.0以后才是16010)
13. 关闭hbase,进入到hbase安装目录下的bin目录
执行:stop-hbase.sh
注:HBASE配置文件说明
hbase-env.sh配置HBase启动时需要的相关环境变量
hbase-site.xml配置HBase基本配置信息
HBASE启动时默认使用hbase-default.xml中的配置,如果需要可以修改hbase-site.xml文件,此文件中的配置将会覆盖hbase-default.xml中的配置
修改配置后要重启hbase才会起作用
注:主启动hbase时可能出现的错误,报错如下:
2018-10-09 12:50:53,415 INFO [regionserver/hadoop011/192.168.80.129:16020] regionserver.HRegionServer: STOPPED: Unhandled: org.apache.hadoop.hbase.ClockOutOfSyncException: Server hadoop011,16020,1539114643547 has been rejected; Reported time is too far out of sync with master. Time difference of 4660179ms > max allowed of 30000ms
at org.apache.hadoop.hbase.master.ServerManager.checkClockSkew(ServerManager.java:407)
at org.apache.hadoop.hbase.master.ServerManager.regionServerStartup(ServerManager.java:273)
at org.apache.hadoop.hbase.master.MasterRpcServices.regionServerStartup(MasterRpcServices.java:360)
at org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos$RegionServerStatusService$2.callBlockingMethod(RegionServerStatusProtos.java:8615)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2180)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:112)
at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:133)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:108)
at java.lang.Thread.run(Thread.java:748)
2018-10-09 12:50:53,685 INFO [regionserver/hadoop011/192.168.80.129:16020] regionserver.HRegionServer: regionserver/hadoop011/192.168.80.129:16020 exiting
2018-10-09 12:50:53,686 ERROR [main] regionserver.HRegionServerCommandLine: Region server exiting
java.lang.RuntimeException: HRegionServer Aborted
at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:68)
at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.run(HRegionServerCommandLine.java:87)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)
at org.apache.hadoop.hbase.regionserver.HRegionServer.main(HRegionServer.java:2667)
原因:regionserver的报告时间和hmaster的报告时间相差太大,超过了默认值30000ms
即30s
解决方法:统一设定虚拟机的时间
在每台机器上执行: data -s '2018-10-09 20:50:05'