HBase集群搭建
目录:
一、准备工作
二、搭建HBase注意要点
三、HBase集群搭建流程
四、集群操作顺序
五、配置参考
一、准备工作
首先建立信任关系,ssh互联,或者修改官方脚本建立pssh。Hadoop、Zookeeper、Hbase集群搭建的过程中,只需要在master配好,scp或者pscp到其他机器即可,但是Zookeeper集群不同节点需要针对性的修改myid,有不同的配置。
二、搭建HBase注意要点
1、由于HBase需要HDFS的支持,所以需要先安装HDFS,而HDFS包含在Hadoop项目中,所以首先应该下载hadoop的bin包。
2、注意与HBase版本的兼容性,可在http://hbase.apache.org/book.html#basic.prerequisites 中Hadoop Prerequisites查到版本兼容性表格。
3、Hadoop软件采用xml的半格式化方法来存储配置信息,配置项格式为
<property>
<name></name>
<value></value>
</property>
name和value标签可参考官方文档。
4、Hadoop软件使用jdk提供的jps工具查看hadoop进程
三、HBase集群搭建流程
1、首先建立集群的ssh互连,配置好hostname和hosts,保证能够ping通hosts。
2、因为hadoop安装需要Jdk支持,检查是否安装了JDK,而后面HBase对jdk版本有要求,具体版本参考见http://hbase.apache.org/book.html#java 。
3、hadoop需要选择一个节点作为master来执行name node和resourcemanager的角色,其他节点作为slaves来执行datanode和nodemanager的角色。
HDFS配置:
对应配置项参考http://hadoop.apache.org/docs/ 相关版本,hadoop 2和之前的版本之间有较大变化。
3.1、此时切换到工作用户work,建立工作目录hbase;
3.2、解压缩hadoop的bin包;
3.3、进入etc/hadoop/目录,修改该目录下的几个配置文件,该目录为站点特定的配置文件;
3.4、修改hadoop-env.sh,找到export JAVA_HOME=${JAVA_HOME},修改成实际的idk所在路径,修改export HADOOP_CONF_DIR为配置文件所在路径,即该脚本所在路径;
3.5、修改core-site.xml,标签格式为
<property>
<name></name>
<value></value>
</property>
配置项请参考 http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-common/core-default.xml
配置主节点地址,端口号注意不要产生冲突,修改hadoop.tmp.dir,该选项为存储临时数据的路径,请提前建好相关文件夹,修改权限(如果没有在hdfs-site.xml中设置namenode和datanode的存储地址,HDFS就会把数据存储在该目录下);
3.6、配置hdfs-site.xml,dfs.nameservices为集群名,dfs.datanode.data.dir为datanode存储data block的地址(此处跟之前版本不同,hadoop2.6.4没有了df.data.dir而改为该项,在这里配置多个磁盘路径,注意要有权限对该目录进行操作),dfs.replication为data存储副本数(默认为3);
3.7、配置slaves,把所有节点的hostname加入该文件,保证在shell中能ping通这些hostname;
3.8、使用scp命令将hadoop的bin包发送到集群其他节点的工作用户根目录下;
4、配置Zookeeper
5、配置HBase
参考官方手册 http://abloz.com/hbase/book.html#zookeeper
5.1、修改hbase-env.sh中JAVA_HOME为idk安装路径HBASE_MANAGES_ZK=false #该项表示是否由HBase负责启动和关闭Zookeeper;
5.2、修改hbase conf目录下 regionservers文件;
5.3、编辑所有机器上的hbase-site文件,hbase.rootdir必须与你的Hadoop集群的core-site.xml文件域名端口号配置保持一致才行(可提前在HDFS上建立一个hbase文件夹方便管理),如果你Hadoop的hdfs使用了其它端口,请在这里也修改。再者就是Hbase该项并不识别机器IP,只能使用机器hostname才可行;
5.4、分发到其他节点;
5.5、配置环境变量,加入HBASE_CONF_DIR和HADOOP_CONF_DIR
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/home/work/hbase/hbase-1.2.0/conf/hbase-site.xml:/home/work/hbase/hbase-1.2.0/lib/*:/home/work/hbase/hadoop-2.6.4/share/hadoop/common/hadoop-common-2.6.4.jar
export HBASE_CONF_DIR=/home/work/hbase/hbase-1.2.0/conf
export HADOOP_CONF_DIR=/home/work/hbase/hadoop-2.6.4/etc/hadoop
四、集群操作顺序
Hadoop、ZooKeeper和HBase之间应该按照顺序启动和关闭:启动Hadoop—>启动ZooKeeper集群—>启动HBase—>停止HBase—>停止ZooKeeper集群—>停止Hadoop。
1、启动HDFS,
cd到hadoop根目录,在bin目录下执行./hadoop namenode -format,格式化HDFS环境(该操作会删除HDFS上的所有数据,一般情况下仅在第一次配置时使用或者HDFS修改了配置时需要使用,使用命令前必须将datanode下存储先删除,否则会产生无法识别版本的错误),
在sbin目录下运行start-dfs.sh,启动之后在master运行jps命令可以看到Namenode进程启动,在datanode运行jps命令可以看到datanode进程启动;
2、若HBase存储在HDFS上,那么需要在hadoop根目录下执行bin/hadoop fs -mkdir /hbase命令(我的配置是让HBase存储在hdfs上的base目录,所以要提前创建该目录),这时不要轻易删除该文件夹,因为HBase启动时会在该hdfs目录下生成一个version文件,如果删除后,可能会导致下次启动时hbase的master无法启动;
3、启动Zookeeper,运行jps可以看到QuorumPeerMain进程启动,若没有用HBase监控,则需要去每个zookeeper节点,在bin目录下运行脚本./zkServer.sh start ;
4、启动Hbase,在bin目录下运行start-hbase.sh,master运行jps可以看到HMaster进程启动,regionserver可以看到HRegionServer进程启动。至此启动结束;
5、在HBase根目录下,运行bin/hbase shell进入hbase shell即可交互式操作HBase数据库。
五、配置参考
1、HDFS
hadoop-env.sh
export JAVA_HOME=/home/work/hbase/jdk1.7.0_79
export HADOOP_PREFIX=/home/work/hbase/hadoop-2.6.4
hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>your cluster name</value>
<description>whatever you want to name your cluster</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/work/hbase/hadoop-2.6.4/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/disk0/hadoop/data,/home/disk1/hadoop/data,/home/disk2/hadoop/data,/home/disk3/hadoop/data,/home/disk4/hadoop/data,/home/disk5/hadoop/data,/home/disk6/hadoop/data</value>
<description>让HDFS分布在不同的几个硬盘上,减少I/O压力</description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>your server:9006</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/work/hbase/hadoop-2.6.4/tmp</value>
</property>
</configuration>
slaves
your server list
2、ZooKeeper
zoo.cfg(dataDir和dataLogDir目录需要提前建立,并注意权限,还有端口号绑定之前注意占用问题)。
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/work/hbase/zookeeper-3.4.8/tmp
# the port at which the clients will connect
clientPort=2199
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=yourserver:2888:3888
server.2=yourserver:2888:3888
server.3=yourserver:2888:3888
server.4=yourserver:5888:6888
server.5=yourserver:2888:3888
server.6=yourserver:2888:3888
server.7=yourserver:2888:3888
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
dataLogDir=/home/work/hbase/zookeeper-3.4.8/logs
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
在dataDir目录下建立myid文件,里面写入的内容跟zoo.cfg配置中server.X=……中的X保持一致
3、HBase
hbase-env.sh
export JAVA_HOME=/home/work/hbase/jdk1.7.0_79
export HBASE_CLASSPATH=/home/work/hbase/hadoop-2.6.4/etc/hadoop
export HBASE_MANAGES_ZK=false
hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://yourserver:9006/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>your server</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/work/hbase/zookeeper-3.4.8/tmp</value>
</property>
<property>
<name>hbase.regionserver.port</name>
<value>9870</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2199</value>
</property>
</configuration>
regionserver
your server list