第七章:HadoopHA搭建

交流群:942277506,问题答案:董长春

  1. Hadoop2.0 HA搭建步骤
    1. 准备工作

6台虚拟机,内存512M,hadoop1~6

修改静态IP:192.168.65.121 ~ 126

    1. 架构图

 

    1. 集群节点分配
  • hadoop1

Zookeeper

NameNode(active)

Resourcemanager (active)

  • hadoop2

Zookeeper

NameNode (standby)

  • hadoop3

Zookeeper

ResourceManager(standby)

  • hadoop4

DataNode

NodeManager

JournalNode

  • hadoop5

DataNode

NodeManager

JournalNode

  • hadoop6

DataNode

NodeManager

JournalNode

    1. 安装步骤
      1. 固化IP

修改配置文件

cd /etc/sysconfig/network-scripts   #进入网络配置目录

dir ifcfg*                         #找到网卡配置文件

ifcfg-ens16777736  ifcfg-lo

vi ifcfg-ens16777736

或者

vim /etc/sysconfig/network-scripts/ifcfg-ens33

配置文件内容

TYPE=Ethernet

BOOTPROTO=static                              #改成static,针对NAT

NAME=eno16777736

UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8

DEVICE=eno16777736

ONBOOT=yes               #开机启动此网卡

IPADDR=192.168.163.129   #固定IP地址

NETMASK=255.255.255.0    #子网掩码

GATEWAY=192.168.163.2    #网关和NAT自动配置的相同,不同则无法登录

DNS1=192.168.163.2       #和网关相同

重启网络

service network restart

ping www.baidu.com

 

      1. 永久关闭每台机器的防火墙

systemctl stop firewalld.service        #关闭防火墙服务

systemctl disable firewalld.service     #禁止防火墙开启启动

firewall-cmd --state                   #检查防火墙状态

      1. 为每台机器配置主机名*

hadoop1,hadoop2 ……

以及hosts文件

配置主机名

执行:vim /etc/hostname 修改为hadoop1~6

然后执行 hostname 主机名

达到不重启生效目的

配置hosts文件

执行:vim /etc/hosts

示例:

127.0.0.1 localhost

::1 localhost

192.168.65.121 hadoop1

192.168.65.122 hadoop2

192.168.65.123 hadoop3

192.168.65.124 hadoop4

192.168.65.125 hadoop5

192.168.65.126 hadoop6

      1. 为每台机器配置ssh免秘钥登录

执行:ssh-keygen

ssh-copy-id root@hadoop1 (分别发送到6台节点上)

vim /root/.ssh/known_hosts 检查是否配置成功

      1. 为每台机器安装jdk和配置JAVA_HOME

vim /etc/profile

在尾行添加

JAVA_HOME=/home/app/jdk1.8.0_65

JAVA_BIN=/home/app/jdk1.8.0_65/bin

HADOOP_HOME=/home/app/hadoop-2.7.1

PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

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

export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

      1. 前三台机器安装和配置zookeeper

解压安装包 tar -xvf zookeeper-3.4.8.tar.gz

进入conf目录 cd zookeeper-3.4.8/conf/

复制zoo_sample.cfg zoo.cfg:  cp zoo_sample.cfg zoo.cfg

编辑zoo.cfgvim zoo.cfg

 

 

Zookeeper根目录中创建tmp文件夹,tmp文件夹中创建myid文件,编辑文本:1(2,3)

 

拷贝整个zookeeper目录到hadoop2,hadoop3并修改myid文件分别为2,3

scp -r zookeeper-3.4.8 hadoop2:/home/app

 

      1. 安装和配置01节点的hadoop

创建/home/app目录

解压安装包

      1. 配置hadoop-env.sh

cd etc/hadoop

配置 hadoop-env.sh

vim hadoop-env.sh

#JDK安装目录,虽然系统配置了JAVA_HOME,但有时无法正确识别,最后进行配置

export JAVA_HOME=/home/app/jdk1.8.0_65

#指定hadoop的配置文件目录,不运行hadoop可以不指定

export HADOOP_CONF_DIR=/home/app/hadoop-2.7.1/etc/hadoop

配置jdk安装所在目录

配置hadoop配置文件所在目录

      1. 配置core-site.xml

<configuration>

<!--用来指定hdfs的老大,ns为固定属性名,表示两个namenode-->

<property>

<name>fs.defaultFS</name>

<value>hdfs://ns</value>

</property>

<!--用来指定hadoop运行时产生文件的存放目录-->

<property>

<name>hadoop.tmp.dir</name>

<value>/home/app/hadoop-2.7.1/tmp</value>

</property>

<!--执行zookeeper地址-->

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

</configuration>

      1. 配置01节点的hdfs-site.xml

配置

<configuration>

<!--执行hdfsnameservicens,core-site.xml保持一致-->

<property>

<name>dfs.nameservices</name>

<value>ns</value>

</property>

<!--ns下有两个namenode,分别是nn1,nn2-->

<property>

<name>dfs.ha.namenodes.ns</name>

<value>nn1,nn2</value>

</property>

<!--nn1 RPC 通信地址-->

<property>

<name>dfs.namenode.rpc-address.ns.nn1</name>

<value>hadoop1:9000</value>

</property>

<!--nn1http通信地址-->

<property>

<name>dfs.namenode.http-address.ns.nn1</name>

<value>hadoop1:50070</value>

</property>

<!--nn2RPC通信地址-->

<property>

<name>dfs.namenode.rpc-address.ns.nn2</name>

<value>hadoop2:9000</value>

</property>

<!--nn2 http 通信地址-->

<property>

<name>dfs.namenode.http-address.ns.nn2</name>

<value>hadoop2:50070</value>

</property>

<!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以

  jn 集群里获取

          最新的namenode的信息,达到热备的效果-->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/ns</value>

</property>

<!--指定 JournalNode 存放数据的位置-->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/app/hadoop-2.7.1/journal</value>

</property>

<!--开启namenode故障时自动切换-->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<!--配置切换的实现方式-->

<property>

<name>dfs.client.failover.proxy.provider.ns</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<!--配置隔离机制-->

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<!--配置隔离机制的ssh登录秘钥所在的位置-->

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/root/.ssh/id_rsa</value>

</property>

<!--配置namenode数据存放的位置,可以不配置,如果不配置,默认用的是

          core-site.xml里配置的hadoop.tmp.dir的路径-->

<property>

<name>dfs.namenode.name.dir</name>

<value>file:///home/app/hadoop-2.7.1/tmp/namenode</value>

</property>

<!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是

               core-site.xml 里配置的 hadoop.tmp.dir 的路径-->

<property>

<name>dfs.datanode.data.dir</name>

<value>file:///home/app/hadoop-2.7.1/tmp/datanode</value>

</property>

<!--配置 block 副本数量-->

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

</configuration>

      1. 配置 mapred-site.xml

配置代码:

<configuration>

<property>

<!--指定mapreduce运行在yarn-->

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

      1. 配置yarn-site.xml

配置代码:

<configuration>

<!--开启YARN HA -->

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

  <!--指定两个resourcemanager的名称-->

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<!--配置rm1rm2的主机-->

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>hadoop1</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>hadoop3</value>

</property>

<!--开启yarn恢复机制-->

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

<!--执行rm恢复机制实现类-->

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<!--配置zookeeper的地址-->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

<description>For multiple zk services, separate them with comma</description>

</property>

<!--指定YARN HA的名称-->

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>yarn-ha</value>

</property>

<!--指定 yarn 的老大 resoucemanager 的地址-->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop1</value>

</property>

<!--NodeManager获取数据的方式-->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

      1. 配置slaves文件

配置代码:

hadoop4

hadoop5

hadoop6

      1. 根据配置文件,创建相关的文件夹,用来存放对应数据

在hadoop-2.7.1目录下创建:

①journal目录

②创建tmp目录

③在tmp目录下,分别创建namenode目录和datanode目录

      1. 配置 hadoop 的环境变量(可不配)

JAVA_HOME=/home/app/jdk1.8.0_65

JAVA_BIN=/home/app/jdk1.8.0_65/bin

HADOOP_HOME=/home/app/hadoop-2.7.1

PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

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

export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

      1. 通过scp 命令,将hadoop安装目录远程copy到其他5台机器上

比如向hadoop02节点传输:

scp -r hadoop-2.7.1 root@hadoop2:/home/app

      1. 启动zookeeper集群

在Zookeeper安装目录的bin目录下执行:sh zkServer.sh start

sh zkServer.sh status  验证是否启动成功,如成功,两台从节点一台主节点

      1. 格式化zookeeper

在zk的leader节点上执行:

hdfs zkfc -formatZK,这个指令的作用是在zookeeper集群上生成ha节点 (ns节点)

注:18--24步可以用一步来替代:进入hadoop安装目录的sbin目录,执行: sh start-dfs.sh 。 但建议还是按部就班来执行,比较可靠。

      1. 启动journalnode集群

在4、5、6节点上执行:

切换到hadoop安装目录的sbin目录下,执行:

sh hadoop-daemons.sh start journalnode

然后执行jps命令查看进程。

      1. 格式化1节点的namenode

在1节点上执行:

hadoop namenode -format

      1. 启动1节点的namenode

在 1 节点上执行:

sh hadoop-daemon.sh start namenode

      1. 把2节点的namenode节点变为standby namenode节点

在2节点上执行:

hdfs namenode -bootstrapStandby

      1. 启动 2 节点的 namenode 节点

在2节点上执行:

sh hadoop-daemon.sh start namenode

      1. 在4,5,6节点上启动datanode节点

4,5,6 节点上执行: sh hadoop-daemon.sh start datanode

      1. 启动zkfc(启动FalioverControllerActive)

在1,2节点上执行:

sh hadoop-daemon.sh start zkfc

      1. 在1节点上启动主Resourcemanager

1节点上执行:start-yarn.sh

启动成功后,4,5,6节点上应该有nodemanager 的进程

      1. 在 3 节点上启动副 Resoucemanager

3节点上执行:sh yarn-daemon.sh start resourcemanager

    1. 测试

输入地址: http://192.168.65.121:50070 ,查看 namenode 的信息,是active状态

 

输入地址:http://192.168.65.122:50070查看namenode的信息,是standby状态

 

然后停掉01节点的namenode,此时发现standby的namenode变为active。

如果出现standby节点不能正确替代active的情况检查fuser是否正常

yum provides “*/fuser”

 

在启动namenode的两台节点上安装fuser,分别执行

yum -y install psmisc

 

http://f.dataguru.cn/hadoop-707122-1-1.html

 

 

猜你喜欢

转载自blog.csdn.net/dcc15011003101/article/details/106482157
今日推荐