当前位置:   article > 正文

Hadoop集群完全分布式高可用搭建_hadoop完全分布式集群的搭建项目目标

hadoop完全分布式集群的搭建项目目标

概述

 hadoop 支持单机模式、伪分布式和完全分布式模式3种安装模式

(1)单机模式:又叫本地模式,即只在一台机器安装 hadoop ,其属于默认安装模式,无需进行配置就可以运行 hadoop 。该模式主要用于 MapReduce 应用程序的调试,没有使用分布式文件系统,也不会加载程序。

(2)伪分布式模式:同意是运行在一台机器上,其增加了代码调试功能,包括5个进程(NameNode、SecondaryNameNode、DataNode、ResourceManager、NodeManager),即在一台机器上模拟分布式,主要用于测试。

(3)完全分布式模式:又叫集群模式,它由两台及以上的机器组成,是真正的分布式。

本文章将在虚拟机集群的基础上搭建一个 hadoop 高可用分布式集群(包括两个NameNode),该集群结合 ZooKeeper 实现自动故障转移功能,由三台虚拟机组成。

1.准备工作

        要搭建完全分布式高可用集群我们要准备虚拟机,Linux(CentOS 7) 镜像文件, jdk,zookeeper,hadoop 安装文件和远程连接工具 MobaXterm

    1.文件下载

        MobaXterm 下载地址:https://mobaxterm.mobatek.net/

        jdk1.8.0 下载地址:https://www.oracle.com/cn/java/technologies/downloads/

        zookeeper-3.6.2 下载地址:https://zookeeper.apache.org/releases.html

        hadoop-2.7.6 下载地址:https://archive.apache.org/dist/hadoop/common/

        CentOS 7 下载地址:https://mirrors.163.com/centos/7.9.2009/isos/x86_64/

    2.虚拟机准备
主机名称IP地址
hadoop1192.168.119.21
hadoop2192.168.119.22
hadoop3192.168.119.23
    3.配置主机 IP 映射

        每台机器分别修改 /etc/hosts 文件,将每个节点的  IP 和主机名映射,可以方便地使用主机名进行网络访问,不在需要输入要访问节点地 IP 地址

# vi /etc/hosts
  1. 192.168.119.21 hadoop1
  2. 192.168.119.22 hadoop2
  3. 192.168.119.23 hadoop3
     4.配置集群各节点 SSH 免密码登录

        分别在3个节点中执行以下命令,生成密钥文件

# ssh-keygen

        执行该命令时,会要求确认密钥文件的存储位置(默认是 “~/.ssh/” )、输入并确认私钥的密码,均直接按 Enter 键即可(表示将私钥密码留空)。其中, id_rsa 是本机的私钥文件, id_rsa.pub 是本机的公钥文件

    5.将自身的公钥文件复制并追加到全部节点的授权文件 authorized_keys 中
  1. # ssh-copy-id hadoop1
  2. # ssh-copy-id hadoop2
  3. # ssh-copy-id hadoop3
    6.在各个节点用以下命令测试 SSH 免密码登录
  1. # ssh hadoop1
  2. # ssh hadoop2
  3. # ssh hadoop3
    7.在 CentOS 系统中,目录 “/opt” 常用于存放第三方软件包和数据文件。下面我们在这个目录下创建两个文件夹 “packages” 和 “programs” ,分别用于存放软件安装包和软件安装后的程序文件。
  1. # mkdir /opt/packages
  2. # mkdir /opt/programs

2.安装 jdk

    1.将 jdk-8u202-linux-x64.tar.gz 安装包通过 MobaXterm 传到 hadoop1 节点 packages 目录下
    2.将 jdk-8u202-linux-x64.tar.gz 解压到 programs 目录下
# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/programs
    3.配置 jdk 环境变量
# vi /etc/profile

    在末尾添加以下内容:

  1. export JAVA_HOME=/opt/programs/jdk1.8.0_202
  2. export PATH=$PATH:$JAVA_HOME/bin
    4.执行以下命令刷新 profile 文件,使修改立即生效
# source /etc/profile
    5. 输入 java -version  命令检验 jdk 是否安装成功
# java -version
    6.将 profile 和 jdk1.8.0_202 分发到 hadoop2 和 hadoop3 节点上
  1. # scp -r /etc/profile hadoop2:/etc
  2. # scp -r /etc/profile hadoop3:/etc
  3. # scp -r /opt/programs/jdk1.8.0_202 hadoop2:/opt/programs
  4. # scp -r /opt/programs/jdk1.8.0_202 hadoop3:/opt/programs
    7.分别在 hadoop2 和 hadoop3 节点上执行以下命令刷新 profile 文件,使 jdk 立即生效 
# source /etc/profile
      8. 注意:如果之前安装过 jdk 或 系统自带 jdk,我们需要卸载这些 jdk
        ① 查询已安装的 jdk 列表 
# rpm -qa | grep jdk
        ② 删除已经安装的 jdk
# yum -y remove XXX(上面查询到的 jdk 名称)

注意:如果终端出现以下错误:/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行。则输入以下命令:

# rm -f /var/run/yum.pid

之后再执行以上删除 jdk 命令

        ③ 重新让配置文件生效
# source /etc/profile
        ④输入 java -version  命令检验 jdk 是否安装成功

3.安装与配置 ZooKeeper

        由于双 NameNode 的 hadoop 高可用分布式集群,需要安装与配置一个 ZooKeeper 集群,用于 ZKFC(ZooKeeper Failover Controller),从而保证当活动状态的 NameNode 失效时,备用状态的 NameNode 可以自动切换为活动状态

    1.将 zookeeper-3.6.2.tar.gz 安装包通过 MobaXterm 传到 hadoop1 节点 packages 目录下
    2.将 zookeeper-3.6.2.tar.gz 解压到 programs 目录下
# tar -zxvf zookeeper-3.6.2.tar.gz -C /opt/programs
    3.执行以下命令进入 ZooKeeper 的安装目录
# cd /opt/programs/zookeeper-3.6.2
    4.在该目录下分别建立文件夹 “data” 和 “logs”
  1. # mkdir data
  2. # mkdir logs
    5.在 data 文件夹新建一个名为 “myid” 的新文件,并用 vi 写入 id 号 “1”
  1. # touch /data/myid
  2. # vi /data/myid
  3. '1'>myid

        (注意:hadoop2 节点写入 2 ,hadoop3 节点写入 3) 

    6.进入 ZooKeeper 安装目录下的 conf 文件夹,将 zoo_sample.cfg 文件复制一份并重命名为 zoo.cfg
  1. # cd /opt/programs/zookeeper-3.6.2/conf
  2. # cp zoo_sample.cfg zoo.cfg
    7.然后执行以下命令修改 zoo.cfg 文件
# vi zoo.cfg

    先将文件中的 dataDir 修改为

dataDir=/opt/programs/zookeeper-3.6.2/data

    然后在末尾加入以下内容

  1. dataLogDir=/opt/programs/zookeeper-3.6.2/logs
  2. server.1=hadoop1:2888:3888
  3. server.2=hadoop2:2888:3888
  4. server.3=hadoop3:2888:3888
     8.修改文件 /etc/profile ,配置 ZooKeeper 环境变量
# vi /etc/profile

    在文件末尾添加以下内容

  1. export ZOOKEEPER_HOME=/opt/programs/zookeeper-3.6.2
  2. export PATH=$PATH:$ZOOKEEPER_HOME/bin
     9.将 profile 和整个 ZooKeeper 安装目录远程发送到 hadoop2 和 hadoop3 节点上
  1. # scp -r /etc/profile hadoop2:/etc
  2. # scp -r /etc/profile hadoop3:/etc
  3. # scp -r /opt/programs/zookeeper-3.6.2 hadoop2:/opt/programs
  4. # scp -r /opt/programs/zookeeper-3.6.2 hadoop3:/opt/programs
     10.在三个节点分别执行以下命令,刷新 profile 文件,使文件生效 
# source /etc/profile
    11.在三个节点分别执行以下命令,启动 ZooKeeper 集群
# zkServer.sh start

     若均能输出以下信息,说明启动成功

    12.在三个节点分别执行以下命令,查看 ZooKeeper 集群状态
# zkServer.sh status

        hadoop3 节点上的 ZooKeeper 服务为 Leader ,其余两个节点上的 ZooKeeper 服务为 Follower ,这是系统根据 ZooKeeper 选举机制确定的

        当 ZooKeeper 服务启动后,可以在其中一个节点中执行以下命令,连接到 ZooKeeper 集群(供用户进行交互操作)

# zkCli.sh

       ( 注:要退出客户端可以执行 “quit” 命令)

注意:

        要停止 ZooKeeper 服务,可以执行以下命令

# zkServer.sh stop

4.安装与配置 Hadoop

    1.将 hadoop-2.7.6.tar.gz 安装包通过 MobaXterm 传到 hadoop1 节点 packages 目录下
    2.将 hadoop-2.7.6.tar.gz 解压到 programs 目录下
# tar -zxvf hadoop-2.7.6.tar.gz -C /opt/programs
    3.进入 /opt/programs/hadoop-2.7.6/etc/hadoop 目录,
# cd /opt/programs/hadoop-2.7.6/etc/hadoop

    依次修改配置文件 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves、hadoop-env.sh、mapred-env.sh 和 yarn-env.sh

   4.修改配置文件 core-site.xml
  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://ns</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>/opt/programs/hadoop-2.7.6/tmp</value>
  9. </property>
  10. <property>
  11. <name>ha.zookeeper.quorum</name>
  12. <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  13. </property>
  14. </configuration>
    5.修改配置文件 hdfs-site.xml
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <name>dfs.nameservices</name>
  8. <value>ns</value>
  9. </property>
  10. <property>
  11. <name>dfs.ha.namenodes.ns</name>
  12. <value>nn1,nn2</value>
  13. </property>
  14. <property>
  15. <name>dfs.namenode.rpc-address.ns.nn1</name>
  16. <value>hadoop1:9000</value>
  17. </property>
  18. <property>
  19. <name>dfs.namenode.http-address.ns.nn1</name>
  20. <value>hadoop1:50070</value>
  21. </property>
  22. <property>
  23. <name>dfs.namenode.rpc-address.ns.nn2</name>
  24. <value>hadoop2:9000</value>
  25. </property>
  26. <property>
  27. <name>dfs.namenode.http-address.ns.nn2</name>
  28. <value>hadoop2:50070</value>
  29. </property>
  30. <property>
  31. <name>dfs.namenode.shared.edits.dir</name>
  32. <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns</value>
  33. </property>
  34. <property>
  35. <name>dfs.journalnode.edits.dir</name>
  36. <value>/opt/programs/hadoop-2.7.6/journal/data</value>
  37. </property>
  38. <property>
  39. <name>dfs.ha.automatic-failover.enabled</name>
  40. <value>true</value>
  41. </property>
  42. <property>
  43. <name>dfs.client.failover.proxy.provider.ns</name>
  44. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  45. </property>
  46. <property>
  47. <name>dfs.ha.fencing.methods</name>
  48. <value>
  49. sshfence
  50. shell(/bin/true)
  51. </value>
  52. </property>
  53. <property>
  54. <name>dfs.ha.fencing.ssh.private-key-files</name>
  55. <value>/root/.ssh/id_rsa</value>
  56. </property>
  57. <property>
  58. <name>dfs.ha.fencing.ssh.connect-timeout</name>
  59. <value>30000</value>
  60. </property>
  61. </configuration>
    6.修改配置文件 mapred-site.xml
  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>
    7.修改配置文件 yarn-site.xml
  1. <configuration>
  2. <property>
  3. <name>yarn.resourcemanager.ha.enabled</name>
  4. <value>true</value>
  5. </property>
  6. <property>
  7. <name>yarn.resourcemanager.cluster-id</name>
  8. <value>yrc</value>
  9. </property>
  10. <property>
  11. <name>yarn.resourcemanager.ha.rm-ids</name>
  12. <value>rm1,rm2</value>
  13. </property>
  14. <property>
  15. <name>yarn.resourcemanager.hostname.rm1</name>
  16. <value>hadoop1</value>
  17. </property>
  18. <property>
  19. <name>yarn.resourcemanager.hostname.rm2</name>
  20. <value>hadoop2</value>
  21. </property>
  22. <property>
  23. <name>yarn.resourcemanager.zk-address</name>
  24. <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  25. </property>
  26. <property>
  27. <name>yarn.nodemanager.aux-services</name>
  28. <value>mapreduce_shuffle</value>
  29. </property>
  30. </configuration>
    8.修改配置文件 slaves
  1. hadoop1
  2. hadoop2
  3. hadoop3
    9.修改配置文件 hadoop-env.sh、mapred-env.sh 和 yarn-env.sh 末尾均加入 JAVA_HOME 环境变量
export JAVA_HOME=/opt/programs/jdk1.8.0_202
    10.修改文件 /etc/profile ,配置 hadoop 环境变量
# vi /etc/profile

    在文件末尾添加以下内容

  1. export HADOOP_HOME=/opt/programs/hadoop-2.7.6
  2. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    11.将 profile 和整个 hadoop 安装目录远程发送到 hadoop2 和 hadoop3 节点上
  1. # scp -r /etc/profile hadoop2:/etc
  2. # scp -r /etc/profile hadoop3:/etc
  3. # scp -r /opt/programs/hadoop-2.7.6 hadoop2:/opt/programs
  4. # scp -r /opt/programs/hadoop-2.7.6 hadoop3:/opt/programs
    12.在三个节点分别执行以下命令,刷新 profile 文件,使文件生效
# source /etc/profile

5.启动与测试 Hadoop

由于是第一次启动 hadoop ,需要格式化 NameNode ,格式化前需要先启动 JournalNode (仅初始化 NameNode 需要)

    1.在三个节点上执行以下命令启动 JournalNode(任意目录均可)
# hadoop-daemon.sh start journalnode

若均能输出以下信息,说明启动成功

    2.在 hadoop1 节点上执行以下命令格式化 NameNode ,(此时要保证3个节点均已开机,且均已启动 ZooKeeper 和 JournalNode )
# hdfs namenode -format

若能输出以下信息,说明格式化成功

    3.格式化成功后,会在 hadoop 安装目录中生成 “tmp/dfs/name/current” 和 logs 目录

        (注:tmp 目录则生成用于存储 HDFS 文件系统元数据信息的文件 fsimage 等,logs 目录用于存储 hadoop 集群的日志文件)

执行以下命令,将 hadoop1 节点 hadoop 安装目录下的 tmp 文件远程发送到 hadoop2 节点的 hadoop 安装目录下

# scp -r /opt/programs/hadoop-2.7.6/tmp hadoop2:/opt/programs/hadoop-2.7.6

        (提示:两个 NameNode 分别位于 hadoop1 和 hadoop2 节点上,如果想要再次初始化,请删除两个节点上的 tmp 和 logs 目录

    4.在 hadoop1 节点上执行以下命令,格式化 ZKFC
# hdfs zkfc -formatZK

若能输出以下信息,说明格式化成功

        (注意:格式化 ZKFC 只需执行一次,且仅在hadoop1节点上)

     5.在 hadoop1 节点上执行以下命令,启动 HDFS 和 YARN
  1. # start-dfs.sh
  2. # start-yarn.sh

提示!!

        以下展示了 hadoop 集群各个节点分配的角色(即启动的守护进程)。其中,QuorumPeerMain 是ZooKeeper 集群所启动的进程;NameNode、DataNode、JournaNode、DFSZKFailoverController 是 HDFS 集群所启动的进程;ResourceManager、NodeManager 是 YARN 集群所启动的进程

    6.在宿主机的浏览器中输入 192.168.119.21:8088/cluster 可以查看 YARN 的运行状态

    7.查看 Hadoop 的运行状态,在宿主机的浏览器中访问 192.168.119.21:50070 ,页面显示 hadoop1:9000(active) 

        访问 192.168.119.22:50070 ,页面显示 hadoop2:9000(standby)

        (注意:谁先启动就是active,此时若 hadoop1 节点挂掉,即 hadoop2 节点的 standby 变为 active )

        我们可以使用 kill 命令来挂掉 hadoop1 节点的 NameNode ,来测试备用状态下 hadoop2 节点的 NameNode 是否自动切换为活动状态,这里博主就不展示了

可以看出,双 NameNode 的 hadoop 分布式集群搭建成功

        如果要停止 hadoop 集群,在 hadoop1 节点上输入以下命令停止 HDFS 和 YARN 

  1. # stop-dfs.sh
  2. # stop-yarn.sh

        然后在每个节点上执行以下命令停止 ZooKeeper 

# zkServer.sh stop

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/855640
推荐阅读
相关标签
  

闽ICP备14008679号