Skip to content

antony@notes:~/data-platform$ cat "Hadoop-ha.md"

Hadoop ha

2023-02-19· data-platform

Hadoop ha

目標

m1, m2 都會有 Name Node, 和 Resource Manager

修改 Hadoop 設定檔

core-site.xml

編輯設定檔

$ nano ~/vmusdt/hdp33/ha/core-site.xml

內容 :

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hdfsha</value>
        </property>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hdfsha</value>
        </property>
        <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>bigred</value>
        </property>
        <property>
                <name>hadoop.proxyuser.root.users</name>
                <value>bigred</value>
        </property>
        <!-- HA -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>d9m2</value>
        </property>
</configuration>

hdfs-site.xml

編輯設定檔

$ nano ~/vmusdt/hdp33/ha/hdfs-site.xml

內容 :

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/bigred/nn</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>/home/bigred/sn</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/bigred/dn</value>
        </property>
        <property>
                <name>dfs.permissions.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.namenode.acls.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <!-- HA -->
        <property>
                <name>dfs.nameservices</name>
                <value>hdfsha</value>
        </property>
        <property>
                <name>dfs.ha.namenodes.hdfsha</name>
                <value>d9m1,d9m2</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.hdfsha.d9m1</name>
                <value>d9m1:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.hdfsha.d9m2</name>
                <value>d9m2:8020</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.hdfsha.d9m1</name>
                <value>d9m1:9870</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.hdfsha.d9m2</name>
                <value>d9m2:9870</value>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://d9m1:8485;d9m2:8485;/hdfsha</value>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/bigred/journal</value>
        </property>
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.hdfsha</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>shell(/bin/true)</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/bigred/.ssh/id_rsa</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
</configuration>

yarn-site.xml

編輯設定檔

$ nano ~/vmusdt/hdp33/ha/yarn-site.xml

內容 :

<?xml version="1.0"?>
<configuration>

<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.scheduler.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>d9m2</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
                <name>yarn.nodemanager.local-dirs</name>
                <value>/home/bigred/nm</value>
        </property>
        <property>
                <name>yarn.nodemanager.pmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
        <!-- HA -->
        <property>
                <name>yarn.resourcemanager.store.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>yarnha</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>d9m1,d9m2</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.d9m1</name>
                <value>d9m1</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.d9m2</name>
                <value>d9m2</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.d9m1</name>
                <value>d9m1:8088</value>
        </property>
        <property>
              <name>yarn.resourcemanager.webapp.address.d9m2</name>
                <value>d9m2:8088</value>
        </property>
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>d9m2</value>
        </property>
</configuration>

派送設定檔

$ dthaconf

清除目錄

$ ssh d9m1 rm -r /home/bigred/journal; ssh d9m2 rm -r /home/bigred/journal

$ ssh d9m1 sudo rm -r /home/bigred/nn; ssh d9m2 rm -r /home/bigred/nn

$ ssh d9w1 sudo rm -r /home/bigred/dn; ssh d9w2 rm -r /home/bigred/dn; ssh d9w3 sudo rm -r /home/bigred/dn

啟動 Journal Node

$ ssh d9m1 hdfs --daemon start journalnode; ssh d9m2 hdfs --daemon start journalnode

檢查

$ ssh d9m1 jps; ssh d9m2 jps

啟動 ZooKepper Failover Controller

$ ssh d9m2 zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

$ ssh d9m2 hdfs zkfc -formatZK -force

$ ssh d9m1 hdfs --daemon start zkfc
$ ssh d9m2 hdfs --daemon start zkfc