Hadoop+HBase完全分布式安装

记录下完全分布式HBase数据库安装步骤

准备3台机器:10.202.7.191 / 10.202.7.139 / 10.202.9.89

所需准备的Jar包:

1.JDK安装

一般Linux的发行版本有预装openjdk,这里安装标准sun公司的jdk。

1.1查看当前机器安装的jdk

rpm -qa | grep jdk

出现如下结果表示是openjdk

java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64

这种情况先卸载openjdk, 执行如下命令:

rpm -e --nodeps java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64

1.2安装标准jdk

将jdk的jar包复制到 /usr/local/java 目录下并执行如下命令解压:

tar -zxvf jdk-7u65-linux-x64.tar.gz

1.3配置Java环境变量

打开 /etc/profile 文件

vim /etc/profile

在文件末尾追加如下内容:

JAVA_HOME=/usr/local/java/jdk1.7.0_65

JRE_HOME=/usr/local/java/jdk1.7.0_65/jre

PATH=JAVAHOME/bin:JRE_HOME/bin:$PATH

CLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export JAVA_HOME JRE_HOME PATH CLASSPATH

执行如下命令使配置生效:

source /etc/profile

1.4检查jdk是否安装成功

执行如下命令:

java -version

出现如下结果表示Java环境安装成功

java version “1.7.0_65”
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

2.zookeeper安装

2.1 zookeeper配置

解压zookeeper的安装包zookeeper-3.4.8.tar.gz,进入主目录。将conf目录下的zoo_sample.cfg文件复制一份并命名为zoo.cfg,操作命令如下:

cp conf/zoo_sample.cfg conf/zoo.cfg

新建一个数据存储目录 data

mkdir data

打开zookeeper的配置文件conf/zoo.cfg并配置如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/sfapp/zookeeper-3.4.8/data
clientPort=2181
server.1=10.202.7.191:2888:3888
server.2=10.202.7.139:2888:3888
server.3=10.202.9.89:2888:3888

以同样的配置将zookeeper安装到各个机器上。

在dataDir目录下(即上面配置的目录/home/sfapp/zookeeper-3.4.8/data)创建一个 myid 文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中的X即为这个数字标识。

在10.202.7.191机器上的/home/sfapp/zookeeper-3.4.8/data目录下新建文件 myid ,写入内容 1;

在10.202.7.139机器上的/home/sfapp/zookeeper-3.4.8/data目录下新建文件 myid ,写入内容 2;

在10.202.9.89机器上的/home/sfapp/zookeeper-3.4.8/data目录下新建文件 myid ,写入内容 3;

2.2 启动zookeeper

建好后分别在每台机器上启动zookeeper,启动命令如下:

bin/zkServer.sh start

我在各个机器上的启动顺序为:10.202.7.191 –> 10.202.7.139 –> 10.202.9.89

查看zookeeper的日志文件,主目录下的zookeeper.out文件,发现前面两台机器的启动日志里有如下异常:

2017-01-09 19:34:48,084 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@400] - Cannot open channel to 3 at election address /10.202.9.89:3888
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:381)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:354)
at org.apache.zookeeper.server.quorum.FastLeaderElectionMessengerWorkerSender.process(FastLeaderElection.java:452)
at org.apache.zookeeper.server.quorum.FastLeaderElectionMessengerWorkerSender.run(FastLeaderElection.java:433)
at java.lang.Thread.run(Thread.java:745)

因为启动第一台机器时,它会去连接其它的两台机器,由于启动顺序的先后,导致连接不成功,所以当所有机器上的zookeeper全部起来后就不会出现改类日志。

2.3 验证zookeeper

在各个zookeeper节点上执行如下命令,查看当前zookeeper的状态:

bin/zkServer.sh status

10.202.7.191上的结果为:

ZooKeeper JMX enabled by default
Using config: /home/sfapp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower

10.202.7.139上的结果为:

ZooKeeper JMX enabled by default
Using config: /home/sfapp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader

10.202.9.89上的结果为:

ZooKeeper JMX enabled by default
Using config: /home/sfapp/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower

此时表明zookeeper集群配置成功。10.202.7.139上的zookeeper被选举为leader,而其他两台机器为follower。

执行如下连接命令即可连接到改zookeeper集群:

bin/zkCli.sh -server 10.202.7.191:2181,10.202.7.139:2181,10.202.9.89:2181

3.Hadoop安装

3.1 配置主机名

登录到10.202.7.191,执行命令 hostname dobbin1 将其主机名设置为dobbin1;

登录到10.202.7.139,执行命令 hostname dobbin2 将其主机名设置为dobbin2;

登录到10.202.9.89,执行命令 hostname dobbin3 将其主机名设置为dobbin3;

或者 vim /etc/sysconfig/network 在里面配置 HOSTNAME=dobbinX

打开各个机器上的 /etc/hosts 文件,添加如下内容:

10.202.7.191 dobbin1
10.202.7.139 dobbin2
10.202.9.89 dobbin3

重启 reboot 后生效

3.2 配置免密码登录

Hadoop集群启动后,NameNode节点通过SSH来启动和停止各个节点上的守护进程,所以在节点之间执行指令时不能有密码。

先打开sshd的配置文件 /etc/ssh/sshd_config,找到以下内容:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如有注释,则去掉注释(#),修改完成后重启ssh服务,使之生效

service sshd restart

无密码登录会有一些安全性问题,所以在各个机器上新建专属用户hadoop,为其设置免密码登录

useradd hadoop

为hadoop用户设置密码

passwd hadoop

回车后提示输入密码,输入完成后回车,需要重复密码,重复输入后回车,则hadoop用户密码设置成功。

切换到hadoop用户。

su - hadoop

生成秘钥:

ssh-keygen -t rsa

会在 ~/.ssh 目录下生成 id_rsaid_rsa.pub 两个文件,id_rsa 为私钥, id_rsa.pub 为公钥,紧接着将公钥文件复制成 authorized_keys 文件,操作如下:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

本地验证是否成功

ssh dobbin1 (即主机名)

结果如下:

Hadoop+HBase完全分布式安装

到这步表明本机无密码登录已经设置完成,接下来把本机上的公钥复制到其他两台机器上

scp ~/.ssh/id_rsa.pub sfapp@10.202.7.139:/tmp/

scp ~/.ssh/id_rsa.pub sfapp@10.202.9.89:/tmp/

然后分别登录到另外两台机器,切换到hadoop用户,将公钥写入~/.ssh/authorized_keys文件,操作如下:

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

再修改~/.ssh/authorized_keys文件的权限,操作如下:

chmod 600 ~/.ssh/authorized_keys

此时,机器dobbin1便能免密码登录dobbin2和dobbin3,同样的,将dobbin2上的公钥写到dobbin1和dobbin3上的~/.ssh/authorized_keys文件,将dobbin3上的公钥写到dobbin1和dobbin2上的~/.ssh/authorized_keys文件,这3台机器便可互相免密码登录。

3.3 Hadoop配置

将hadoop安装包hadoop-2.5.2.tar.gz解压到/home/hadoop目录下,为hadoop添加环境变量:

vim /etc/profile ,在尾部添加如下内容:

export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
export PATH=PATH:HADOOP_HOME/bin

进入hadoop配置文件目录 $HADOOP_HOME/etc/hadoop/ 修改的配置文件core-site.xml如下:

Hadoop+HBase完全分布式安装

下面针对NameNode节点(将dobbin1作为NameNode节点)进行配置

hdfs-site.xml

Hadoop+HBase完全分布式安装

mapred-site.xml

Hadoop+HBase完全分布式安装

yarn-site.xml

Hadoop+HBase完全分布式安装

slaves

dobbin1
dobbin2

hadoop-env.shyarn-env.sh 里面的 export JAVA_HOME=$JAVA_HOME 改成 export JAVA_HOME=/usr/local/java/jdk1.7.0_65,若没有则新增,即改成JDK的物理路径,而不能直接引用环境变量。

3.4 启动hadoop

3.4.1 格式化HDFS文件系统

格式化HDFS文件系统是对NamaNode节点上hdfs-site.xml文件里的 dfs.namenode.name.dirdfs.datanode.data.dir 目录做清理工作。在$HADOOP_HOME目录下执行如下操作:

bin/hdfs namenode -format

日志比较多,看到如下日志表示格式化成功:

17/01/10 11:34:39 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.

格式化操作仅在首次启动时需要。

3.4.2 启动hdfs服务进程:

sbin/start-dfs.sh

我的启动结果如下图:

Hadoop+HBase完全分布式安装

看到提示dobbin3节点上 JAVA_HOME 变量没有设置,是忘了将 hadoop-env.shyarn-env.sh 里面的 export JAVA_HOME=$JAVA_HOME 改成 export JAVA_HOME=/usr/local/java/jdk1.7.0_65

先用 sbin/stop-dfs.sh 停止dfs进程,设置 JAVA_HOME 后再次启动成功,如下图:

Hadoop+HBase完全分布式安装

3.4.3 启动yarn服务进程:

sbin/start-yarn.sh

看到如下日志

Hadoop+HBase完全分布式安装

3.4.4 启动验证

在dobbin1机器上(NameNode和SecondaryNameNode节点)执行命令 jps

显示如下两个进程表示NameNode 和 SecondaryNameNode节点启动成功:

Hadoop+HBase完全分布式安装

再在另外两台机器上执行 jps 命令查看到DataNode进程如下,表名DataNode节点启动成功

Hadoop+HBase完全分布式安装

4 HBase安装

4.1 配置HBase

将HBase压缩包解压到/home/hadoop目录下,并设置环境变量 vi /etc/profile

export HBASE_HOME=/home/hadoop/hbase-1.2.3
export PATH=PATH:HBASE_HOME/bin

修改改文件$HBASE_HOME/conf/hbase-env.sh,修改内容如下:

export JAVA_HOME=/usr/local/java/jdk1.7.0_65

进入到HBase安装目录,打开配置文件 $HBASE_HOME/conf/hbase-site.xml 配置如下:

Hadoop+HBase完全分布式安装

打开配置文件 $HBASE_HOME/conf/regionservers 添加DataNode节点的hostname并保存,如下:

dobbin2
dobbin3

新建一个名为 backup-masters 的文件,文件内容为 dobbin2, 将dobbin2机器设置成备用主节点

所有节点均作如上配置

4.2 启动HBase

配置成功后,在Master节点上启动HBase集群。启动顺序为Hadoop -> Zookeeper -> HBase。

在dobbin1机器上执行启动命令:

bin/start-hbase.sh

启动成功后看到如下日志:

Hadoop+HBase完全分布式安装

4.3 启动后验证

在各个机器上执行 jps 命令,

dobbin1节点为 HMaster

Hadoop+HBase完全分布式安装

dobbin2节点 即是备用主节点,也是RegionServer

Hadoop+HBase完全分布式安装

dobbin3节点为数据节点RegionServer

Hadoop+HBase完全分布式安装

用shell命令登录到hbase命令模式:

bin/hbase shell

登录成功后如下图所示:

Hadoop+HBase完全分布式安装

至此,HBase安装成功!