Hadoop高可用集群搭建
写在前面的废话
现在我们要开始搭建Hadoop集群了,Hadoop包含如下两部分:
- HDFS, 即Hadoop分布式文件系统
- YARN, 即第二代的MapReduce(MR2),解决了第一代MR的诸多问题,例如集群扩展困难(最多三四千台机器),单点故障,资源调度不灵活等.第一代MR只能实现MR算法,而YARN真正成为了一个计算平台,例如Spark也可以基于YARN运行
好了,Hadoop的资料以及最新发展情况,还是自己网上搜索学习吧.
重要说明
Hadoop默认是将一份数据复制两份存储在另外两台机器上,所以,一份数据在集群中存在三份,那么对集群内机器数量的要求就是五台:
- 一台主NameNode,存储集群的元数据
- 一台备NameNode,存储集群的元数据
- 三台DataNode,存储数据
可是我们在自己的台式机或笔记本上,在实在难以搭建和运行如此多的虚拟机,所以,我依然使用了三台虚拟机,把DataNode改为了一台.在Hadoop的配置中,也会有所体现,需要修改一个参数,使之默认数据备份数量为1.
开始
准备
要求集群内的每台机器都要
- 安装了JDK,并配置好了环境变量
- 具有内容一致的/etc/hosts文件(IP地址与主机名的映射)
- 安装了ZooKeeper,并已做好配置,可以正常启动
- 已下载了Hadoop软件包(本文使用hadoop-2.9.0.tar.gz这个包)
集群规划
主机名 | IP地址 | 安装软件 | 运行进程 |
---|---|---|---|
bd-1 | 192.168.206.132 | JDK,Hadoop,ZooKeeper | NameNode(Active),DFSZKFailoverController(zkfc),ResouceManager(Standby),QuorumPeerMain(ZooKeeper) |
bd-2 | 192.168.206.133 | JDK,Hadoop,ZooKeeper | NameNode(Standby),DFSZKFailoverController(zkfc),ResouceManager(Active),QuorumPeerMain(ZooKeeper),Jobhistory |
bd-1 | 192.168.206.134 | JDK,Hadoop,ZooKeeper | DataNode,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper) |
安装(如无特殊说明,每台虚拟机均需做完下面的操作)
1. 在每台机器上解压和安装Hadoop软件包
在官网下载的hadoop-2.9.0.tar.gz文件依然放在每个libing用户家目录下的softwares目录下
[libing@bd-1 ~]$ ll softwares/
-rw-rw-r--. 1 libing libing 366744329 12月 11 22:49 hadoop-2.9.0.tar.gz
解压
[libing@bd-1 ~]$ tar -xzf softwares/hadoop-2.9.0.tar.gz -C /home/libing/
[libing@bd-1 ~]$ ll
总用量 36
drwxr-xr-x 9 libing libing 149 11月 14 07:28 hadoop-2.9.0
drwxr-xr-x. 8 libing libing 255 9月 14 17:27 jdk1.8.0_152
drwxrwxr-x. 2 libing libing 148 12月 20 20:09 softwares
-rwxrw-r-- 1 libing libing 151 12月 21 22:29 zkStartAll.sh
-rwxrw-r-- 1 libing libing 149 12月 21 22:37 zkStopAll.sh
drwxr-xr-x 12 libing libing 4096 12月 21 21:51 zookeeper-3.4.10
-rw-rw-r-- 1 libing libing 17810 12月 21 22:31 zookeeper.out
[libing@bd-1 ~]$ ll hadoop-2.9.0/
总用量 128
drwxr-xr-x 2 libing libing 194 11月 14 07:28 bin
drwxr-xr-x 3 libing libing 20 11月 14 07:28 etc
drwxr-xr-x 2 libing libing 106 11月 14 07:28 include
drwxr-xr-x 3 libing libing 20 11月 14 07:28 lib
drwxr-xr-x 2 libing libing 239 11月 14 07:28 libexec
-rw-r--r-- 1 libing libing 106210 11月 14 07:28 LICENSE.txt
-rw-r--r-- 1 libing libing 15915 11月 14 07:28 NOTICE.txt
-rw-r--r-- 1 libing libing 1366 11月 14 07:28 README.txt
drwxr-xr-x 3 libing libing 4096 11月 14 07:28 sbin
drwxr-xr-x 4 libing libing 31 11月 14 07:28 share
2. 配置系统环境变量
编辑/etc/profile文件
[libing@bd-1 ~]$ sudo vi /etc/profile
[sudo] libing 的密码:
添加如下内容
# Added for Hadoop
HADOOP_HOME=/home/libing/hadoop-2.9.0
export HADOOP_HOME
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CONF_DIR
YARN_HOME=${HADOOP_HOME}
export YARN_HOME
YARN_CONF_DIR=${HADOOP_CONF_DIR}
export YARN_CONF_DIR
PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export PATH
使之马上生效
[libing@bd-1 ~]$ source /etc/profile
检查验证
[libing@bd-1 ~]$ env | grep HADOOP
HADOOP_HOME=/home/libing/hadoop-2.9.0/
HADOOP_CONF_DIR=/home/libing/hadoop-2.9.0/etc/hadoop
[libing@bd-1 ~]$ env | grep YARN
YARN_HOME=/home/libing/hadoop-2.9.0/
YARN_CONF_DIR=/home/libing/hadoop-2.9.0/etc/hadoop
[libing@bd-1 ~]$ echo $PATH
/home/libing/zookeeper-3.4.10/bin:/usr/local/jdk//bin:/home/libing/zookeeper-3.4.10/bin:/usr/local/jdk//bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/libing/.local/bin:/home/libing/bin:/home/libing/hadoop-2.9.0/bin:/home/libing/hadoop-2.9.0/sbin
配置HDFS
1. 配置环境变量设置脚本
进入Hadoop的配置文件路径,并修改hadoop-env.sh文件
[libing@bd-1 ~]$ cd ~/hadoop-2.9.0/etc/hadoop/
[libing@bd-1 hadoop]$ vi hadoop-env.sh
将该行
export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/usr/local/jdk/
个人认为其实这里不改也行,毕竟我们以前都设置好JAVA_HOME环境变量了.
2. 修改core-site.xml
继续修改core-site.xml文件,在<configuration></configuration>之间填入如下内容
<configuration>
<!-- 指定hdfs的nameservice名称空间为ns -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!-- 指定hadoop临时目录,默认在/tmp/{$user}目录下,不安全,每次开机都会被清空-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/libing/hadoop-2.9.0/hdpdata/</value>
<description>需要手动创建hdpdata目录</description>
</property>
<!-- 指定ZooKeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>bd-1:2181,bd-2:2181,bd-3:2181</value>
<description>ZooKeeper地址,用逗号隔开</description>
</property>
</configuration>
保存并退出vi
3. 修改hdfs-site.xml
继续修改hdfs-site.xml文件,在<configuration></configuration>之间填入如下内容
<configuration>
<!-- NameNode HA配置 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
<description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致</description>
</property>
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
<description>ns命名空间下有两个NameNode,逻辑代号,随便起名字,分别是nn1,nn2</description>
</property>
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>bd-1:9000</value>
<description>nn1的RPC通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>bd-1:50070</value>
<description>nn1的http通信地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>bd-2:9000</value>
<description>nn2的RPC通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>bd-2:50070</value>
<description>nn2的http通信地址</description>
</property>
<!--JournalNode配置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bd-3:8485/ns</value>
<description>指定NameNode的edits元数据在JournalNode上的存放位置</description>
</property>
<property>
<name>dfs.journalnode.edits.dir