HadoopHA(HDFS高可用)
HDFS高可用环境搭建
一、克隆虚拟机
准备三台虚拟机
二、修改虚拟机相关配置
1.修改虚拟机ip地址
2.删除70-persistent-net.rules文件
3.修改虚拟机名称
4.修改hosts文件,将IP地址与主机名相映射
5.重启虚拟机
6.ping一下外网,看是否连接上网络
其余两台虚拟机也是上述配置,但需要保证三台虚拟机IP地址不同。这里我配置了/etc/sudoers文件,使得普通用户有了和root用户同样的权限,如果你使用的是root用户,可以省略掉sudo操作。
ssh免密码登陆设置
1.生成密钥
一路回车,直到出现如图所示的情况。
2.将公钥追加到其他两台机器上(包括自己)
配置完成后登录到另外两台机器,不再需要密码
另外两台机器也是同样的配置。
配置jdk环境变量
1.进入hadoop21的/opt目录下,创建software和module两个文件夹
2.上传hadoop、zookeeper和jdk的tar.gz包到hadoop21的/opt/software目录下
3.解压jdk到/opt/module目录
4.配置jdk环境变量
配置zookeeper
1.解压zookeeper到/opt/module
2.配置zookeeper环境变量
3.进入zookeeper的conf目录,将zoo_sample.cfg改名为zoo.cfg,配置zoo.cfg
4.在zookeeper目录下创建tmp/zookeeper文件夹,并在该目录下创建一个myid文件,内容为1
配置hadoop
1.解压hadoop到/opt/module
2.配置hadoop环境变量
3.在hadoop.env.sh中配置jdk环境变量
4.配置core-site.xml,配置内容如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/tmp</value>
</property>
<!--指定zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop21:2181,hadoop22:2181,hadoop23:2181</value>
</property>
</configuration>
5.配置hdfs-site.xml,配置内容如下
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop21:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop21:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop22:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop22:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop21:8485;hadoop22:8485;hadoop23:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/hadoop-2.7.2/journaldata</value>
</property>
<!--开启namenode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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>
<!--使用sshfence隔离机制时需要ssh免登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/ysz/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
6.将mapred-site.xml.template改名为mapred-site.xml,配置内容为
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7.配置yarn-site.xml,配置内容为
<configuration>
<!-- Site specific YARN configuration properties -->
<!--开启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>hadoop21</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop22</value>
</property>
<!--指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop21:2181,hadoop22:2181,hadoop23:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
8.配置slaves
9.创建masters文件,并配置
注意:另外两台机器的环境变量和hadoop21相同,配置好环境变量,都要执行source /etc/profile命令
将module文件夹分发到另外两台机器
进入hadoop22机器上的zookeeper相应目录,修改myid文件
进入hadoop23机器上的zookeeper相应目录,修改myid文件
启动zookeeper集群
每台机器上分别执行zkServer.sh start命令,用jps命令查看是否启动成功
在每台机器上启动journalnode
在hadoop21上格式化namenode
将hadoop21中的元数据复制到hadoop22上
在hadoop21上格式化ZKFC
在hadoop21上启动hdfs
在hadoop21上启动yarn
在hadoop22上启动resourcemanager
登录到192.168.230.21:50070和192.168.230.22:50070
可以看到,hadoop21上的namenode为active,hadoop22上的namenode为standby
用kill -9命令杀掉hadoop21上的namenode
刷新192.168.230.22:50070,可以看到为active状态。到此HadoopHA(HDFS高可用)搭建完成!