Hbase1.3.1 完全分布式搭建。
来源:互联网 发布:企业网站推广优化 编辑:程序博客网 时间:2024/05/23 23:50
hbase的搭建是比较简单的,无论是单机模式还是分布式都相对容易。本人选择的是1.3.1的版本,按照官方的文档很快就搭建起来了,但是启动的时候出现了错误。无论是baidu还是google都没有找到答案,起初还以为是版本差异,然后使用了1.2.6版本,结果还是原来的错误,看了错误日志之后也是云里雾里的,后来无意间发现了问题的根源,然后 继续使用1.3.1了,在这里记录一下。
在搭建Hbase之前,我已经搭建好了Hadoop和Zookeeper,搭建的资料网上也比较多。所以没有搭建好这两个环境的需要先搭建一下。
搭建的时候可以直接参考官方文档就好,文档上面介绍的已经非常清楚了。下面我就按照官方的思路走一遍搭建过程。
首先介绍一下我手中的机器,我一共有三个机器,搭建规划就是下面的表格中的样子。
可以说是与官方的大同小异。其中以centos1作为主节点,centos3作为备用主节点。
1.首先将下载好的hbase解压到文件夹中,我这里是解压到了/opt中(以下操作均在centos1节点上进行)。
tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/
2.配置一下环境变量,这个也不是必须的,也就是以后启动的时候方便一点,修改/etc/profile,添加:
export HBASE_HOME=/opt/hbase-1.3.1export PATH=${HBASE_HOME}/bin:$PATH
3.编辑hbase中的conf/regionservers,把原来的localhost删除点,写上想要作为regionservers的节点。我这里直接写的就是centos1、centos2、centos3.
4.按照官方的步骤接下来是在conf目录中创建一个backup-masters的文件,其中写上想要作为备用主节点节点名,所以我这里写的就是centos3了。
5.编辑conf/hbase-env.sh文件,修改里面的JAVA_HOME和HBASE_MANAGES_ZK的值。将JAVA_HOME添加成环境中的java环境即可,HBASE_MANAGES_ZK修改为false。
export JAVA_HOME=/usr/local/jdkexport HBASE_MANAGES_ZK=false
JAVA_HOME就不用解释了,这是HBASE_MANAGES_ZK的描述:
Tell HBase whether it should manage it’s own instance of Zookeeper or not.
其实hbase里面自带了一个zookeeper,而这个属性的值就是是否使用这个自带的zookeeper,很显然我这里要使用自己的zookeeper,所以修改为false。
6.接下来修改hbase-site.xml中的配置信息。
<configuration><property> <name>hbase.rootdir</name> <value>hdfs://cluster/hbase</value></property><property> <name>hbase.cluster.distributed</name> <value>true</value></property><property> <name>hbase.zookeeper.quorum</name> <value>centos1,centos2,centos3</value></property><property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/bigdata/zookeeper</value></property><property> <name>hbase.tmp.dir</name> <value>/opt/bigdata/hbase/tmp</value></property></configuration>
hbase.rootdir:
就是来选择将数据写入到什么目录中,这里我选择的就是HDFS,因为我的Hadoop的一个HA的配置,所以我写的就是集群的名字cluster了,如果不是HA的话,可以写上namenode节点名就好。后面的hbase其实就是HDFS中的一个目录了,以后的hbase数据就会放到这个hbase目录中的,不需要手动创建,启动的时候会自动创建的。hbase.cluster.distributed
设置为true就是开启完全分布式。hbase.zookeeper.quorum
设置为安装有ZK的节点。hbase.zookeeper.property.dataDir
设置zk的数据存放目录。- hbase.tmp.dir
设置临时文件存放目录,最好设置一下,要不默认的/tmp目录重启就会清空的。
7.接下来需要hbase能够知道我的hdfs的配置,需要将hadoop中的hdfs-site.xml拷贝到hbase的conf中,至于解释我没有在官方文档中看到,但是在中文版官方文档http://abloz.com/hbase/book.html#standalone_dist有提到,也就是为了保证hbase和hdfs的配置一致性。
cp /opt/hadoop-2.7.2/etc/hadoop/hdfs-site.xml ./
2.2.2.2.3. HDFS客户端配置
如果你希望Hadoop集群上做HDFS 客户端配置 ,例如你的HDFS客户端的配置和服务端的不一样。按照如下的方法配置,HBase就能看到你的配置信息:在hbase-env.sh里将HBASE_CLASSPATH环境变量加上HADOOP_CONF_DIR 。
在${HBASE_HOME}/conf下面加一个 hdfs-site.xml (或者 hadoop-site.xml) ,最好是软连接
如果你的HDFS客户端的配置不多的话,你可以把这些加到 hbase-site.xml上面.
例如HDFS的配置 dfs.replication.你希望复制5份,而不是默认的3份。如果你不照上面的做的话,HBase只会复制3份。
8.然后在centos2、centos3中做以上相同的配置,直接使用scp 进行发送即可。
scp hdfs-site.xml regionservers hbase-env.sh hbase-site.xml backup-masters centos2:/opt/hbase-1.3.1/conf/scp hdfs-site.xml regionservers hbase-env.sh hbase-site.xml backup-masters centos3:/opt/hbase-1.3.1/conf/
9.是的,配置就是这么简单,接下来就可以在启动hbase了,在centos1中使用:start-hbase.sh。这个命令是在hbase的bin目录中的,因为刚才配置了HBASE_HOME的环境变量,所以在任意目录下均可使用,否则只能在相应的目录下才能使用了。
如果一些顺利的话,在centos1、centos2、centos3中使用jps可以看到相关的进程了。在centos1和centos3中分别有HMaster和HRegionServer,而centos2中只有HRegionServer,这正好符合我的设计观点。
启动的时候可能会有一个警告:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m;
这个警告其实是正常的,可以看看一个解释:http://blog.csdn.net/zhangge360/article/details/51864036
但是在最初的时候,启动的并不顺利,发现在centos2和centos3中并没有看到相关进程,也就是说hbase服务没有正常启动,在logs中看到以下错误:
java.lang.RuntimeException: Failed construction of Regionserver: class org.apache.hadoop.hbase.regionserver.HRegionServer at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2706) at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:64) 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:2721)Caused by: java.lang.reflect.InvocationTargetException 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.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2704) ... 5 moreCaused by: java.io.IOException: Problem binding to centos2/192.168.01.03:16020 : Cannot assign requested address. To switch ports use the 'hbase.regionserver.port' configuration property. at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:1002) at org.apache.hadoop.hbase.regionserver.HRegionServer.createRpcServices(HRegionServer.java:667) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:543) ... 10 moreCaused by: java.net.BindException: Cannot assign requested address at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.apache.hadoop.hbase.ipc.RpcServer.bind(RpcServer.java:2742) at org.apache.hadoop.hbase.ipc.RpcServer$Listener.<init>(RpcServer.java:661) at org.apache.hadoop.hbase.ipc.RpcServer.<init>(RpcServer.java:2178) at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:994)
错误就是很直白的告诉了ip错了,刚开始还以为是端口冲突了,查看之后发现并没有占用hbase的默认端口,然后按照错误中的建议修改了端口属性:hbase.regionserver.port,发现并没有解决问题。
因为问题肯定是在ip中的,所以几经探索之后发现了问题的所在地。
我在每个机器中的/etc/hosts里面都是放置了centos1、centos2、centos3的真实节点ip和名称。但是在centos2和centos3中不知为何并没有进行解析。所以我尝试着将centos2和centos3中对应的本机IP换成了127.0.0.1,结果发现能够启动了。
启动之后可以通过WEB端口进行查看相关服务信息:
因为我是在centos1中启动的start-hbase.sh服务,所以就会把centos1当做Master(事实上也可以在任意一个hbase机器上启动Master),将centos3当做Backup Master,通过WEB界面也可以看到:
centos1:16010
centos3:16010
记着是16010端口哦,与之前的老版本有点不一样的。
- Hbase1.3.1 完全分布式搭建。
- 搭建Hadoop2.5.2+Hbase1.1.6完全分布式
- CentOS7搭建HBase1.0完全分布式集群(Hadoop2.6)
- hadoop2.74+zookeeper3.4.10+hbase1.2.6完全分布式搭建
- Hbase1.2.0完全分布式安装
- CentOS 7下Hbase1.3.1分布式环境搭建
- hadoop2.6.5+zookeeper3.4.10+hbase1.3.1分布式集群搭建
- hadoop2.74+zookeeper3.4.10+hbase1.2.6完全分布式HA集群搭建
- hadoop2.6完全分布式安装HBase1.1
- Hbase完全分布式集群安装配置(Hbase1.0.0,Hadoop2.6.0)
- Hbase完全分布式集群安装配置(Hbase1.0.0,Hadoop2.6.0)
- Hbase完全分布式集群安装配置(Hbase1.0.0,Hadoop2.6.0)
- hadoop2.6.5+spark2.1.0+hbase1.2.6完全分布式环境部署
- Hadoop2.7.2+Hbase1.2.1分布式环境搭建整理
- Hadoop2.7.3+HBase1.2.5+ZooKeeper3.4.6搭建分布式集群环境
- Hadoop2.7.3+HBase1.2.5+ZooKeeper3.4.6搭建分布式集群环境
- HBase--完全分布式搭建
- hadoop完全分布式搭建
- ubuntu 16.04 编译安装php5.4
- 数组实例的includes()
- RIP
- 小插曲:我和Nios II的故事
- Maven学习笔记(五)-Maven整合SSM(spring+springMVC+Mybatis)框架
- Hbase1.3.1 完全分布式搭建。
- 水仙花数
- SSH项目,点击链接未跳转到指定action问题
- 正则表达式
- 2017.7.15java实习面试
- KMP算法理解
- G
- 美化CodeBlocks的主题和字体
- 【JavaScript】设置内容+