• 四台kvm虚拟机搭建Hadoop HA集群


    一、前言

    终于搭建了四台虚拟机,正式开始搭建Hadoop集群,目前是四台虚拟分别为:
    node01(192.168.122.11),node02(192.168.122.12),node03(192.168.122.13),node04(192.168.122.14)

    二、集群规划

    规划搭建HDFS2.X HA:
    角色划分如下:

    节点

    NN-1

    NN-2

    DN

    ZK

    ZKFC

    JNN

    RM

    NM

    node01

    node02

    node03

    node04

    三、搭建Hadoop HA集群

    1.环境准备
    • 依赖软件 ssh ,jdk
    • 环境配置:
    1. ip地址配置(静态ip)
    2. hostname配置:修改/etc/hostname
    3. hosts映射配置:修改/etc/hosts
    4. 防火墙关闭:sudo ufw disable
    5. ssh免密登陆:
      四台虚拟机运行命令ssh-keygen -t rsa -P ""生成密钥后,将node02、node03、node04的生成的id_rsa.pub公钥文件拷贝到node01里 (sudo scp id_rsa.pub node02@node02:/root/.ssh/id_rsa.pub.node02),再将这些公钥追加到node01的authorized_keys(没有该文件新建一个)文件里,最后将生成的包含四个节点的秘钥的authorized_keys 复制到node02、node03、node04的.ssh目录下(sudo scp authorized_keys node01:node02:/home/node02/.ssh/
    6. JAVA_HOME环境变量
    7. 虚拟机时间同步:
      ntpdate cn.pool.ntp.org
      hwclock --systohc
    1. 安装zookeeper集群

    先安装zookeeper集群是因为hadoop集群中需要配置zookeeper节点。

    • 下载安装包 zookeeper-3.4.6.tar.gz

    • 解压:tar -zxvf /opt/software/zookeeper-3.4.6.tar.gz -C home/hadoop/app/

    • 配置:
      cd /home/hadoop/app/zookeeper-3.4.6/conf/
      cp zoo_sample.cfg zoo.cfg
      vi zoo.cfg
      修改:dataDir=/home/hadoop/app/zookeeper-3.4.6/tmp
      在最后添加:
      server.1=node02:2888:3888
      server.2=node03:2888:3888
      server.3=node04:2888:3888
      保存退出
      然后创建一个tmp文件夹
      mkdir /home/hadoop/app/zookeeper-3.4.6/tmp
      echo 1 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid

    • 将配置好的zookeeper拷贝到其他节点:
      首先分别在node03、node04目录下创建一个hadoop目录:
      sudo mkdir -p /home/hadoop/app
      修改文件夹用户:
      sudo chown node03:node03 /home/hadoop/app
      拷贝至node03、node04节点:
      scp -r /home/hadoop/app/zookeeper-3.4.6/node03@node03:/home/hadoop/app/
      scp -r /home/hadoop/app/zookeeper-3.4.6/node04@node04:/home/hadoop/app/

      注意:node03、node04对应/hadoop/zookeeper-3.4.6/tmp/myid内容
      node03:
      echo 2 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid
      node04:
      echo 3 > /home/hadoop/app/zookeeper-3.4.6/tmp/myid

    2. 安装Hadoop集群
    • 下载安装包:因为网速较慢,下载的是hadoop-2.7.6.tar.gz 附:hadoop安装包下载地址

    • 上传到虚拟机后解压:tar -zxvf hadoop-2.7.6.tar.gz -C /home/hadoop/app/

    • 配置相应环境变量
      (1) 配置HADOOP_HOME环境变量:修改/etc/profile
      export HADOOP_HOME=/home/hadoop/app/hadoop-2.7.6
      export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

      (2) 修改hadoo-env.sh mapred-env.sh yarn-env.sh的JAVA_HOME

    • 配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves
      (1) core-site.xml

      fs.defaultFS hdfs://mycluster hadoop.tmp.dir /var/hadoop/tmp ha.zookeeper.quorum node02:2181,node03:2181,node04:2181

    (2) hdfs-site.xml

    
    
      dfs.nameservices
      mycluster
    
    
    
      dfs.ha.namenodes.mycluster
      nn1,nn2
    
    
    
      dfs.namenode.rpc-address.mycluster.nn1
      node01:8020
    
    
    
      dfs.namenode.rpc-address.mycluster.nn2
      node02:8020
    
    
    
      dfs.namenode.http-address.mycluster.nn1
      node01:50070
    
    
    
      dfs.namenode.http-address.mycluster.nn2
      node02:50070
    
    
    
      dfs.namenode.shared.edits.dir
      qjournal://node01:8485;node02:8485;node03:8485/mycluster
    
    
    
      dfs.journalnode.edits.dir
      /var/hadoop/ha/jn
    
    
    
      dfs.client.failover.proxy.provider.mycluster
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    
    
    
      dfs.ha.fencing.methods
      sshfence
    
    
    
      dfs.ha.fencing.ssh.private-key-files
      /home/leehan/.ssh
    
    
    
       dfs.ha.automatic-failover.enabled
       true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    (3) mapred-site.xml

    
    
    
    mapreduce.framework.name
    yarn
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (4) yarn-site.xml

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
    
       yarn.resourcemanager.ha.enabled
       true
    
    
    
       yarn.resourcemanager.cluster-id
       cluster1
    
    
    
       yarn.resourcemanager.ha.rm-ids
       rm1,rm2
    
    
    
       yarn.resourcemanager.hostname.rm1
       node03
    
    
       yarn.resourcemanager.hostname.rm2
       node04
    
    
    
       yarn.resourcemanager.zk-address
       node02:2181,node03:2181,node04:2181
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    (5) slaves
    node02
    node03
    node04

    • 将node01节点的配置复制到node02、node03、node04上(注意权限问题,因为没有使用root 用户)
      scp -r /home/hadoop/app/hadoop-2.7.6/ node02@node02:/home/hadoop/app
    3. 启动集群

    严格按照下面的步骤!!!

    3.1启动zookeeper集群(分别在node02、node03、node04上执行)

    在all slave上启动zookeeper服务:
    cd /home/hadoop/app/zookeeper-3.4.6/bin/
    ./zkServer.sh start

    可查看状态:一个leader,两个follower
    zkServer.sh status

    3.2 手动启动journalnode(分别在在node01、node02、node03上执行)

    hadoop-daemon.sh start journalnode
    运行jps命令检验,是否多了JournalNode进程。

    ***** 初次启动需要格式化,以后启动无需格式化。*****
    3.3 格式化namenode

    在node01上执行命令:
    hdfs namenode -format

    在node02上执行:
    hdfs namenode -bootstrapStandby

    3.4 格式化ZKFC(在node02上执行一次即可)

    hdfs zkfc -formatZK

    启动过程中出现报错Configuration has multiple addresses that match local node’s address. Please configure the system with dfs.nameservice.id and dfs.ha.namenode.id:
    原因是/etc/hosts文件中配置了多个本机,所以最好不要127.0.0.1的信息。

    3.5 启动hdfs(在node01上执行)

    start-dfs.sh
    这里出现了需要密码认证,原因是四台虚拟机的用户名不一样,所以无法认证,因此需要将虚拟机的用户名统一。

    3.6 启动YARN

    在node01上执行:
    start-yarn.sh

    node03-node04启动resourcemanager:
    yarn-daemon.sh start resourcemanager

    以后启动集群

    集群启动:
    all slave —-> zkServer.sh start node02 node03、node04
    one master —->start-dfs.sh node01
    one master —–>start-yarn.sh node01
    backup master —->yarn-daemon.sh start resourcemanager node03、node04

    正常集群启动后,
    namenode上的jps后的进程有:
    2648 ResourceManager
    2553 DFSZKFailoverController
    3036 NameNode
    3325 Jps

    datanode上的jps后进程有:
    2353 NodeManager
    2200 DataNode
    2264 JournalNode
    2137 QuorumPeerMain
    2526 Jps

    到此,hadoop-2.7.6配置完毕,可以统计浏览器访问:
    	http://node01:50070
    	NameNode 'node01:9000' (active)
    	http://node02:50070
    	NameNode 'node02:9000' (standby)
    
    验证HDFS HA
    	首先向hdfs上传一个文件
    	hadoop fs -put /etc/profile /profile
    	hadoop fs -ls /
    	然后再kill掉active的NameNode
    	kill -9 
    	通过浏览器访问:http://192.168.1.202:50070
    	NameNode 'hadoop02:9000' (active)
    	这个时候hadoop02上的NameNode变成了active
    	在执行命令:
    	hadoop fs -ls /
    	-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
    	刚才上传的文件依然存在!!!
    	手动启动那个挂掉的NameNode
    	sbin/hadoop-daemon.sh start namenode
    	通过浏览器访问:http://192.168.1.201:50070
    	NameNode 'hadoop01:9000' (standby)
    
    验证YARN:
    	运行一下hadoop提供的demo中的WordCount程序:
    	hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
    
    OK,大功告成!!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    测试集群工作状态的一些指令 :
    bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息

    bin/hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态

    sbin/hadoop-daemon.sh start namenode 单独启动一个namenode进程

    ./hadoop-daemon.sh start zkfc 单独启动一个zkfc进程

  • 相关阅读:
    MTK的充电方案—PMIC充电
    1024 特别企划|揭秘 StarRocks 社区背后的神秘力量(内涵福利)
    React 使用JSX或者TSX渲染页面
    信息学奥赛一本通:2036:【例5.3】开关门
    【牛客 - 剑指offer】JZ21 调整数组顺序使奇数位于偶数前面(一) 三种方案 Java实现
    腾讯云Java工程师一面 + 被捞一面 + 二面面经(附答案)
    realloc函数应用&IO泄露体验
    第八章 Linux文件系统权限
    第十届山东省大学生网络安全技能大赛【神秘的base】【小试牛刀】
    Mac | 使用 Wineskin 在 Mac 上运行 exe 程序
  • 原文地址:https://blog.csdn.net/m0_67393828/article/details/126565412