+-
Hadoop - 集群安装(高可用)
首页 专栏 hadoop 文章详情
0

Hadoop - 集群安装(高可用)

大军 发布于 5 月 19 日

Hadoop - 集群安装已经介绍了如何安装一个Hadoop集群,但是这个集群的NameNode出现故障,那这个集群是不可以用的。我们需要借助zookeeper来安装一个高可用集群,当于Active状态的NameNode发生故障,还有Standby状态的NameNode及时切换,成为Active状态的NameNode对外提供服务。
zookeeper集群见之前的,这里的配置是bigdata01、bigdata02、bigdata03是zookeeper节点,bigdata04作为集群的observer角色。
其他步骤跟之前的集群安装一样,区别是几个配置文件的修改。

配置文件

hdfs-site.xml

这里配置2个namenode的相关信息。

<configuration> <!-- 指定副本数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--定义nameservice的名称为hadoopdajun--> <property> <name>dfs.nameservices</name> <value>hadoopdajun</value> </property> <!-- 定义hadoopdajun两个NameNode的名称:nn1,nn2 --> <property> <name>dfs.ha.namenodes.hadoopdajun</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn1</name> <value>bigdata01:9000</value> </property> <!-- nn1的http通信地址,用于web客户端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn1</name> <value>bigdata01:50070</value> </property> <!-- nn2的RPC通信地址,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn2</name> <value>bigdata02:9000</value> </property> <!-- nn2的http通信地址,用于web客户端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn2</name> <value>bigdata02:50070</value> </property> <!-- edits元数据的共享存储位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://bigdata01:8485;bigdata02:8485;bigdata03:8485/hadoopdajun</value> </property> <!-- 本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/bigdata/data/journaldata</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换的代理类 --> <property> <name>dfs.client.failover.proxy.provider.hadoopdajun</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/bigdata/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>

core-site.xml

这里配置zookeeper的相关信息,并且fs.defaultFS配置的是nameservice的名称,而不是之前的地址。

<configuration> <!-- hdfs-site.xm中配置的nameservice --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoopdajun/</value> </property> <!-- 指定hadoop工作目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/bigdata/data/hadoopdata/</value> </property> <!-- 指定zookeeper集群访问地址 --> <property> <name>ha.zookeeper.quorum</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property>

yarn-site.xml

为yarn配置zookeeper信息。

<configuration> <!-- Site specific YARN configuration properties --> <!-- 开启高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarndajun</value> </property> <!-- 指定RM的两个节点 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 指定两个节点的位置 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>bigdata03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>bigdata04</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property> <!-- 要运行MapReduce程序必须配置的附属服务 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 开启YARN集群的日志聚合功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- YARN集群的聚合日志最长保留时长 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定resourcemanager的状态信息存储在zookeeper集群上--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>

mapred-site.xml

这个跟之前就多了历史服务器信息。

<configuration> <!-- 执行框架设置为Hadoop YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 设置mapreduce的历史服务器地址和端口号 --> <property> <name>mapreduce.jobhistory.address</name> <value>bigdata04:10020</value> </property> <!-- mapreduce历史服务器的web访问地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata04:19888</value> </property> </configuration>

运行

启动journalnode,在bigdata01、bigdata02、bigdata03执行:

hadoop-daemon.sh start journalnode

在bigdata01格式化namenode:

hadoop namenode -format

生成/home/bigdata/data/hadoopdata发送到bigdata02服务器。
zookeeper元数据初始化:

hdfs zkfc -formatZK

启动hdfs集群和yarn集群,hdfs启动在任意节点,yarn启动分布在bigdata03、bigdata04更执行一次。

start-dfs.sh start-yarn.sh

http://bigdata01:50070 界面:

http://bigdata02:50070 界面:

可以看到,bigdata01是active状态,bigdata02是standby状态。如果把bigdata01的进程杀死,那bigdata02自动会变成active状态。
http://bigdata03:8088/ 界面和http://bigdata04:8088/ 界面是一样的,我这里bigdata04是主节点,如果访问bigdata03会自动调到bigdata04界面。

其他

安装这个HA集群,相比之前费了不少力,也重新安装了很多次,/home/bigdata/data/的hadoopdata、journaldata、zkdata文件夹甚至bigdata02、bigdata03、bigdata04的haddoop文件夹也删除了几次。有写可能是配置文件没写好,有写可能是之前的遗留数据,有写是zk服务问题等。

hadoop
阅读 36 更新于 5 月 19 日
举报
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
大军

踏踏实实

634 声望
93 粉丝
关注作者
0 条评论
得票数 最新
提交评论
大军

踏踏实实

634 声望
93 粉丝
关注作者
宣传栏
目录

Hadoop - 集群安装已经介绍了如何安装一个Hadoop集群,但是这个集群的NameNode出现故障,那这个集群是不可以用的。我们需要借助zookeeper来安装一个高可用集群,当于Active状态的NameNode发生故障,还有Standby状态的NameNode及时切换,成为Active状态的NameNode对外提供服务。
zookeeper集群见之前的,这里的配置是bigdata01、bigdata02、bigdata03是zookeeper节点,bigdata04作为集群的observer角色。
其他步骤跟之前的集群安装一样,区别是几个配置文件的修改。

配置文件

hdfs-site.xml

这里配置2个namenode的相关信息。

<configuration> <!-- 指定副本数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--定义nameservice的名称为hadoopdajun--> <property> <name>dfs.nameservices</name> <value>hadoopdajun</value> </property> <!-- 定义hadoopdajun两个NameNode的名称:nn1,nn2 --> <property> <name>dfs.ha.namenodes.hadoopdajun</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn1</name> <value>bigdata01:9000</value> </property> <!-- nn1的http通信地址,用于web客户端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn1</name> <value>bigdata01:50070</value> </property> <!-- nn2的RPC通信地址,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.hadoopdajun.nn2</name> <value>bigdata02:9000</value> </property> <!-- nn2的http通信地址,用于web客户端 --> <property> <name>dfs.namenode.http-address.hadoopdajun.nn2</name> <value>bigdata02:50070</value> </property> <!-- edits元数据的共享存储位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://bigdata01:8485;bigdata02:8485;bigdata03:8485/hadoopdajun</value> </property> <!-- 本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/bigdata/data/journaldata</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换的代理类 --> <property> <name>dfs.client.failover.proxy.provider.hadoopdajun</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/bigdata/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>

core-site.xml

这里配置zookeeper的相关信息,并且fs.defaultFS配置的是nameservice的名称,而不是之前的地址。

<configuration> <!-- hdfs-site.xm中配置的nameservice --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoopdajun/</value> </property> <!-- 指定hadoop工作目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/bigdata/data/hadoopdata/</value> </property> <!-- 指定zookeeper集群访问地址 --> <property> <name>ha.zookeeper.quorum</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property>

yarn-site.xml

为yarn配置zookeeper信息。

<configuration> <!-- Site specific YARN configuration properties --> <!-- 开启高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarndajun</value> </property> <!-- 指定RM的两个节点 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 指定两个节点的位置 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>bigdata03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>bigdata04</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>bigdata01:2181,bigdata02:2181,bigdata03:2181</value> </property> <!-- 要运行MapReduce程序必须配置的附属服务 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 开启YARN集群的日志聚合功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- YARN集群的聚合日志最长保留时长 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定resourcemanager的状态信息存储在zookeeper集群上--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>

mapred-site.xml

这个跟之前就多了历史服务器信息。

<configuration> <!-- 执行框架设置为Hadoop YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 设置mapreduce的历史服务器地址和端口号 --> <property> <name>mapreduce.jobhistory.address</name> <value>bigdata04:10020</value> </property> <!-- mapreduce历史服务器的web访问地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata04:19888</value> </property> </configuration>

运行

启动journalnode,在bigdata01、bigdata02、bigdata03执行:

hadoop-daemon.sh start journalnode

在bigdata01格式化namenode:

hadoop namenode -format

生成/home/bigdata/data/hadoopdata发送到bigdata02服务器。
zookeeper元数据初始化:

hdfs zkfc -formatZK

启动hdfs集群和yarn集群,hdfs启动在任意节点,yarn启动分布在bigdata03、bigdata04更执行一次。

start-dfs.sh start-yarn.sh

http://bigdata01:50070 界面:

http://bigdata02:50070 界面:

可以看到,bigdata01是active状态,bigdata02是standby状态。如果把bigdata01的进程杀死,那bigdata02自动会变成active状态。
http://bigdata03:8088/ 界面和http://bigdata04:8088/ 界面是一样的,我这里bigdata04是主节点,如果访问bigdata03会自动调到bigdata04界面。

其他

安装这个HA集群,相比之前费了不少力,也重新安装了很多次,/home/bigdata/data/的hadoopdata、journaldata、zkdata文件夹甚至bigdata02、bigdata03、bigdata04的haddoop文件夹也删除了几次。有写可能是配置文件没写好,有写可能是之前的遗留数据,有写是zk服务问题等。