Hadoop HA 配置

①编辑core-site.xml,添加内容如下:

<!--指定hdfs的nameservice,为整个集群起一个别名,在zookeeper上注册的名称-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns</value>
</property>
<!--指定hadoop数据临时存放目录-->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/software/hadoop-2.7.1/tmp</value>
</property>
<!--指定zookeeper的存放地址-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>

②编辑hdfs-site.xml,添加内容如下:

<!-- 执行hdfs的nameservice为ns,注意要和core-site.xml中的名称保持一致-->
<property>
    <name>dfs.nameservices</name>
    <value>ns</value>
</property>
<!-- ns集群下有两个namenode,分别为nn1,nn2-->
<property>
    <name>dfs.ha.namenodes.ns</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址-->
<property>
    <name>dfs.namenode.rpc-address.ns.nn1</name>
    <value>hadoop101:9000</value>
</property>
<!-- nn1 的http通信地址,外部访问地址 -->
<property>
    <name>dfs.namenode.http-address.ns.nn1</name>
    <value>hadoop101:50070</value>
</property>
<!-- nn2的RPC通信地址-->
<property>
    <name>dfs.namenode.rpc-address.ns.nn2</name>
    <value>hadoop102:9000</value>
</property>
<!-- nn2 的http通信地址,外部访问地址 -->
<property>
    <name>dfs.namenode.http-address.ns.nn2</name>
    <value>hadoop102:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置,这样,NameNode2可以standby -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/ns</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/software/hadoop-2.7.1/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<!-- 配置NameNode失败自动切换实现方式 FailoverController-->
<property>
    <name>dfs.client.failover.proxy.provider.ns</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制-->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 这个是使用sshfence隔离机制时才需要配置ssh免登陆 --> 
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置NameNode存放元数据的目录,可以不配做,如果不配做则默认放到hadoop安装目录下的tmp目录中-->
<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/name</value>
</property>
<!-- 配置DataNode存放元数据的目录,可以不配做,如果不配做则默认放到hadoop安装目录下的tmp目录中-->
<property>
        <name>dfs.datanode.name.dir</name>
        <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value>
</property>
<!-- 配置副本数量-->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<!-- 设置用户的权限操作,false表示关闭权限验证,任何用户都可以-->
<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>

③配置文件mapred-site.xml

<!-- 指定mr运行在yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

④修改配置yarn-site.xml
<!--启用resourcemanager HA-->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<!--指定两个resourcemanagerr的名称-->
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>
<!--配置rm1的主机-->
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop101</value>
</property>
<!--配置rm2的主机-->
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop103</value>
</property>
<!--开启yarn自动恢复机制-->
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<!--执行yarn恢复机制实现类-->
<property>
    <name>yarn.resourcemanager.store.class</name>   
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>  
<!--yarn的恢复切换需要zookeeper集群的管理-->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>
<!--执行yarn集群的的别名,在zookeeper上注册的名称-->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>ns-yarn</value>
</property>
<!--指定nodemanager启动时加载server的方式为shuffle server-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!--指定哪个resourcemanager作为为主节点-->
<property>
    <name>yarn.nodemanager.hostname</name>
    <value>hadoop103</value>
</property>

④修改配置文件slaves:DataNode的节点存放

hadoop101
hadoop102
hadoop103

⑤修改环境变量

#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_144
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#HADOOP_HOME
HADOOP_HOME=/home/software/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export JAVA_HOME PATH CLASSPATH HADOOP_HOME

使环境变量生效:source /etc/profile

⑥启动

格式化zookeeper(一台节点上执行): hdfs zkfc -formatZK ,如果成功,使用 sh zkCli.sh 客户端命令连接zk服务端,执行 ls /命令,可以看到“hadoop-ha”的节点名称
启动JournalNode(3台节点上):hadoop-daemon.sh start journalnode
在第1台节点上格式化NameNode:hadoop namenode -format
在第1台节点上启动NameNode:hadoop-daemon.sh start namenode
在第2台节点上格式化Namenode:hadoop namenode -bootstrapStandby
在第2台节点上启动NameNode:hadoop-daemon.sh start namenode
启动DataNode(3台节点上):hadoop-daemon.sh start datanode
在第1台节点和第2台节点上启动zkfc(FailoverController):hadoop-daemon.sh start zkfc  -- 用于NameNode之间的奔溃切换
在第1台节点上启动Yarn:start-yarn.sh
在第3台节点上启动ResourceManager:yarn-daemon.sh start resourcemanager

 

posted @ 2020-06-26 15:15  alen-fly  阅读(225)  评论(0编辑  收藏  举报