HA配置

hadoop-env.sh

export JAVA_HOME=/opt/jdk-9.0.4

core-site.xml

<configuration>
    <!--HA两个namenodeurl为两个的名称空间,可随意定 bi-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bi</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hdpdata</value>
    </property>
    <!--配置zookeeper的地址,HA,active standby zkfc journalnode等都需要zk-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>mini01:2181,mini02:2181,mini03:2181</value>
    </property>
</configuration>

hdfs-site.xml


<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/root/name1,/root/name2</value>
    </property>
    
    
    <!--修改hddfs的nameservice为bi,需要和core-site中的一致,nameservices s可以配置多个比如fereration中的-->
    <property>
        <name>dfs.nameservices</name>
        <value>bi</value>
    </property>

    <!--bi下面有两个namenode,分别是nn1,nn2只是代号而已-->
    <property>
        <name>dfs.ha.namenodes.bi</name>
        <value>nn1,nn2</value>
    </property>

    <!--nn1的rpc通信-->
    <property>
        <name>dfs.namenode.rpc-address.bi.nn1</name>
        <value>mini01:9000</value>
    </property>
    <!--nn1的http通信地址-->
    <property>
        <name>dfs.namenode.http-address.bi.nn1</name>
        <value>mini01:50070</value>
    </property>

    
    <!--nn2的rpc通信-->
    <property>
        <name>dfs.namenode.rpc-address.bi.nn2</name>
        <value>mini02:9000</value>
    </property>
    <!--nn2的http通信地址-->
    <property>
        <name>dfs.namenode.http-address.bi.nn2</name>
        <value>mini02:50070</value>
    </property>

    
    <!--制定namenode的edit元数据在journalNode上的存放位置-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://mini01:8485;mini02:8485;mini03:8485/bi</value>
    </property>
    <!--制定journalnode在本地磁盘存放数据的位置-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/root/journaldata</value>
    </property>
    <!--开启namenode失败自动切换-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

    <!--配置失败自动切换实现模式-->
    <property>
        <name>dfs.client.failover.proxy.provider.bi</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!--配置隔离即只能有一个namenode在工作,多个方法机制用换行分割,即每个机制暂用一行-->
    <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>


mapred-site.xml


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


</configuration>

yarn-site.xml


<configuration>

<!-- Site specific YARN configuration properties -->

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>mini01</value>
    </property>

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


    <!--开启RM高可用-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--制定RM的clusterId,因为RM可以有多个,所以多个需要有一个总的名称-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
<!--制定RM的名字,分别制定两个RM的名称-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
<!--分别制定RM的地址-->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>mini01</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>mini02</value>
    </property>

    <!--指定zk集群地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>mini01:2181,mini02:2181,mini03:2181</value>
    </property>

</configuration>


slave文件中添加 567

然后将hadoop 整个文件分别发到其他的六台机器上




需要七台机器,

1 namenode 2namenode

3 resourcemanager 4resourcemanager

567zookeeper+quorum journal node+datanode 即

zookeeper只需要在567机器上安装


启动顺序 需严格按照下面所示


1 先在有zk的地方启动zk 567 cd /opt/zk/bin

..zkServer.sh start 如果远程ssh 需source /etc/profile

因为edit日志 namenode状态的切换(依靠zkfc)都需要依赖zk

2 启动journal node

cd hadoop

sbin/hadoop-daemon.sh start journalnode  运行jps发现567上多了journalNode进程

journalnode edit日志

3格式化 hdfs 因为 有HA有两台namenode,所以只先在一台namenode上format hdfs namenode -format

然后将在namenode1上生成的hdfs目录cp 到nn2上,这样就保证两台NN初始状态一致,以后工作时就会通过journalnode同步了


4格式化zkfc 在任意一台NN上执行即可执行一次即可,因为是向zk集群创建一个节点

hdfs zkfc -formatZK

其实际上是在zk集群上创建了一个父节点以两个NN的nameservice开头的节点


初始化到此结束

启动,前提NN到其他机器的免密提前配置好

在NN1上start-dfs.sh

log 会显示已启动两个NN 三个datanode  三个journalnode 二个zkfc


然后启动yarn,前提yarn到其他的机器免密配置好

在3上start-yarn.sh ze567就会启动nodemanager 因为slave文件的存在

因有两台RM,但另一台需手动启动,yarn-daemon.sh start resourcemanager


mini01:50070 active

mini02:50070 standby


直接在IDE里面会报错,说不认识bi,因为client将bi认做为一个主机名,其实只是一个名称代号

解决办法,将hdfs配置文件放到ide工程的配置目录中

yarn mini03:8088

mini04:8088

猜你喜欢

转载自blog.csdn.net/qq_38250124/article/details/80022466