角色 | hostname | IP |
---|---|---|
master | master | 192.168.1.112 |
slave1 | slave1 | 192.168.1.123 |
slave2 | slave2 | 192.168.1.121 |
注:必须得同步时间,不然会有节点启动不起来
master端配置
先确保时区正确,中国是在东八区(CST),如果时区不正确需要先设置好时区
安装 ntp
sudo apt-get install ntp
修改 /etc/ntp.conf
注释掉原来所有的 server 开头的项,添加:
server 127.127.1.0
重启 ntp 服务
sudo service ntp restart
slave端配置
注:在slave1和slave2中都要配置
安装ntp
sudo apt-get install ntp
修改 /etc/ntp.conf
注释掉所有的以 server 开头的项,添加:
server master prefer
重启 ntp 服务
sudo service ntp restart
查看时间偏移
ntpq -p
其中的 offset 是 本机 和 master 之间的时间差,单位为 ms
强制同步时间
sudo ntpdate -u master
一段时间后,slave 就会和 master保持同步了
你可以再次查看时间偏移
ntpq -p
配置环境变量
#for zookeeper
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.8
export PATH=$ZOOKEEPER_HOME/bin:$PATH
使环境变量生效
source /etc/profile
解压zookeeper-3.4.8.tar.gz 到 /opt 目录下
sudo tar -zxf zookeeper-3.4.8.tar.gz -C /opt
赋予权限
sudo chown -R wlw:wlw /opt/zookeeper-3.4.8
第一个wlw是你的用户名
第二个wlw是你的组名
进入zookeeper-3.4.8目录,在里面创建data和logs文件夹
cd /op/zookeeper-3.4.8
mkdir data
mkdir logs
复制配置文件
cd conf/
cp zoo_sample.cfg zoo.cfg
修改配置文件zoo.cfg
vim zoo.cfg
clientPort=2181 #客户端连接端口
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/opt/zookeeper-3.4.8/data #数据目录
dataLogDir=/opt/zookeeper-3.4.8/logs #日志目录
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
注:
tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳
initLimit:Zookeeper的Leader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:表示 Leader 与 Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
server.A=B:C:D:其中A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
在dataDir目录下创建myid文件
cd /opt/zookeeper-3.4.8/data
touch myid
master机器的内容为0,slave1机器的内容为1,slave2机器的内容为2,若有更多依此类推
在master节点上将配置好的zookeeper分发给各个slave,建议先打包再分发
cd /opt
sudo tar -zcf ./zookeeper-3.4.8.tar.gz ./zookeeper-3.4.8
scp ./zookeeper-3.4.8.tar.gz wlw@slave1:/home/wlw
在slave(slave1和slave2)节点上执行
sudo tar -zxf ~/zookeeper-3.4.8.tar.gz -C /opt/
sudo chown -R wlw:wlw /opt/zookeeper-3.4.8
注:再次提醒别忘了更改 /opt/zookeeper-3.4.8/data/myid
启动
cd /opt/zookeeper-3.4.8
./bin/zkServer.sh start
注:需要在master和slave机上都启动
查看状态
./bin/zkServer.sh status
显示为leader或者follower
在 master 和slave节点上运行 jps 应该会有QuorumPeerMain进程
停止
./bin/zkServer.sh stop
配置环境变量
#for hbase
export HBASE_HOME=/opt/hbase-1.2.2
export PATH=$HBASE_HOME/bin:$PATH
使环境变量生效
source /etc/profile
解压hbase-1.2.2.tar.gz 到 /opt 目录下
sudo tar -zxf hbase-1.2.2.tar.gz -C /opt
赋予权限
sudo chown -R wlw:wlw /opt/hbase-1.2.2
进入hbase-1.2.2目录,在里面创建pids文件夹
cd /op/hbase-1.2.2
mkdir pids
注:这一步很重要,否则在停止HBase时会因为找不到进程id而出错
在conf/ 中添加hadoop的core-site.xml和hdfs-site.xml文件,添加zookeeper的zoo.cfg文件
修改conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdirname>
<value>hdfs://master:9000/hbasevalue>
property>
<property>
<name>hbase.cluster.distributedname>
<value>truevalue>
property>
<property>
<name>hbase.zookeeper.quorumname>
<value>master,slave1,slave2value>
property>
<property>
<name>hbase.master.info.bindAddressname>
<value>mastervalue>
<description>HBase Master Web UI的绑定地址,默认0.0.0.0description>
property>
<property>
<name>hbase.master.info.portname>
<value>16010value>
<description>HBase Master Web UI端口,-1表示不运行Web UIdescription>
property>
<property>
<name>hbase.regionserver.portname>
<value>16020value>
<description>The port the HBase RegionServer binds to.description>
property>
<property>
<name>hbase.regionserver.info.portname>
<value>16030value>
<description>The port for the HBase RegionServer web UIdescription>
property>
<property>
<name>hbase.regionserver.info.bindAddressname>
<value>mastervalue>
<description>The address for the HBase RegionServer web UIdescription>
property>
configuration>
注:hbase.regionserver.info.bindAddress这一项需要根据当前主机的hostname来配置。在slave1机器上value值则为slave1
修改conf/hbase-env.sh
export JAVA_HOME=/opt/jdk1.7.0_75
export HBASE_HOME=/opt/hbase-1.2.2
# 禁用hbase自带的zookeeper
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/opt/hadoop-2.7.2/etc/hadoop
# 存放进程id,很重要
export HBASE_PID_DIR=/opt/hbase-1.2.2/pids
修改conf/regionservers
相当于hadoop中的slaves文件
slave1
slave2
在master节点上将配置好的hbase分发给各个slave,建议先打包再分发
cd /opt
sudo tar -zcf ./hbase-1.2.2.tar.gz ./hbase-1.2.2
scp ./hbase-1.2.2.tar.gz wlw@slave1:/home/wlw
在slave(slave1和slave2)节点上执行
sudo tar -zxf ~/hbase-1.2.2.tar.gz -C /opt/
sudo chown -R wlw:wlw /opt/hbase-1.2.2
再次提醒
修改conf/hbase-site.xml中的
hbase.regionserver.info.bindAddress,这一项需要根据当前主机的hostname来配置。在slave1机器上value值则为slave1
HBase 会在同一时间打开大量的文件句柄和进程,超过 Linux 的默认限制,导致可能会出现错误
修改/etc/security/limits.conf文件,添加:
wlw - nofile 32768
wlw - nproc 32000
注:将wlw改成你运行 HBase 的用户名
还需要修改 /etc/pam.d/common-session,让/etc/security/limits.conf上的配置生效,添加:
session required pam_limits.so
注销(logout)后再登录,这些配置才能生效
注:记得在master和slave上都修改
在master上运行
cd /opt/hbase-1.2.2
./bin/start-hbase.sh
在master上启动thrift 服务线程池
./bin/hbase thrift start -threadpool
或者
在master和slave上分别手动启动thrift服务
./bin/hbase-daemon.sh start thrift
验证 HBase 是否成功安装
在 master 节点上运行 jps 应该会有HMaster和ThriftServer进程
在各个 slave 节点上运行jps 应该会有HRegionServer和ThriftServer进程
zookeeper -> hadoop -> hbase
在master上运行jps会有进程:
Jps
QuorumPeerMain
HMaster
ResourceManager
SecondaryNameNode
NameNode
在slave上运行jps会有进程:
Jps
DataNode
QuorumPeerMain
NodeManager
HRegionServer
最后可以通过web ui来查看HBase的情况,http://master:16010
关闭则为逆序