Hadoop HA高可用部署

注意:任务安装包统一在“/h3cu/”中。

编号 主机名 类型 用户 密码
1 master 主节点 root passwd
2 master2 主节点 root passwd
3 slave1 从节点 root passwd
3 slave2 从节点 root passwd

准备工作:JAVA环境部署、Zookeeper部署,ssh无密码登录:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave2

1、修改hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk

2、修改core-site.xml

<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>

<!-- 指定HDFS数据存放路径,默认存放在linux的/tmp目录中 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/tmp</value>
</property>

<!-- 指定zookeeper的地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,master2:2181,slave1:2181</value>
</property>
</configuration>

3、修改hdfs-site.xml(配置这个nameservice中有几个namenode)

<configuration> 
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>

<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>master:9000</value>
</property>

<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>master:50070</value>
</property>

<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>master2:9000</value>
</property>

<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>master2:50070</value>
</property>

<!-- 指定NameNode的日志在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;master2:8485;/ns1</value>
</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/data/journal</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</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>/root/.ssh/id_rsa</value>
</property>

<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

4、修改mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

配置Yarn的HA

5、修改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>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>

<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,master2:2181,slave1:2181</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

创建相关目录:

mkdir -p /usr/local/src/hadoop/data/journal
mkdir -p /usr/local/src/hadoop/tmp

6、修改slaves 从节点的地址

slave1
slave2

7、将配置好的hadoop拷贝到其他节点

scp -r /usr/local/src/hadoop/ master2:/usr/local/src/
scp -r /usr/local/src/hadoop/ slave1:/usr/local/src/
scp -r /usr/local/src/hadoop/ slave2:/usr/local/src/

启动Zookeeper集群

在每一台机器上输入:

zkServer.sh start

启动journalnode

在master和master2两台节点上启动journalnode节点:

hadoop-daemon.sh start journalnode

格式化HDFS和Zookeeper(在master上执行)

格式化HDFS:

hdfs namenode -format

将/usr/local/src/hadoop/tmp拷贝到master2的/usr/local/src/hadoop/tmp下

scp -r dfs/ master2:/usr/local/src/hadoop/tmp

格式化zookeeper:

hdfs zkfc -formatZK

日志:INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 in ZK.

以上日志表明在Zookeeper的文件系统中创建了/hadoop-ha/ns1的子目录用于保存Namenode的结构信息

启动Hadoop集群(在bigdata12上执行)

启动Hadoop集群的命令:

start-all.sh

在master2上手动启动ResourceManager作为Yarn的备用主节点:

yarn-daemon.sh start resourcemanager

至此,Hadoop集群的HA架构就已经搭建成功。

results matching ""

    No results matching ""