关于hadoop:Hadoop-集群安装高可用

14次阅读

共计 5196 个字符,预计需要花费 13 分钟才能阅读完成。

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 服务问题等。

正文完
 0