大数据必知必会:Hadoop(4)高可用集群安装

时间:2023-01-23 20:56:18

(大数据必知必会:Hadoop(4)高可用集群安装)

安装前准备

高可用集群环境下,至少需要3台服务器,这里准备5台。

IP地址 主机名称 角色
10.0.0.5 node1 NameNode
10.0.0.6 node2 NameNode
10.0.0.7 node3 DataNode
10.0.0.8 node4 DataNode
10.0.0.9 node5 DataNode

需要保证每台服务器的配置都一致,以下步骤在5台服务器上都需要做一次。

操作系统准备

本次安装采用的操作系统是Ubuntu 20.04。

更新一下软件包列表。

sudo apt-get update

安装Java 8+

使用命令安装Java 8。

sudo apt-get install -y openjdk-8-jdk

配置环境变量。

vi ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

让环境变量生效。

source ~/.bashrc

下载Hadoop安装包

从Hadoop官网Apache Hadoop下载安装包软件。

大数据必知必会:Hadoop(4)高可用集群安装

或者直接通过命令下载。

wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz

大数据必知必会:Hadoop(4)高可用集群安装

安装Zookeeper

可以选择以下任意一种方式安装Zookeeper,本文选择集群环境安装。

单机环境安装

参考[大数据必知必会:Zookeeper(1)单机环境安装]

伪分布式安装

参考[大数据必知必会:Zookeeper(2)伪分布式安装]

集群环境安装

参考[大数据必知必会:Zookeeper(3)集群环境安装]

高可用集群安装

高可用集群是在多个节点上运行进程来实现Hadoop集群,并在集群中提供两个NameNode、两个ResourceManager节点。

配置域名解析

在后续使用过程中,都使用主机名称,所以需要配置域名解析。

配置 /etc/hosts

由于该配置文件的修改需要root权限,所以在每个节点上都手动配置。

10.0.0.5 node1
10.0.0.6 node2
10.0.0.7 node3
10.0.0.8 node4
10.0.0.8 node5

以下配置过程在node1上完成,并且配置完成后将配置文件复制到其他节点。

配置免密登录

Hadoop分布式集群的运行,需要配置密钥对实现免密登录。

  • 创建公私钥对
hadoop@node1:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hadoop/.ssh/id_rsa
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:pp2AC1bQAQ5J6CJJCij1QA7bgKOsVxpoPVNi+cxhcyg hadoop@node1
The key's randomart image is:
+---[RSA 3072]----+
|O=*oo..          |
|OX E.* .         |
|X+* @ +          |
|B+.=.=           |
|= o++ . S        |
|..o. . = .       |
| .  . . o        |
|                 |
|                 |
+----[SHA256]-----+
  • 复制公钥
hadoop@node1:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
  • 复制到其他节点
hadoop@node1:~$ scp -r .ssh node1:~/
id_rsa.pub                                   100%  566     1.7MB/s   00:00    
authorized_keys                              100%  566     2.0MB/s   00:00    
known_hosts                                  100% 1332     4.5MB/s   00:00    
id_rsa                                       100% 2602    10.1MB/s   00:00    
hadoop@node1:~$ scp -r .ssh node2:~/
hadoop@node2's password: 
id_rsa.pub                                   100%  566   934.6KB/s   00:00    
authorized_keys                              100%  566   107.3KB/s   00:00    
known_hosts                                  100% 1332     2.5MB/s   00:00    
id_rsa                                       100% 2602     4.8MB/s   00:00    
hadoop@node1:~$ scp -r .ssh node3:~/
hadoop@node3's password: 
id_rsa.pub                                   100%  566     1.0MB/s   00:00    
authorized_keys                              100%  566     1.3MB/s   00:00    
known_hosts                                  100% 1332     2.8MB/s   00:00    
id_rsa                                       100% 2602     5.2MB/s   00:00    
hadoop@node1:~$ scp -r .ssh node4:~/
hadoop@node3's password: 
id_rsa.pub                                   100%  566     1.0MB/s   00:00    
authorized_keys                              100%  566     1.3MB/s   00:00    
known_hosts                                  100% 1332     2.8MB/s   00:00    
id_rsa                                       100% 2602     5.2MB/s   00:00    
hadoop@node1:~$ scp -r .ssh node5:~/
hadoop@node3's password: 
id_rsa.pub                                   100%  566     1.0MB/s   00:00    
authorized_keys                              100%  566     1.3MB/s   00:00    
known_hosts                                  100% 1332     2.8MB/s   00:00    
id_rsa                                       100% 2602     5.2MB/s   00:00    

确保执行ssh命令的时候不需要输入密码。

hadoop@node1:~$ ssh node1
hadoop@node1:~$ ssh node2
hadoop@node1:~$ ssh node3
hadoop@node1:~$ ssh node4
hadoop@node1:~$ ssh node5

解压安装包

将安装包解压到目标路径。

hadoop@node1:~$ mkdir -p apps
hadoop@node1:~$ tar -xzf hadoop-3.3.4.tar.gz -C apps

大数据必知必会:Hadoop(4)高可用集群安装

bin目录下存放的是Hadoop相关的常用命令,比如操作HDFS的hdfs命令,以及hadoop、yarn等命令。

etc目录下存放的是Hadoop的配置文件,对HDFS、MapReduce、YARN以及集群节点列表的配置都在这个里面。

sbin目录下存放的是管理集群相关的命令,比如启动集群、启动HDFS、启动YARN、停止集群等的命令。

share目录下存放了一些Hadoop的相关资源,比如文档以及各个模块的Jar包。

配置环境变量

在集群的每个节点上都配置Hadoop的环境变量,Hadoop集群在启动的时候可以使用start-all.sh一次性启动集群中的HDFS和Yarn,为了能够正常使用该命令,需要将其路径配置到环境变量中。

hadoop@node1:~$ vi ~/.bashrc

export HADOOP_HOME=/home/hadoop/apps/hadoop-3.3.4
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoop
export YARN_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoop

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

使环境变量生效。

hadoop@node1:~$ source ~/.bashrc

配置Hadoop集群

Hadoop软件安装完成后,每个节点上的Hadoop都是独立的软件,需要进行配置才能组成Hadoop集群。Hadoop的配置文件在$HADOOP_HOME/etc/hadoop目录下,主要配置文件有6个:

  • hadoop-env.sh主要配置Hadoop环境相关的信息,比如安装路径、配置文件路径等;
  • core-site.xml是Hadoop的核心配置文件,主要配置了Hadoop的NameNode的地址、Hadoop产生的文件目录等信息;
  • hdfs-site.xml是HDFS分布式文件系统相关的配置文件,主要配置了文件的副本数、HDFS文件系统在本地对应的目录等;
  • mapred-site.xml是关于MapReduce的配置文件,主要配置MapReduce在哪里运行;
  • yarn-site.xml是Yarn相关的配置文件,主要配置了Yarn的管理节点ResourceManager的地址、NodeManager获取数据的方式等;
  • workers是集群中节点列表的配置文件,只有在这个文件里面配置了的节点才会加入到Hadoop集群中,否则就是一个独立节点。

这几个配置文件如果不存在,可以通过复制配置模板的方式创建,也可以通过创建新文件的方式创建。需要保证在集群的每个节点上这6个配置保持同步,可以在每个节点单独配置,也可以在一个节点上配置完成后同步到其他节点。

hadoop-env.sh配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/home/hadoop/apps/hadoop-3.3.4
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoop
export HADOOP_LOG_DIR=/home/hadoop/logs/hadoop

core-site.xml配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/core-site.xml

<configuration>
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://node1</value>
    </property>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hadoop/data/hadoop/temp</value>
    </property>
    <property>
      <name>ha.zookeeper.quorum</name> 
      <value>node1:2181,node2:2181,node3:2181</value>
      <final>false</final>
    </property>
    <property>
      <name>hadoop.proxyuser.hadoop.hosts</name>
      <value>*</value>
    </property>
    <property>
      <name>hadoop.proxyuser.hadoop.groups</name>
      <value>*</value>
    </property>
</configuration>

hdfs-site.xml配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/home/hadoop/data/hadoop/hdfs/name</value>
    </property>
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/home/hadoop/data/hadoop/hdfs/data</value>
    </property>
    <property>
      <name>dfs.nameservices</name>
      <value>wux_labs</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.ha.namenodes.wux_labs</name>
      <value>nn1,nn2</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.wux_labs.nn1</name>
      <value>node1:8020</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.wux_labs.nn2</name>
      <value>node2:8020</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
     <value>qjournal://node1:8485;node2:8485;node3:8485/wux_labs</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.ha.automatic-failover.enabled.wux_labs</name>
      <value>true</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.client.failover.proxy.provider.wux_labs</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/home/hadoop/data/hadoop/journal</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
      <final>false</final>
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>
</configuration>

mapred-site.xml配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

yarn-site.xml配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/yarn-site.xml

<configuration>
    <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>wux_labs_yarn</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>node1</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>node2</value>
    </property>
    
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>node1:2181,node2:2181,node3:2181</value>
    </property>
</configuration>

workers配置

hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/workers

node3
node4
node5

将软件及配置信息复制到其他节点

在node1上配置好环境变量及配置文件,可以手动再在其他节点上完成同样的配置,或者直接将node1的文件复制到其他节点。

hadoop@node1:~$ scp -r .bashrc apps node2:~/
hadoop@node1:~$ scp -r .bashrc apps node3:~/
hadoop@node1:~$ scp -r .bashrc apps node4:~/
hadoop@node1:~$ scp -r .bashrc apps node5:~/