Hadoop集群部署
一、环境配置信息
组件 | 版本 |
---|---|
OS | CentOS 7.2 64bit |
Hadoop | hadoop-2.6.0-cdh5.15.1 |
ZooKeeper | 3.4.6 |
JRE | 1.8.0_45 |
软件存放在https://pan.baidu.com/s/1kbVB00sHAcVyH1kzjl735g中
二、主机规划
在云提供商购买三台云主机,配置为2核8G内存。
IP | Host | 安装软件 | 进程 |
---|---|---|---|
114.67.97.1* | ruozedata001 | Hadoop、zookeeper | NameNode DFSZKFailoverController JournalNode DataNode ResourceManager JobHistoryServer NodeManager QuorumPeerMain |
114.67.97.2* | ruozedata002 | Hadoop、zookeeper | NameNode DFSZKFailoverController JournalNode DataNode ResourceManager NodeManager QuorumPeerMain |
114.67.98.1** | ruozedata003 | Hadoop、zookeeper | JournalNode DataNode NodeManager |
PS:符号*表示隐藏真实数字,根据自己的实际情况进行部署。
当前系统配置 NameNode,ResourceManager 进程的 HA
三、环境准备
使用XShell或者SecurityCRT连接云主机进行后续操作。
1、目录规划
在三台云主机上新建名为<font color=red>hadoop</font>的用户,<font color=red>无密码</font>。
[root@ruozedata001 ~]# useradd hadoop
切换至hadoop用户,在其家目录(/home/hadoop)下新建如下列表中的新目录
[root@ruozedata001 hadoop]# su - hadoop
[hadoop@ruozedata001 ~]$ mkdir app data lib maven_repos software script source tmp
目录名 | 说明 |
---|---|
app | 最终软件安装的目录 |
data | 存放测试数据 |
lib | 存放我们自己开发的jar |
maven_repos | Maven本地仓库 |
software | 存放各种软件 |
script | 存放脚本 |
source | 存放源代码 |
tmp | 临时文件夹 |
<font color=red>注:以下操作均使用hadoop用户操作,如需root用户操作会特别指明。</font>
2、上传组件
将存在个人电脑中的Hadoop、ZK和JDK使用rz命令(如未安装,使用root用户执行yum -y install lrzsz进行安装)上传至ruozedata001主机的/home/hadoop/software目录下
3、ssh三台机器互信
1) 将三台机器的内网ip和hostname分别写入(root用户操作)三台主机的/etc/hosts文件中。
如:
172.24.117.89 ruozedata001
172.24.117.91 ruozedata002
172.24.117.90 ruozedata003
2) 三台主机都执行ssh-keygen命令(一路按回车)生成公钥和私钥
[hadoop@ruozedata001 ~]$ ssh-keygen
进入.ssh目录,复制公钥文件生成authorized_keys文件。
[hadoop@ruozedata001 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将ruozedata002和ruozedata003上的id_rsa.pub
公钥内容追加进ruozedata001的authorized_keys文件,再将此文件分发到其他两台主机的.ssh目录下。
3) 将三台机器上的authorized_keys文件权限改为600
chmod 0600 ~/.ssh/authorized_keys
4) 在三台机器都执行一遍下面的命令(遇到需要输入yes的就输入)。如正常显示出日期,不再提示需要输入密码,则说明ssh互信配置成功。
ssh ruozedata001 date
ssh ruozedata002 date
ssh ruozedata003 date
<font color=red>Tips</font>:authorized_keys文件中内容全在一行上,为避免直接拷贝粘贴可能带来的换行问题。可用sz命令将002和003机器上的id_rsa.pub
下载到个人电脑改个名,再上传至001机器的.ssh目录。执行
[hadoop@ruozedata001 ~]$cat ~/.ssh/id_rsa_002.pub >> ~/.ssh/authorized_keys
[hadoop@ruozedata001 ~]$cat ~/.ssh/id_rsa_003.pub >> ~/.ssh/authorized_keys
就将另外两台主机的公钥追加进authorized_keys文件中了
四、在CentOS上安装组件
将001主机上的Hadoop、JDK、ZK软件包拷贝到002和003主机的/home/hadoop/software目录中。
[hadoop@ruozedata001 ~]$scp ~/software/* ruozedata002:/home/hadoop/software
[hadoop@ruozedata001 ~]$scp ~/software/* ruozedata003:/home/hadoop/software
<font color=red>组件的安装操作三台主机同时做,操作几乎一样</font>
1、JDK的安装配置
- 用root用户创建/usr/java目录,解压JDK软件包至此目录
[root@ruozedata001 ~]# mkdir /usr/java
[root@ruozedata001 ~]# tar -zxvf /home/hadoop/software/jdk-8u45-linux-x64.gz -C /usr/java
[root@ruozedata001 ~]# vi /etc/profile
2) 修改/usr/java/jdk1.8.0_45目录的权限(不修改的话会出现意想不到的坑)
修改前
[root@ruozedata001 java]# ll /usr/java/
total 4
drwxr-xr-x 8 10 143 4096 Apr 11 2015 jdk1.8.0_45
更改用户及用户组
[root@ruozedata001 java]# chown -R root:root /usr/java/*
[root@ruozedata001 java]# ll /usr/java/
total 4
drwxr-xr-x 8 root root 4096 Apr 11 2015 jdk1.8.0_45
3) 添加java的环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
保存退出,然后执行source命令使环境变量生效。查看java版本,检验是否环境变量配置正确.
[root@ruozedata001 ~]# source /etc/profile
[root@ruozedata001 ~]# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
2、ZooKeeper的安装配置
- 切换至hadoop用户,解压ZK软件包至/home/hadoop/app下。
[hadoop@ruozedata001 ~]$ tar -zxvf ~/software/zookeeper-3.4.6.tar.gz -C ~/app
2)为了变更版本方便,为zookeeper-3.4.6目录创建一个软连接
[hadoop@ruozedata001 ~]$ ln -s ~/app/zookeeper-3.4.6 ~/app/zookeeper
- 修改配置文件
i. 进入zookeeper配置文件目录
[hadoop@ruozedata001 ~]$ cd ~/app/zookeeper/conf/
ii. 复制模板文件改名为zoo.cfg
[hadoop@ruozedata001 conf]$ cp zoo_sample.cfg zoo.cfg
iii. 修改zoo.cfg配置文件
根据我们的目录规划更改dataDir的值
dataDir=/home/hadoop/data/zookeeper
添加server信息
server.1=ruozedata001:2888:3888
server.2=ruozedata002:2888:3888
server.3=ruozedata003:2888:3888
- 在/home/hadoop/data目录下新建zookeeper目录
[hadoop@ruozedata001 ~]$ mkdir ~/data/zookeeper
- 为每个主机上的zookeeper创建id标识文件
ruozedata001主机
[hadoop@ruozedata001 ~]$ echo 1 > ~/data/zookeeper/myid
ruozedata002主机
[hadoop@ruozedata002 ~]$ echo 2 > ~/data/zookeeper/myid
ruozedata003主机
[hadoop@ruozedata003 ~]$ echo 3 > ~/data/zookeeper/myid
<font color=red>Tips:</font>注意 > 符号的左右两边是有空格的,否则会生成一个零字节的文件。
- 配置环境变量。
i. 修改~/.bash_profile文件。
[hadoop@ruozedata001 ~]$ vi ~/.bash_profile
在配置文件中添加环境变量
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
ii. 执行source命令使环境变量生效
[hadoop@ruozedata001 ~]$ source .bash_profile
iii. 验证环境变量是否生效
[hadoop@ruozedata001 ~]$ which zkServer.sh
~/app/zookeeper/bin/zkServer.sh
- 启动ZooKeeper
i. 全部主机都执行启动命令
[hadoop@ruozedata001 ~]$ zkServer.sh start
ii. 全部主机都查看运行状态
[hadoop@ruozedata001 ~]$ zkServer.sh status
会有一个ZK的mode是leader,另外两个的mode是follower
<font color=red>Tips:</font>生产上的经验是ZK全部启动后,等个一两分钟后再执行zkServer.sh status查看状态是否正常
3.Hadoop的安装配置
- 切换至hadoop用户,解压Hadoop软件包至/home/hadoop/app下。
[hadoop@ruozedata001 ~]$ tar -zxvf ~/software/hadoop-2.6.0-cdh5.15.1.tar.gz -C ~/app
2)为了变更版本方便,为zookeeper-3.4.6目录创建一个软连接
[hadoop@ruozedata001 ~]$ ln -s ~/app/hadoop-2.6.0-cdh5.15.1 ~/app/hadoop
- 修改配置文件(/home/hadoop/app/hadoop/etc/hadoop目录下)
i. 修改hadoop-env.sh
修改前:exportJAVA_HOME=${JAVA_HOME}
修改前:exportJAVA_HOME=/usr/java/jdk1.8.0_45
ii. 修改core-site.xml、hdfs-site.xml、slaves、yarn-site.xml
为方便直接将上述文件删除,从个人电脑拉取上来。
所需配置文件存放在https://pan.baidu.com/s/1LmRS3JySP7xBFLqYJGwiuw
- 配置环境变量
i. 在~/.bash_profile中添加Hadoop的环境变量
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
ii. 使环境变量生效
[hadoop@ruozedata001 ~]$ source ~/.bash_profile
iii. 检验环境变量是否生效
[hadoop@ruozedata001 ~]$ which hdfs
~/app/hadoop/bin/hdfs
- 启动Hadoop集群
i. 启动前先检查所有ZooKeeper的运行状态。正常时才能启动Hadoop。
ii. 首先启动JournalNode
[hadoop@ruozedata001 ~]$ hadoop-daemon.sh start journalnode
使用jps命令查看是否有JournalNode进程
iii. NameNode格式化(只对ruozedata001操作)
[hadoop@ruozedata001 ~]$ hadoop namenode -format
看到输出信息中有“successfully format”字样,说明格式化成功。
iv. 同步NameNode元数据
[hadoop@ruozedata001 ~]$ scp -r /home/hadoop/data/dfs/name ruozedata002:/home/hadoop/data/dfs
v. 初始化ZKFC
[hadoop@ruozedata001 ~]$ hdfs zkfc -formatZK
看到输出信息中有“successfully created”字样,说明初始化成功。
vi. 启动HDFS
[hadoop@ruozedata001 ~]$ start-dfs.sh
<font color=red>Tips:</font>${HADOOP_HOME}/etc/hadoop/slaves文件必须是ASCII text格式才能正确启动集群,使用file命令可查看。
如需单进程启动,可执行
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start journalnode
hadoop-daemon.sh start zkfc
vii. 启动YARN框架
在ruozedata001主机上执行start-yarn.sh,此时在ruozedata002主机上没有启动RM进程,需执行yarn-daemon.sh start resourcemanager手工启动。
viii. 启动JobHistoryServer
在ruozedata001主机上执行 mr-jobhistory-daemon.sh start historyserver。
ix. 验证集群启动成功
①使用jps命令
②在浏览器打开页面查看。http://[001主机或002主机的IP]:50070 和 http://[active主机的IP]:8088,http://[standby主机的IP]:8088/cluster/cluster和http://[001主机IP]:19888
5.关闭集群
[hadoop@ruozedata001 ~]# mr-jobhistory-daemon.sh stop historyserver
[hadoop@ruozedata002 ~]# yarn-daemon.sh stop resourcemanager
[hadoop@ruozedata001 ~]# stop-all.sh
[hadoop@ruozedata001 ~]# zkServer.sh stop
[hadoop@ruozedata002 ~]# zkServer.sh stop
[hadoop@ruozedata003 ~]# zkServer.sh stop