第一步:虚拟机安装
使用CentOS6.9,最小化安装,安装完成之后,克隆出另外6台虚拟机。克隆完成之后需要对网卡进行修改,步骤如下:
1. 修改hostname vi /etc/sysconfig/network
2. 修改网卡配置,把eth0的信息删掉,eth1的name改成eth0。vi /etc/udev/rules.d/70-persistent-net.rules
3. 修改eth0的配置信息,vi /etc/sysconfig/network-scripts/ifcfg-eth0 将其uuid删除,更改MAC地址为rules中的原有的eth1的MAC信息,增加GATEWAY(网关),NETMASK(子网掩码),IPADDR(IP)
4.配置完成后,reboot即可。重启后,ping baidu.com 无问题,说明成功。
5.配置hosts
vi /etc/hosts
6.配置普通用户
7.添加sudo权限,vi /etc/sudoers
添加这一句,使用wq!强制保存退出。
7.创建压缩包存储文件夹和解压文件夹
第二步:软件安装
安装ssh,配置免密登陆
1. yum install openssh-clients -y 安装SSH服务
2. 在每台机器上生成ssh-keygen ,命令为 ssh-keygen -t rsa,然后一直回车,使用securetRT可以很方便的把命令行输入到各个terminal中
3.将各个生成的密钥复制到每个虚拟机中。ssh-copy-id hadoop1, ssh-copy-id hadoop2 .....
4.测试免密登陆是否完成
安装JDK
1. 使用rz命令上传java的压缩包
2. tar -zvxf jdk.***.tar.gz -C apps,解压之后改名,方便以后更换java版本,mv jdkXXX jdk
3.vi /etc/profile : JAVA_HOME=/home/hadoop/apps/jdk PATH=$JAVA_HOME/bin:$PATH
4.scp -r /home/hadoop/apps/jdk hadoop2:/home/hadoop/apps
scp -r /home/hadoop/apps/jdk hadoop3:/home/hadoop/apps .....(传到所有的机器上)
5. scp /etc/profile hadoop2:/etc/profile
scp /etc/profile hadoop3:/etc/profile ....(传到所有的机器上)
6.source /etc/profile (发送到所有页面上,securetRT的功能)
7. 使用java -version检查java环境是否配置完成
安装Zookeeper
官网下载的zookepper的压缩包,zookeeper下载
1.rz上传压缩包
2.tar -zvxf zookeeper3.4.12.tar.gz -C /home/hadoop/apps 解压缩,并且更名 mv zookeeper3.4.12 zookeeper
3.修改配置文件
cd /home/hadoop/apps/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
将其中的dataDir改成dataDir=/home/hadoop/app/zookeeper/tmp
在配置文件的最后添加
server.1=hadoop5:2888:3888
server.2=hadoop6:2888:3888
server.3=hadoop7:2888:3888
:wq,保存退出。
4. 建立新的文件夹tmp
mkdir /home/hadoop/apps/zookeeper/tmp
echo 1 > /home/hadoop/apps/zookeeper/tmp/myid 在tmp中myid中输入id。
5. 使用scp将zookeeper复制到hadoop6,hadoop7中
scp -r /home/hadoop/apps/zookeeper/ hadoop6:/home/hadoop/apps/
scp -r /home/hadoop/apps/zookeeper/ hadoop7:/home/hadoop/apps/
6. 在hadoop6中输入2作为其myid,在hadoop7中输入3作为其myid
echo 2 > /home/hadoop/apps/zookeeper/tmp/myid
echo 3 > /home/hadoop/apps/zookeeper/tmp/myid
安装Hadoop
1. 上传hadoop压缩包
2. 解压到/home/hadoop/apps下:
tar -zxvf hadoop-2.9.1.tar.gz -C /home/hadoop/apps
3. 配置文件
cd /home/hadoop/apps/hadoop/etc/hadoop
3.1 配置core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://pawn/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/apps/hdpdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value>
</property>
</configuration>
3.2 配置hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>pawn</value>
</property>
<property>
<name>dfs.ha.namenodes.pawn</name>
<value>pawn1,pawn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.pawn.pawn1</name>
<value>hadoop1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.pawn.pawn1</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.pawn.pawn2</name>
<value>hadoop2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.pawn.pawn2</name>
<value>hadoop2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/pawn</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journaldata</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.bi</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
3.3 配置mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.4 配置yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>mini3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mini4</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mini5:2181,mini6:2181,mini7:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
更改了上述配置后,进行检查,检查core-site中的defaultFS是否和hdfs-site中的一致,根据配置的tmp.dir文件在相应的位置新建文件夹。
4. 使用scp 将hadoop复制到各台机器上。
5. 配置/etc/profile
export HADOOP_HOME=/home/hadoop/apps/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
source /etc/profile
启动HA
1.首先启动hadoop5,hadoop6,hadoop7上的zookeeper因为ZKFC的格式化和启动依赖zookeeper。
2.格式化hadoop1上的namenode
hdfs namenode -format
3.格式化完之后,启动hadoop1的namenode,并且格式化namenode(standby),hadoop2的namenode(standby)的初始化需要与hadoop1沟通。
hadoop-daemon.sh start namenode (hadoop1上)
hdfs namenode -bootstrapStandby (hadoop2上)
4.格式化ZKFC(在hadoop1上执行一次便可)
hdfs zkfc -formatZK
5.启动HDFS,在hadoop1上执行便可
start-dfs.sh
6.在hadoop3执行yarn
start-yarn.sh
验证完成
1. 检查各虚拟机的进程,jps
2.查看hadoop1:50070和Hadoop2:50070
到此,对于hadoop-HA的配置已经完成了