Hadoop入门mac系统下搭配HA高可用集群运行环境

233 阅读2分钟

1、环境准备

1.1、需要配置好Hadooop集群配置的服务

配置可以查看我的另一篇文章 点击查看

1.2、准备工作

  • 1、在/opt下创建ha目录(三台节点) 在三台机器上都创建ha目录
ssh jubull@hadoop102
sudo mkdir /opt/ha
ssh jubull@hadoop103
sudo mkdir /opt/ha
ssh jubull@hadoop104
sudo mkdir /opt/ha
  • 2、修改/opt/ha的所属主和所属组(三台节点)
sudo chown jubull:jubull /opt/ha
  • 3、把所有服务都关闭了
hdfs --daemon stop namenode
  • 4、将/opt/module下的hadoop拷贝到/opt/ha下(在hadoop102)
cp -r /opt/module/hadoop-3.1.3/data /opt/ha/hadoop-3.1.3/logs
sudo rm -rf /tmp/*
  • 5、将/opt/ha/hadoop-3.1.3中的data和logs全删除掉,将/tmp下的内容全部删掉
rm -rf /opt/ha/hadoop-3.1.3/data  /opt/ha/hadoop-3.1.3/logs
sudo rm -rf /tmp/*
  • 6、将/opt/ha/hadoop-3.1.3分发到其它节点
sxync /opt/ha/hadoop-3.1.3
  • 7、将环境变量中的HADOOP_HOME修改成ha下的hadoop (三台节点)
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
  • 8 source每台节点的/etc/profile.d/my_env.sh (三台节点)
source /etc/profile.d/my_env.sh
echo $HADOOP_HOME

2、配置Zookeeper

配置可以查看我Zookeeper的集群文章 点击我

3、配置HDFS-HA集群

  • 1、配置core-site.xml文件,将以下配置代码放入标签中(注意需要清空之前的配置代码块)
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>
<property>
    <name>hadoop.data.dir</name>
    <value>/opt/ha/hadoop-3.1.3/data</value>
</property>
  • 2、配置hdfs-site.xml文件,将以下配置代码放入标签中(注意需要清空之前的配置代码块)
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.data.dir}/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.data.dir}/data</value>
</property>
<property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
</property>
<property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2,nn3</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop102:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop103:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn3</name>
    <value>hadoop104:8020</value>
</property>
<property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop102:9870</value>
</property>
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop103:9870</value>
</property>
<property>
    <name>dfs.namenode.http-address.mycluster.nn3</name>
    <value>hadoop104:9870</value>
</property>
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
</property>
<!--  访问代理类,client用于确定哪个NN为Active -->
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配制隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh无密登录 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/jubull/.ssh/id_rsa</value>
</property>
<!--  指定NN的元数据在JournalNode的哪个位置存放 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>${hadoop.data.dir}/jn</value>
</property>
  • 3、配置完成之后分发
xsync core-site.xml hdfs-site.xml
  • 4、在三台节点上(hadoop102,hadoop103,hadoop104)启动
hdfs --daemon start journalnode
  • 5、在hadoop102上执行格式式操作
hdfs anmenode -formt
  • 6、 在hadoop102上启动namenode
hdfs --daemon start namenode
  • 7、在hadoop103和hadoop104上同步元数据
hdfs namenode -bootstrapStandby
  • 8、在hadoop103和hadoop104上启动namenode
hdfs --daemon start namenode
  • 9、将hadoop102切换成active
hdfs haadmin -transitionToActive nn1
  • 10、查看是否Active(或者WEB页面查看hadoop102:9870,hadoop103:9870,hadoop104:9870)
hdfs haadmin -getServiceState nn1

4、配置HDFS-HA自动故障转移

  • 1、在hdfs-site.xml标签之中追加如下配置信息
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
  • 2、在core-site.xml文件中增加
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
  • 3、分发修改的配置文件
cd /opt/ha/hadoop-3.1.3
xsync core-site.xml hdfs-site.xml
  • 4、关闭所有HDFS服务:
stop-dfs.sh
  • 5、启动Zookeeper集群
zkCluster.sh start
  • 6、初始化HA在Zookeeper中状态:为了在zookeeper创建节点
hdfs zkfc -formatZK
  • 7、启动HDFS服务
start-dfs.sh
  • 8 、尝试将active的那台节点的namenode停掉。查看其它节点
hdfs --daemon stop namenode

5、YARN-HA配置

  • 1、在yarn-site.xml标签之中追加如下配置信息
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!--启用resourcemanager ha-->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>

<!--声明两台resourcemanager的地址-->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>cluster-yarn1</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2,rm3</value>
</property>

<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop102</value>
</property>

<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop103</value>
</property>

     <property>
    <name>yarn.resourcemanager.hostname.rm3</name>
    <value>hadoop104</value>
</property>

<!--指定zookeeper集群的地址--> 
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</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>
  • 2、分发文件
cd /opt/ha/hadoop-3.1.3
xsync yarn-site.xml
  • 3、启动yarn(在任意一台都可以因为三台都有resourceManager)
start-yrn.sh
  • 4、查看状态
yarn rmadmin -getServiceState rm1
  • 5、将hadoop102的resourceManager停掉-再看其它的节点的状态
yarn --daemon stop resourcemanager