Hadoop+HBase完全分布式安装
记录下完全分布式HBase数据库安装步骤
准备3台机器:10.202.7.191 / 10.202.7.139 / 10.202.9.89
所需准备的Jar包:
- jdk-7u65-linux-x64.tar.gz (下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html )
- zookeeper-3.4.8.tar.gz (下载:http://www.apache.org/dyn/closer.cgi/zookeeper)
- hadoop-2.5.2.tar.gz (下载:http://hadoop.apache.org/releases.html)
- hbase-1.2.3-bin.tar.gz (下载:http://www.apache.org/dyn/closer.cgi/hbase/)
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:$PATHCLASSPATH=.:
JAVA_HOME/lib/dt.jar: JAVA_HOME/lib/tools.jar:$JRE_HOME/libexport 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.FastLeaderElectionMessenger WorkerSender.process(FastLeaderElection.java:452)
at org.apache.zookeeper.server.quorum.FastLeaderElectionMessenger WorkerSender.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_rsa
和 id_rsa.pub
两个文件,id_rsa
为私钥, id_rsa.pub
为公钥,紧接着将公钥文件复制成 authorized_keys
文件,操作如下:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
本地验证是否成功
ssh dobbin1
(即主机名)
结果如下:
到这步表明本机无密码登录已经设置完成,接下来把本机上的公钥复制到其他两台机器上
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如下:
下面针对NameNode节点(将dobbin1作为NameNode节点)进行配置
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves
dobbin1
dobbin2
将 hadoop-env.sh
和 yarn-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.dir
和 dfs.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
我的启动结果如下图:
看到提示dobbin3节点上 JAVA_HOME
变量没有设置,是忘了将 hadoop-env.sh
和 yarn-env.sh
里面的 export JAVA_HOME=$JAVA_HOME
改成 export JAVA_HOME=/usr/local/java/jdk1.7.0_65
。
先用 sbin/stop-dfs.sh
停止dfs进程,设置 JAVA_HOME
后再次启动成功,如下图:
3.4.3 启动yarn服务进程:
sbin/start-yarn.sh
看到如下日志
3.4.4 启动验证
在dobbin1机器上(NameNode和SecondaryNameNode节点)执行命令 jps
显示如下两个进程表示NameNode 和 SecondaryNameNode节点启动成功:
再在另外两台机器上执行 jps
命令查看到DataNode进程如下,表名DataNode节点启动成功
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
配置如下:
打开配置文件 $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
启动成功后看到如下日志:
4.3 启动后验证
在各个机器上执行 jps
命令,
dobbin1节点为 HMaster
dobbin2节点 即是备用主节点,也是RegionServer
dobbin3节点为数据节点RegionServer
用shell命令登录到hbase命令模式:
bin/hbase shell
登录成功后如下图所示:
至此,HBase安装成功!