hadoop2 环境的搭建(自动HA)

时间:2022-11-25 13:00:55

zookeeper:hadoop112、hadoop113、hadoop114

namenode:hadoop110和hadoop111

datanode:hadoop112、hadoop113、hadoop114

journalnode:hadoop110、hadoop111、hadoop112

resourcemanager:hadoop110

nodemanager:hadoop112、hadoop113、hadoop114

1、搭建zk集群,并启动

1.1、搭建zookeeper

1.1.1、在hadoop112上解压缩,重命名为zookeeper,把conf/zoo_sample.cfg重命名为zoo.cfg

1.1.2、修改文件conf/zoo.cfg

dataDir=/usr/zookeeper/data

增加以下内容

server.112=hadoop112:2888:3888

server.113=hadoop113:2888:3888

server.114=hadoop114:2888:3888

1.1.3、创建目录mkdir zookeeper/data

1.1.4、写入节点id:echo 112 > zookeeper/data/myid

1.1.5、复制zookeeper文件夹到hadoop113和hadoop114上

scp /usr/zookeeper/ hadoop113:/usr/

scp /usr/zookeeper/ hadoop114:/usr/

在hadoop113上执行 echo 113 > zookeeper/data/myid

在hadoop114上执行 echo 114 > zookeeper/data/myid

1.2、启动

在hadoop112、hadoop113、hadoop114上分别执行:

bin/zkServer.sh start

  

1.3、验证

执行命令:

bin/zkCli.sh

  

进入后执行ls /

2、配置文件(hadoop-env.sh、core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml)

2.1、hadoop-env.sh

export JAVA_HOME=/usr/jdk

上面是我本机的路径,需要改成真实的jdk路径

export JAVA_HOME=JDK的路径

2.2、core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://cluster1</value>

</property>

<!-- 设置默认的HDFS路径,有多个HDFS集群同时工作时,默认值在这里指定 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/hadoop/tmp</value>

</property>

<!-- 设置NameNode DataNode JournalNode等存放数据的公共目录,也可以单独指定 -->

<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop112:2181,hadoop113:2181,hadoop114:2181</value>
</property>
<!-- 指定zookeeper集群 -->
</configuration>

2.3、hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<!-- 集群中文件的副本数 -->

<property>

<name>dfs.nameservices</name>

<value>cluster1</value>

</property>

<!-- 使用federation时,这里填写所有集群的别名,用逗号分隔 -->

<property>

<name>dfs.ha.namenodes.cluster1</name>

<value>hadoop110,hadoop111</value>

</property>

<!-- 配置集群的NameNode几点,这里是NameNode 的别名,需要对每个NameNode再进行详细的配置-->

<property>

<name>dfs.namenode.rpc-address.cluster1.hadoop110</name>

<value>hadoop110:9000</value>

</property>

<!-- 配置NameNode的RPC地址 -->

<property>

<name>dfs.namenode.http-address.cluster1.hadoop110</name>

<value>hadoop110:50070</value>

</property>

<!-- 配置NameNode的HTTP地址 -->

<property>

<name>dfs.namenode.rpc-address.cluster1.hadoop111</name>

<value>hadoop111:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.cluster1.hadoop111</name>

<value>hadoop111:50070</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop110:8485;hadoop111:8485;hadoop112:8485/cluster1</value>

</property>

<!-- 指定集群(cluster1)的两个NameNode共享edits文件目录时使用的JournalNode集群信息 -->

<property>

<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
<!-- 指定集群(cluster1)是否启动自动故障恢复,即当NameNode出故障事,是否自动切换到另一台NameNode --> <property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 指定集群(cluster1)出故障时,哪个实现类负责执行故障切换 --> <property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/hadoop/tmp/journal</value>
</property>
<!-- 指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径 --> <property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property> <!-- 一旦需要NameNode切换,使用ssh方式进行切换 --> <property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property> </configuration>

2.4、yarn-site.xml

<configuration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop110</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

2.5、mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

2.6、slaves

hadoop112

hadoop113

hadoop114

2.7、同步修改的配置文件

3、格式化zookeeper集群

在hadoop110上执行

hadoop/bin/hdfs zkfc -formatZK

  

4、启动journalnode集群

在hadoop110、hadoop111、hadoop112上分别执行:

sbin/hadoop-daemon.sh start journalnode

扩展

停止journalnode

sbin/hadoop-daemon.sh stop journalnode

  

5、格式化namenode、启动namenode

在hadoop110或者hadoop111上执行:

bin/hdfs namenode -format

sbin/hadoop-daemon.sh start namenode

在hadoop111上执行

bin/hdfs namenode -bootstrapStandby
sbin/hadoop-daemon.sh start namenode

*hadoop111的格式化,操作是关键是是把hadoop110上面的tmp/dfs下的fsimage和edit拷贝过去

6、启动datanode

sbin/hadoop-daemons.sh start datanode

7、启动ZKFC

在NameNode节点上执行(hadoop110或hadoop111)执行:

hadoop/sbin/hadoop-daemon.sh start zkfc

  

8、启动resourcemanager和nodemanager

在hadoop110或者hadoop111上执行

sbin/yarn-daemon.sh start resourcemanager

sbin/yarn-daemons.sh start nodemanager

或者
sbin/start-yarn.sh start resourcemanager

  

总结:

自动切换比手动切换多的操作:

1、在core-site.xml配置zookeeper集群,在hdfs-site.xml中设置允许自动切换

2、操作上,格式化zookeeper,执行命令bin/hdfs zkfc -formatZK, 启动zk,执行命令sbin/hadoop-daemon.sh start zkfc