Bootstrap

Hadoop3.3.6完全分布式集群【三个节点】的安装配置

一 jdk安装(每个节点都需要安装)

jdk官方下载地址,点击下载

将jdk安装包上传至各个节点/opt/soft目录下,执行

rpm -ivh /opt/soft/jdk-8u281-linux-x64.rpm

-i:这个选项是用来安装包的。
-v:这个选项是用来显示详细的输出信息,即 verbose。
-h:这个选项是用来显示安装进度。

检查是否安装成功【三个节点都检查】

java -version

二 Hadoop安装

hadoop3.3.6官方下载地址,点击下载

2.1 配置文件修改

  1. 通过xmanager的Xftp上传hadoop-3.3.6.tar.gz文件到/opt/tarSoft目录

或通过命令从官网下载(不建议,速度较慢)
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz -P /opt/soft

  1. 解压缩hadoop-3.3.6.tar.gz 文件
tar -zxvf /opt/soft/hadoop-3.3.6.tar.gz -C /opt/app

-z:使用 gzip 解压缩算法。这是用来解压 .gz 结尾的文件的
-x:提取归档文件的内容
-f:指定要处理的归档文件的名称,后面跟着文件名 hadoop-3.3.6.tar.gz
-C:指定解压后的文件应放置在哪个目录下。在这里,目录是 /opt/app

解压后即可,看到/opt/app/hadoop-3.3.6文件夹

  1. 配置Hadoop的配置文件

进入目录,开始修改文件:

cd /opt/app/hadoop-3.3.6/etc/hadoop/

依次修改下面的文件:
注:文件中存在<configuration></configuration>,配置放入其中,且只保留一组的<configuration></configuration>
(1) 修改配置文件core-site.xml

<configuration>
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
    <property>
      <name>fs.defaultFS</name>  
      <value>hdfs://hadoop100:8020</value>  
    </property>  
<!-- 指定Hadoop的临时文件的本地存放路径 -->
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/var/log/hadoop/tmp</value>
    </property>
<!-- 设置HDFS web UI用户身份 -->
	<property>
   	  <name>hadoop.http.staticuser.user</name>
	  <value>root</value>
	</property>
<!-- 配置该root(superUser)允许通过代理访问的主机节点 -->
    <property>
      <name>hadoop.proxyuser.root.hosts</name>
      <value>*</value>
    </property>
<!-- 配置该root(superUser)允许通过代理用户所属组 -->
    <property>
       <name>hadoop.proxyuser.root.groups</name>
       <value>*</value>
    </property>
<!-- 配置该root(superUser)允许通过代理的用户-->
    <property>
       <name>hadoop.proxyuser.root.groups</name>
       <value>*</value>
    </property>
</configuration>

(2) 修改配置文件hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64

(3) 修改配置文件hdfs-site.xml

<configuration>
<!-- 指定HDFS的主节点的元数据文件的本地存放路径 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/app/hadoop-3.3.6/name</value>
    </property>
<!-- 指定HDFS的数据节点的数据文件的本地存放路径 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/app/hadoop-3.3.6/data</value>
    </property>
<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop100:9870</value>
    </property>
<!-- 2nn web端访问地址  NameNode和SecondaryNameNode尽量不要安装在同一台服务器-->
    <property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>hadoop101:50090</value>
    </property>
<!-- 指定HDFS的数据分块的备份数量 -->
    <property>
         <name>dfs.replication</name>
         <value>2</value>
    </property>
</configuration>

(4) 修改配置文件mapred-site.xml

<configuration>
<!-- 指定MapReduce所使用的外部管理框架,这里使用Hadoop 3.3.6自带的YARN资源管理器 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- jobhistory properties -->
<!-- 设置 mapreduce 的历史服务器地址和端口号 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop100:10020</value>
    </property>
<!-- mapreduce 历史服务器的 web 访问地址 -->
    <property>
         <name>mapreduce.jobhistory.webapp.address</name>
         <value>hadoop100:19888</value>
    </property>
</configuration>

(5) 修改配置文件yarn-site.xml

<configuration>
<!-- 指定ResourceManager -->
  <property>
         <name>yarn.resourcemanager.hostname</name>
         <value>hadoop100</value>
  </property>    
  <property>
         <name>yarn.resourcemanager.address</name>
         <value>${yarn.resourcemanager.hostname}:8032</value>
  </property>
  <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>${yarn.resourcemanager.hostname}:8030</value>
  </property>
  <property>
         <name>yarn.resourcemanager.webapp.address</name>
         <value>${yarn.resourcemanager.hostname}:8088</value>
  </property>
  <property>
         <name>yarn.resourcemanager.webapp.https.address</name>
         <value>${yarn.resourcemanager.hostname}:8090</value>
  </property>
  <property>
         <name>yarn.resourcemanager.resource-tracker.address</name>
         <value>${yarn.resourcemanager.hostname}:8031</value>
  </property>
  <property>
         <name>yarn.resourcemanager.admin.address</name>
         <value>${yarn.resourcemanager.hostname}:8033</value>
  </property>
  <property>
         <name>yarn.nodemanager.local-dirs</name>
         <value>/data/hadoop/yarn/local</value>
  </property>
<!-- 开启日志聚集功能 -->
  <property>
         <name>yarn.log-aggregation-enable</name>
         <value>true</value>
  </property>
  <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/data/tmp/logs</value>
  </property>
<!-- 设置日志聚集服务器地址 -->
  <property> 
        <name>yarn.log.server.url</name> 
        <value>http://hadoop100:19888/jobhistory/logs/</value>
        <description>URL for job history server</description>
  </property>
  <property>
       	<name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
  </property>
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
  </property>
  <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
	<property>  
        <name>yarn.nodemanager.resource.memory-mb</name>  
        <value>2048</value>  
  </property>  
  <property>  
        <name>yarn.scheduler.minimum-allocation-mb</name>  
        <value>512</value>  
  </property>   
  <property>  
        <name>yarn.scheduler.maximum-allocation-mb</name>  
        <value>4096</value>  
  </property> 
  <property> 
        <name>mapreduce.map.memory.mb</name> 
        <value>2048</value> 
  </property> 
  <property> 
        <name>mapreduce.reduce.memory.mb</name> 
        <value>2048</value> 
  </property> 
  <property> 
        <name>yarn.nodemanager.resource.cpu-vcores</name> 
        <value>1</value> 
  </property>
  <property>
        <name>yarn.application.classpath</name>
        <value>
$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/yarn:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*
    	  </value>
  </property>
        <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
  <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
  </property>
  <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
  </property>
</configuration>

(6) 修改配置文件yarn-env.sh 在文件末尾加上

export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64

(7) 修改配置文件 workers==【不能有空格和空行】==
删除原有 localhost,添加如下内容

hadoop101
hadoop102
  1. 进入到启动命令所在位置hadoop安装路径下的sbin目录下

修改start-dfs.sh,stop-dfs.sh,在文件顶部添加(重点):

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

修改 start-yarn.sh,stop-yarn.sh,在文件顶部添加(重点):

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
  1. 设置IP映射,在/etc/hosts 添加如下内容,(每个节点都需修改)

添加:

192.168.10.100 hadoop100 hadoop100.centos.com 
192.168.10.101 hadoop101 hadoop101.centos.com
192.168.10.102 hadoop102 hadoop102.centos.com
  1. 拷贝 Hadoop 安装文件到集群节点。(依次输入【yes】,【123456】)
scp -qr /opt/app/hadoop-3.3.6 hadoop101:/opt/app
scp -r /opt/app/hadoop-3.3.6 hadoop102:/opt/app
  1. 在每个节点vim /etc/profile.d/my_env.sh配置JAVA和Hadoop环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
export HADOOP_HOME=/opt/app/hadoop-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改后执行【source /etc/profile】命令使其生效

2.2 配置无密码登录

  1. 使用ssh-keygen产生公钥与私钥对
输入命令“ssh-keygen -t rsa”,接着按三次Enter键

[root@hadoop100 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory ‘/root/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a6:13:5a:7b:54:eb:77:58:bd:56:ef:d0:64:90:66:d4 [email protected]
The key’s randomart image is:
±-[ RSA 2048]----+
| … |
| . .E|
| . = |
| . . o o |
| o S . . =|
| o * . o ++|
| . + . . o ooo|
| o . …o |
| .|
±----------------+

生成私有密钥id_rsa和公有密钥id_rsa.pub两个文件。ssh-keygen用来生成RSA类型的密钥以及管理该密钥,参数“-t”用于指定要创建的SSH密钥的类型为RSA。

  1. 用ssh-copy-id将公钥复制到远程机器中
ssh-copy-id -i /root/.ssh/id_rsa.pub hadoop100   //依次输入yes,123456(root用户的密码)
ssh-copy-id -i /root/.ssh/id_rsa.pub hadoop101
ssh-copy-id -i /root/.ssh/id_rsa.pub hadoop102
  1. 验证是否设置无密码登录

依次输入,可成功跳转后exit回到hadoop100

ssh hadoop100
exit;
ssh hadoop101
exit;
ssh hadoop102
exit;

2.3 配置时间同步服务

  1. 安装NTP服务。在各节点:
yum -y install ntp
  1. 修改设置

假设hadoop100节点为NTP服务主节点,那么其配置如下:
使用命令“vim /etc/ntp.conf”打开/etc/ntp.conf文件,
注释掉以restrict default开头以及server开头的行,并添加:

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap   #限定时间同步,以
server 127.127.1.0
fudge 127.127.1.0 stratum 10
  1. 在从节点中配置NTP

同样修改/etc/ntp.conf文件,注释掉server开头的行,并添加:

server hadoop100
  1. 执行命令
systemctl stop firewalld.service & systemctl disable firewalld.service

永久性关闭防火墙,主节点和从节点都要关闭。

  1. 启动NTP服务

① 在hadoop100节点执行命令【service ntpd start & chkconfig ntpd on】永久启动NTP服务
② 在hadoop101和hadoop102节点上执行命令【ntpdate hadoop100】,获取同步时间初值
③ 在hadoop101和hadoop102节点上分别执行【service ntpd start & chkconfig ntpd on】即可启动并永久启动NTP服务

2.4 启动 Hadoop 集群

  1. 格式化hadoop100的NameNode

在hadoop100上执行命令
注:Hadoop 集群只需要一次格式化即可,后续启动无需格式化

hdfs namenode -format
  1. 启动集群

如果已经配置环境变量并且使之生效则执行启动

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

或直接使用
start-all.sh
  1. 使用【jps】,查看进程
hadoop100hadoop101hadoop102
NameNodeDataNodeDataNode
ResourceManagerNodeManageNodeManage
JobHistoryServerSecondaryNameNodeJps
JpsJps
  1. 在本地电脑添加映射

在 Windows 下 C:\Windows\System32\drivers\etc\hosts 添加 IP 映射

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
  1. 浏览器打开监控端口界面:

http://hadoop100:9870
在这里插入图片描述

http://hadoop100:8088
在这里插入图片描述

http://hadoop100:19888 日志端
在这里插入图片描述

  1. 关闭集群
stop-dfs.sh
stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver

或直接使用
stop-all.sh

2.5 集群测试【使用hadoop官方自带的词频统计程序测试】

  1. 上传一份单词文本文件至hdfs
hdfs dfs -mkdir /input
hdfs dfs -put /opt/testdata/words.txt /input
  1. 执行WordCount程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output

在这里插入图片描述

访问HDFS监控界面【hadoop100:9870】查看/output路径下面生成的单词计数结果文件是否正确
在这里插入图片描述
在这里插入图片描述

;