Hadoop-3.2.2(HA)完全分布式部署

1、环境准备

  • 安装jdk配置环境变量 /etc/hosts等信息
  • ssh免密登录
  • 关闭防火墙
    检查防火墙状态(如果active(running)那么关闭)
    systemctl status firewalld
    service iptables status
    临时关闭防火墙
    systemctl stop firewalld
    service iptables stop
    永久关闭防火墙
    systemctl disable firewalld
    chkconfig iptables off

2、集群规划

目前使用5台机器、相关的角色分配如下

hadoop1101 hadoop1102 hadoop1103 hadoop1104 hadoop1105
zk zk zk - -
NameNode NameNode NameNode - -
zkfc zkfc zkfc - -
- - JournalNode JournalNode JournalNode
DataNode DataNode DataNode DataNode DataNode
- - - ResourceManager ResourceManager
NodeManager NodeManager NodeManager NodeManager NodeManager

3 配置Zookeeper集群

  • 下载zookeeper
  • tar -xvf apache-zookeeper-3.6.2-bin.tar.gz -C /opt/(可换成安装目录我安装在/opt下面)
  • 进入安装目录(apache-zookeeper-3.6.2-bin/conf) cp zoo_sample.cfg zoo.cfg 编辑zoo.cfg
image.png
image.png

主要进行两处修改:
a、修改dataDir 指定zk的数据信息放在哪里
b、server.1(id)=hadoop1101:2888:3888.
然后写入id信息到数据目录中的myid 文件中
echo 1 > /opt/data/zookeeper/myid

  • 复制配置好的信息到另外两台机器
scp    -r   apache-zookeeper-3.6.2-bin   root@hadoop1102:/opt/
ssh  root@hadoop1102 "mkdir  -p /opt/data/zookeeper ;echo 2 >/opt/data/zookeeper/myid"
scp    -r   apache-zookeeper-3.6.2-bin   root@hadoop1103:/opt/
ssh  root@hadoop1103 "mkdir  -p /opt/data/zookeeper ;echo 3 >/opt/data/zookeeper/myid"
  • 分别启动zookeeper

分别在三台机器上启动: bin/zkServer.sh start

  • 检查是否启动成功

bin/zkServer.sh status


image.png
image.png

HDFS-HA配置

<br />1)官方地址:http://hadoop.apache.org/<br />2) 创建Hadoop安装目录,创建Hadoop的数据文件name元数据信息 journalNode 信息文件

mkdir -p /opt/data/hadoop/{name,jn,data}
  1. 配置hadoop-env.sh (hadoop全局环境) yarn 和hdfs用户最好不要配置,会报错.有解决方案是把这些配置信息加在启动脚本中
export JAVA_HOME=/usr/java/jdk1.8.0_131
#config the user of hdfs
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
#export HADOOP_SECURE_DN_USER=hdfs
#config user of yarn
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
#export HDFS_DATANODE_SECURE_USER=yarn
  1. 配置core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
<!--零时文件路径,如果其他没有配置相对路径,所有的都会基于这个路径-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
  
<!-- 指定zkfc(namenode用于检活的一个线程)要连接的zkServer地址 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop1101:2181,hadoop1102:2181,hadoop1103:2181</value>
</property>
  1. 配置hdfs-site.xml
<configuration>
<!-- NameNode数据存储目录 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///opt/data/hadoop/name</value>
  </property>
<!-- DataNode数据存储目录 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///opt/data/hadoop/data</value>
  </property>
<!-- JournalNode数据存储目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/data/hadoop/jn</value>
  </property>
  
<!-- 完全分布式集群名称 -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  
<!-- 集群中NameNode节点都有哪些 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2,nn3</value>
  </property>
<!-- NameNode的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop1101:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop1102:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn3</name>
    <value>hadoop1103:8020</value>
  </property>
<!-- NameNode的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop1101:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop1102:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn3</name>
    <value>hadoop1103:9870</value>
  </property>
  
  
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop1103:8485;hadoop1104:8485;hadoop1105:8485/mycluster</value>
  </property>
  
  
<!-- 访问代理类:client用于确定哪个NameNode为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>/root/.ssh/id_rsa</value>
  </property>
  
<!-- 启用nn故障自动转移 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
  
<!-- 副本数量 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
  
</configuration>

至此hdfs的相关配置已经完成,当然一般会跟yarn一起启动.
单独启动:

1、全部节点上配置Hadoop的环境变量(vi /etc/profile.d/my_env.sh) 
  直接在profile.d 构建一个文件,便于分发.
  ##HADOOP_HOME
  export HADOOP_HOME=/opt/hadoop-3.2.2
  export PATH=$PATH:$HADOOP_HOME/bin
  export PATH=$PATH:$HADOOP_HOME/sbin
  
2、在zookeeper中为nameNode创建目录(/hadoop-ha/mycluster)
        hdfs zkfc -formatZK
    
3、在hadoop1103-1105上启动journalnode
   hdfs --daemon start journalnode
   
4、在Hadoop101上对nameNode进行格式化,并启动namenode
        hdfs namenode -format
        hdfs --daemon start namenode
    
5、在hadoop1102 和 Hadoop1103 上同步nn1的元数据信息
        hdfs namenode -bootstrapStandby
    
6、启动hadoop1102 和 Hadoop1103上的namenode
        hdfs --daemon start namenode
    
7、在datanode上启动dataNode 
     hdfs --daemon start datanode


单独启动有点傻傻的感觉,可以直接使用start-dfs.sh,也可以使用start-all.sh.
start-dfs.sh 主要启动nameNode secondaryName datanode journal nodes zkfc
workers 是默认的datanode启动节点,同时也是默认的yarn 的nodemanager的启动节点信息


image.png
image.png

9870端口查看namenode信息


image.png

YARN-HA配置

1)、配置 yarn-site.xml,并分发到各个节点上

<configuration>
<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>

    <!-- 声明2台resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>
    <!--指定resourcemanager的逻辑列表-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

<!-- ========== rm1的配置 ========== -->
    <!-- 指定rm1的主机名 -->
        <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>hadoop1104</value>
    </property>
    <!-- 指定rm1的web端地址 -->
    <property>
         <name>yarn.resourcemanager.webapp.address.rm1</name>
         <value>hadoop1104:8088</value>
    </property>
    <!-- 指定rm1的内部通信地址 -->
    <property>
         <name>yarn.resourcemanager.address.rm1</name>
         <value>hadoop1104:8032</value>
    </property>
    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
         <name>yarn.resourcemanager.scheduler.address.rm1</name>
         <value>hadoop1104:8030</value>
    </property>
    <!-- 指定供NM连接的地址 -->
    <property>
         <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
         <value>hadoop1104:8031</value>
    </property>
<!-- ========== rm2的配置 ========== -->
    <!-- 指定rm2的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop1105</value>
    </property>
    <property>
         <name>yarn.resourcemanager.webapp.address.rm2</name>
         <value>hadoop1105:8088</value>
    </property>
    <property>
         <name>yarn.resourcemanager.address.rm2</name>
         <value>hadoop1105:8032</value>
    </property>
    <property>
         <name>yarn.resourcemanager.scheduler.address.rm2</name>
         <value>hadoop1105:8030</value>
    </property>
    <property>
         <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
         <value>hadoop1105:8031</value>
    </property>

    <!-- 指定zookeeper集群的地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop1101:2181,hadoop1102:2181,hadoop1103: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>
<!-- 环境变量的继承 -->
 <property>
        <name>yarn.nodemanager.env-whitelist</name>
 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
 </property>
<!-- Site specific YARN configuration properties -->

</configuration>
  1. 、开启yarn
    start-yarn.sh

8088端口查看服务

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容