第2周 Hadoop安装与配置(一)

第2周 · Hadoop安装与配置(一)

Hadoop 下载解压、核心配置文件、伪分布式启动与词频统计测试

项目2阶段01单元1 数据仓库基础与Hive入门

本实训对应的知识点

实训内容与步骤 依据原始实训文档整理,命令与配置均来自文档原文

Hadoop安装与配置(一)

1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示:

TEXT
[hadoop@hadoop1 app]$ ls
hadoop-3.3.1.tar.gz

2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示:

TEXT
[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz

3)为了方便管理多版本Hadoop,使用ln命令创建软连接,具体操作如下所示:

TEXT
[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop

(2)配置Hadoop

在Hadoop安装目录下进入到etc/hadoop目录,修改Hadoop相关配置文件。

1)修改core-site.xml配置文件。

core-site.xml文件主要配置Hadoop的公有属性,具体配置内容如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>

<!--配置hdfs NameNode的地址,9000是RPC通信的端口-->

TEXT
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/tmp</value>

<!--hadoop的临时目录-->

TEXT
</property>
</configuration>

2)修改hdfs-site.xml 配置文件。

SHELL
hdfs-site.xml文件主要配置跟HDFS相关的属性,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/dfs/name</value>

<!--配置namenode节点存储fsimage的目录位置-->

TEXT
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/dfs/data</value>

<!--配置datanode节点存储block的目录位置-->

TEXT
</property>
<property>
<name>dfs.replication</name>
<value>1</value>

<!--配置hdfs副本数量-->

TEXT
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>

<!--关闭hdfs的权限检查-->

TEXT
</property>
</configuration>

3)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体配置内容如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk

4)修改mapred-site.xml配置文件。mapred-site.xml 文件主要配置跟MapReduce 相关的属性,这里主要将MapReduce的运行框架名称配置为YARN,具体配置内容如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>

<!--指定运行mapreduce的环境为YARN-->

TEXT
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示MapReduce HOME的路径,这里设置为HADOOP_HOME相同路径-->

TEXT
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示Map HOME的路径,这里设置为HADOOP_HOME相同路径-->

TEXT
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示Reduce HOME的路径,这里设置为HADOOP_HOME相同路径-->

TEXT
</property>
</configuration>

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

yarn-site.xml文件主要配置跟YARN 相关的属性,具体配置内容如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>

<!--配置NodeManager执行MR任务的方式为Shuffle混洗-->

TEXT
</property>
</configuration>

6)修改workers配置文件。slaves文件主要配置哪些节点为datanode角色,由于目前搭建的是Hadoop伪分布集群,所以只需要填写当前主机的hostname即可,具体配置内容如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi workers

hadoop1

7)配置Hadoop环境变量。在hadoop用户下,添加Hadoop环境变量,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
HADOOP_HOME=/home/hadoop/app/hadoop
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH HADOOP_HOME

使用source命令执行.bashrc文件,才能使Hadoop环境变量生效,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ source ~/.bashrc
[hadoop@hadoop1 hadoop]$ hadoop version
Hadoop 3.3.1

8)创建Hadoop相关数据目录。在hadoop用户下,创建Hadoop相关数据目录,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/tmp
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/name
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/data

(3)启动Hadoop伪分布集群

1)格式化主节点namenode。在Hadoop安装目录下,使用如下命令对NameNode进行格式化。

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format

注意:第一次安装Hadoop集群需要对NameNode进行格式化,Hadoop集群安装成功之后,下次只需要使用脚本start-all.sh一键启动Hadoop集群即可。

2)启动Hadoop伪分布集群。在Hadoop安装目录下,使用脚本一键启动Hadoop集群,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ sbin/start-all.sh

3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。

TEXT
[hadoop@hadoop1 ~]$ jps

10885 NodeManager

10327 DataNode

10522 SecondaryNameNode

10746 ResourceManager

10171 NameNode

11247 Jps

如果服务进程中包含Resourcemanager、Nodemanager、NameNode、DataNode和SecondaryNameNode等5个进程,这就说明Hadoop伪分布集群启动成功。

4)查看HDFS文件系统。在浏览器中输入http://hadoop1:9870/地址,通过web界面查看HDFS文件系统,具体操作如图1-1示。

📷 图1-1通过web界面查看HDFS文件系统

备注:在windows平台要用hadoop1访问,必须在C:\Windows\System32\drivers\etc\hosts文件中配置,如图1-2所示。

📷 图1-2在hosts文件中配置ip映射

5)查看YARN资源管理系统。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN资源管理系统,具体操作如图1-3所示。

📷 图1-3通过web界面查看YARN资源管理系统

(4)测试运行Hadoop伪分布集群

Hadoop伪分布集群启动之后,我们以Hadoop自带的WordCount案例来检测Hadoop集群环境的可用性。

1)查看HDFS目录。在HDFS shell中,使用ls命令查看HDFS文件系统目录,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -ls /

由于是第一次使用HDFS文件系统,所以HDFS中目前没有任何目录和文件。

2)创建HDFS目录。在HDFS shell中,使用mkdir命令创建HDFS文件目录/test,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -mkdir /test

3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi words.log
hadoop hadoop hadoop
spark spark spark
flink flink flink

4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test

5)运行WordCount案例。使用yarn脚本将Hadoop自带的WordCount程序提交到YARN集群运行,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out

6)查看作业运行状态。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN中作业运行状态,具体操作如图1-4所示。

📷 图1-4通过web界面查看YARN中作业运行状态

如果在YARN 集群的Web界面中,查看到WordCount作业最终的运行状态为SUCCESS,就说明MapReduce程序可以在YARN集群上成功运行。

7)查询作业运行结果。使用cat命令查看WordCount作业输出结果,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*
flink 3
hadoop 3
spark 3

如果WordCount运行结果符合预期值,说明Hadoop伪分布式集群已经搭建成功!

2.2Hadoop完全分布式环境搭建准备

2.2.1Linux虚拟机克隆

Linux虚拟机克隆操作步骤如下:

(1)如图1-5所示,在VMware中右键点击hadoop1节点,然后选择hadoop1——>管理——>克隆,进入克隆虚拟机向导,点击“下一页”。

📷 图1-5 克隆虚拟机向导

(2)弹出如果1-6所示的克隆源页面,选择“虚拟机中的当前状态”然后点击“下一步”。

📷 图1-6 选择克隆源

(3)弹出如图1-7所示的克隆类型界面,选择“创建见完整克隆”选项,然后点击“下一步”。

📷 图1-7 选择克隆类型

(4)弹出如图1-8所示的界面,我们可以输入虚拟机的名称以及存储位置,然后点击“完成”按钮。

📷 图1-8 输入新虚拟机的名称

(5)弹出如图1-9的克隆进度界面,耐心等待虚拟机克隆进度条完成。

📷 图1-9克隆虚拟机

(6)如图1-10所示,点击“关闭”按钮,完成虚拟机的克隆。

📷 图1-10 完成虚拟机克隆

(7)如图1-11所示,使用与hadoop1相同的账号密码登录hadoop2(用户名:root 密码:123456)。

📷 图1-11 启动登录

2.2.2网络及工具配置

(1)配置静态IP

配置静态IP步骤如下:

1)如图1-12所示,在命令行输入:vi/etc/sysconfig/network-scripts/ifcfg-ens33命令。

📷 图1-12 配置静态ip(1)

2)如图1-13所示,修改ip地址为192.168.249.162(可根据实际情况配置)。

📷 图1-13 配置静态ip(2)

3)如图1-14所示,使用systemctl restart NetworkManager重启网络服务。

📷 图1-14 重启网络服务

(4)如图1-15所示,输入ping www.baidu.com命令,测试虚拟机是否能够联网,收到回复表示能够联通。

📷 图1-15 测试网络

(2) Xshell连接

Xshell连接步骤如下:

1)如图1-16所示,静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机,在xshell中新建会话,配置好需要连接的虚拟机。

📷 图1-16 配置连接

2)如图1-17所示,然后配置用户身份验证,输入用户名和密码。

📷 图1-17 配置用户身份验证

3)连接配置好的虚拟机,出现图1-18表示连接成功。

📷 图1-18 通过xshell连接

(3) 修改主机名

修改主机名步骤如下:

1)由于是克隆的,主机还是hadoop1,我们需要修改为hadoop2,使用命令vi /etc/hostname修改主机名,具体操作如图1-19所示。

📷 图1-19 修改主机名

2)为了使用主机名进行访问,我们需要配置主机名映射,输入命令vi /etc/hosts配置主机名映射,具体操作如图1-20所示。

📷 图1-20 修改主机名映射

(3)关闭防火墙

关闭防火墙步骤如下:

1)如图1-21所示,使用查看systemctl status firewalld防火墙状态,如果处于“running”状态表示防火墙开启。

📷 图1-21 查看防火墙状态

2)关闭防火墙分两步进行,首先使用命令systemctl stop firewalld停止防火墙,然后使用命令systemctl disable firewalld使防火墙失效,具体操作如图1-22所示。

📷 图1-22 关闭防火墙

注意:由于克隆hadoop1,前面已经关闭防火墙此步骤可以省略,jdk安装也可省略。

(4) FileZilla连接

在FileZilla中新建站点,进行配置,具体操作如图1-23所示。

📷 图1-23 FileZilla连接虚拟机

备注:使用同样步骤克隆hadoop3并配置ip(ip:192.168.249.163)。

(5)配置Hosts文件

1)使用命令vi /etc/hosts配置ip地址映射,具体操作如图1-24所示,(备注:hadoop1、hadoop2、hadoop3节点hosts文件配置一样)。

📷 图1-24 配置Hosts文件

2)测试hadoop1节点访问hadoop2节点,具体操作如图1-25所示。

📷 图1-25 测试节点互访

2.2.3时钟同步

(1)我们使用命令timedatectl set-timezone "Asia/Shanghai"统一时区为上海时区,具体操作如图1-26所示。

📷 图1-26 统一时区

(2)使用yum -y install chrony命令下载安装 chrony服务,中间遇到提问请输入y,具体操作如图1-27所示。

📷 图1-27 下载安装 chrony

(3)编辑 chrony 配置文件

SHELL
vi /etc/chrony.conf

1. 注释掉:

TEXT
# pool 2.centos.pool.ntp.org iburst

2. 加入新的的时间服务器(可添加多个时间服务器):

📷 图1-28 同步时间
TEXT
server ntp.aliyun.com iburst

(4)重启 chronyd 服务

SHELL
systemctl restart chronyd

(5)设置 chronyd 开机自启

SHELL
systemctl enable chronyd

(6)进行时间同步

SHELL
chronyc makestep

(7)查看时间是否同步

SHELL
date

为了能够周期性执行时钟同步,我们需要加入定时计划任务,如需要每隔10分钟同步一下时钟,使用crontab -e命令,输入如下内容:

📷 0-59/10 * * * * /usr/bin/chronyc makestep

具体操作如图1-29所示。

📷 图1-29 加入定时任务

备注:3个节点执行一遍。

2.2.4集群SSH免密登录

(1)各个节点SSH免密登录。SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。

但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密码免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密码免密登录的配置。

SSH免密码免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密码免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密码免密登录。

首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。

由于hadoop1先前已经配置过免密登录,我们直接从hadoop2开始配置(注意是在hadoop用户)配置hadoop2节点免密登录的步骤如下,首先使用su - hadoop命令切换至hadoop用户,然后使用rm -rf .ssh/删除克隆过来的ssh目录,最后通过ssh-keygen -t rsa生成秘钥,具体操作如图1-30所示。

📷 图1-30 生成秘钥

(2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。使用cd .ssh/ 进入ssh目录,使用cp id_rsa.pub authorized_keys复制秘钥到authorized_keys文件,最后通过cat authorized_keys查看秘钥是否复制成功,具体操作如图1-31。

📷 图1-31 拷贝公钥到authorized_keys文件中

(3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。具体操作如图1-32所示。

📷 图1-32 为.ssh目录及文件赋予相应的权限

(4)使用ssh命令登录hadoop2,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功,具体操作如图1-33所示。

📷 图1-33 使用ssh登录hadoop2

(5)hadoop3节点按照hadoop2节点一样配置SSH免密登录即可。

(6)配置集群SSH免密登录。为了实现集群节点之间SSH免密登录,我们还需要将hadoop2和hadoop3的公钥id_ras.pub复制到hadoop1中的authorized_keys文件中,具体操作以及命令如图1-24、图1-35所示。

📷 图1-34 配置集群SSH免密登录(1)📷 图1-35 配置集群SSH免密登录(2)
TEXT
[hadoop@hadoop2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'
[hadoop@hadoop3 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'

然后将hadoop1中的authorized_keys文件分发到hadoop2和hadoop3节点,具体操作如图1-36、图1-37所示:

📷 图1-36 authorized_keys文件分发到hadoop2📷 图1-37 authorized_keys文件分发到hadoop3
TEXT
[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop2:~/.ssh
[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop3:~/.ssh/

然后hadoop1节点就可以免密登录hadoop2和hadoop3节点,如图1-38所示。

📷 图1-38 免密登录hadoop2、hadoop3

2.2.5集群脚本开发

(1)创建tools目录,并准备脚本与配置文件。

(2)首先使用mkdir tools命令创建tools目录,并用ls命令查看,具体操作如图1-39所示。

📷 图1-39 创建tools目录

(3)通过FileZilla上传脚本文件到tools文件夹并使用ls命令查看,具体操作如图1-40、图1-41所示。

📷 图1-40 上传脚本文件📷 图1-41 查看脚本文件

(4)然后使用vi deploy.conf配置脚本,具体内容为:

hadoop1,master,all,

hadoop2,slave,all,

hadoop3,slave,all,

具体操作如图1-42所示。

📷 图1-42 配置脚本文件

(5)使用 chmod u+x deploy.sh runRemoteCmd.sh命令给脚本授予可执行权限并使用ls命令查看,具体操作如图1-43所示。

📷 图1-43 给脚本授予可执行权限

(6)使用vi ~/.bashrc命令配置脚本环境变量,具体操作如图1-44所示。

📷 图1-44 配置脚本环境变量(1)

(7)将内容修改为,如图1-45的内容。

📷 图1-45 配置脚本环境变量(2)

(8)使用source ~/.bashrc 使配置生效,具体操作如图1-46所示。

📷 图1-46 配置生效

(9)最后测试运行集群脚本,使用touch words.log创建words.log文件,然后使用deploy.sh words.log /home/hadoop/app slave命令分发文件到hadoop2、hadoop3,具体操作如图1-47所示。

📷 图1-47 测试运行集群脚本

II

📄 展开原始文档全文(285 段)

Hadoop安装与配置(一)

(1)Hadoop下载与解压

1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示:

[hadoop@hadoop1 app]$ ls

hadoop-3.3.1.tar.gz

2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示:

[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz

3)为了方便管理多版本Hadoop,使用ln命令创建软连接,具体操作如下所示:

[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop

(2)配置Hadoop

在Hadoop安装目录下进入到etc/hadoop目录,修改Hadoop相关配置文件。

1)修改core-site.xml配置文件。

core-site.xml文件主要配置Hadoop的公有属性,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hadoop1:9000</value>

<!--配置hdfs NameNode的地址,9000是RPC通信的端口-->

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/data/tmp</value>

<!--hadoop的临时目录-->

</property>

</configuration>

2)修改hdfs-site.xml 配置文件。

hdfs-site.xml文件主要配置跟HDFS相关的属性,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml

<configuration>

<property>

<name>dfs.namenode.name.dir</name>

<value>/home/hadoop/data/dfs/name</value>

<!--配置namenode节点存储fsimage的目录位置-->

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hadoop/data/dfs/data</value>

<!--配置datanode节点存储block的目录位置-->

</property>

<property>

<name>dfs.replication</name>

<value>1</value>

<!--配置hdfs副本数量-->

</property>

<property>

<name>dfs.permissions</name>

<value>false</value>

<!--关闭hdfs的权限检查-->

</property>

</configuration>

3)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/home/hadoop/app/jdk

4)修改mapred-site.xml配置文件。mapred-site.xml 文件主要配置跟MapReduce 相关的属性,这里主要将MapReduce的运行框架名称配置为YARN,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

<!--指定运行mapreduce的环境为YARN-->

</property>

<property>

<name>yarn.app.mapreduce.am.env</name>

<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示MapReduce HOME的路径,这里设置为HADOOP_HOME相同路径-->

</property>

<property>

<name>mapreduce.map.env</name>

<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示Map HOME的路径,这里设置为HADOOP_HOME相同路径-->

</property>

<property>

<name>mapreduce.reduce.env</name>

<value>HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop</value>

<!--表示Reduce HOME的路径,这里设置为HADOOP_HOME相同路径-->

</property>

</configuration>

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

yarn-site.xml文件主要配置跟YARN 相关的属性,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi yarn-site.xml

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

<!--配置NodeManager执行MR任务的方式为Shuffle混洗-->

</property>

</configuration>

6)修改workers配置文件。slaves文件主要配置哪些节点为datanode角色,由于目前搭建的是Hadoop伪分布集群,所以只需要填写当前主机的hostname即可,具体配置内容如下所示。

[hadoop@hadoop1 hadoop]$ vi workers

hadoop1

7)配置Hadoop环境变量。在hadoop用户下,添加Hadoop环境变量,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ vi ~/.bashrc

JAVA_HOME=/home/hadoop/app/jdk

HADOOP_HOME=/home/hadoop/app/hadoop

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH HADOOP_HOME

使用source命令执行.bashrc文件,才能使Hadoop环境变量生效,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ source ~/.bashrc

[hadoop@hadoop1 hadoop]$ hadoop version

Hadoop 3.3.1

8)创建Hadoop相关数据目录。在hadoop用户下,创建Hadoop相关数据目录,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/tmp

[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/name

[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/data

(3)启动Hadoop伪分布集群

1)格式化主节点namenode。在Hadoop安装目录下,使用如下命令对NameNode进行格式化。

[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format

注意:第一次安装Hadoop集群需要对NameNode进行格式化,Hadoop集群安装成功之后,下次只需要使用脚本start-all.sh一键启动Hadoop集群即可。

2)启动Hadoop伪分布集群。在Hadoop安装目录下,使用脚本一键启动Hadoop集群,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ sbin/start-all.sh

3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。

[hadoop@hadoop1 ~]$ jps

10885 NodeManager

10327 DataNode

10522 SecondaryNameNode

10746 ResourceManager

10171 NameNode

11247 Jps

如果服务进程中包含Resourcemanager、Nodemanager、NameNode、DataNode和SecondaryNameNode等5个进程,这就说明Hadoop伪分布集群启动成功。

4)查看HDFS文件系统。在浏览器中输入http://hadoop1:9870/地址,通过web界面查看HDFS文件系统,具体操作如图1-1示。

📷 图1-1通过web界面查看HDFS文件系统

备注:在windows平台要用hadoop1访问,必须在C:\Windows\System32\drivers\etc\hosts文件中配置,如图1-2所示。

📷 图1-2在hosts文件中配置ip映射

5)查看YARN资源管理系统。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN资源管理系统,具体操作如图1-3所示。

📷 图1-3通过web界面查看YARN资源管理系统

(4)测试运行Hadoop伪分布集群

Hadoop伪分布集群启动之后,我们以Hadoop自带的WordCount案例来检测Hadoop集群环境的可用性。

1)查看HDFS目录。在HDFS shell中,使用ls命令查看HDFS文件系统目录,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -ls /

由于是第一次使用HDFS文件系统,所以HDFS中目前没有任何目录和文件。

2)创建HDFS目录。在HDFS shell中,使用mkdir命令创建HDFS文件目录/test,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -mkdir /test

3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ vi words.log

hadoop hadoop hadoop

spark spark spark

flink flink flink

4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test

5)运行WordCount案例。使用yarn脚本将Hadoop自带的WordCount程序提交到YARN集群运行,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out

6)查看作业运行状态。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN中作业运行状态,具体操作如图1-4所示。

📷 图1-4通过web界面查看YARN中作业运行状态

如果在YARN 集群的Web界面中,查看到WordCount作业最终的运行状态为SUCCESS,就说明MapReduce程序可以在YARN集群上成功运行。

7)查询作业运行结果。使用cat命令查看WordCount作业输出结果,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*

flink 3

hadoop 3

spark 3

如果WordCount运行结果符合预期值,说明Hadoop伪分布式集群已经搭建成功!

2.2 Hadoop完全分布式环境搭建准备

2.2.1 Linux虚拟机克隆

Linux虚拟机克隆操作步骤如下:

(1)如图1-5所示,在VMware中右键点击hadoop1节点,然后选择hadoop1——>管理——>克隆,进入克隆虚拟机向导,点击“下一页”。

📷 图1-5 克隆虚拟机向导

(2)弹出如果1-6所示的克隆源页面,选择“虚拟机中的当前状态”然后点击“下一步”。

📷 图1-6 选择克隆源

(3)弹出如图1-7所示的克隆类型界面,选择“创建见完整克隆”选项,然后点击“下一步”。

📷 图1-7 选择克隆类型

(4)弹出如图1-8所示的界面,我们可以输入虚拟机的名称以及存储位置,然后点击“完成”按钮。

📷 图1-8 输入新虚拟机的名称

(5)弹出如图1-9的克隆进度界面,耐心等待虚拟机克隆进度条完成。

📷 图1-9克隆虚拟机

(6)如图1-10所示,点击“关闭”按钮,完成虚拟机的克隆。

📷 图1-10 完成虚拟机克隆

(7)如图1-11所示,使用与hadoop1相同的账号密码登录hadoop2(用户名:root 密码:123456)。

📷 图1-11 启动登录

2.2.2 网络及工具配置

(1)配置静态IP

配置静态IP步骤如下:

1)如图1-12所示,在命令行输入:vi/etc/sysconfig/network-scripts/ifcfg-ens33命令。

📷 图1-12 配置静态ip(1)

2)如图1-13所示,修改ip地址为192.168.249.162(可根据实际情况配置)。

📷 图1-13 配置静态ip(2)

3)如图1-14所示,使用systemctl restart NetworkManager重启网络服务。

📷 图1-14 重启网络服务

(4)如图1-15所示,输入ping www.baidu.com命令,测试虚拟机是否能够联网,收到回复表示能够联通。

📷 图1-15 测试网络

(2) Xshell连接

Xshell连接步骤如下:

1)如图1-16所示,静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机,在xshell中新建会话,配置好需要连接的虚拟机。

📷 图1-16 配置连接

2)如图1-17所示,然后配置用户身份验证,输入用户名和密码。

📷 图1-17 配置用户身份验证

3)连接配置好的虚拟机,出现图1-18表示连接成功。

📷 图1-18 通过xshell连接

(3) 修改主机名

修改主机名步骤如下:

1)由于是克隆的,主机还是hadoop1,我们需要修改为hadoop2,使用命令vi /etc/hostname修改主机名,具体操作如图1-19所示。

📷 图1-19 修改主机名

2)为了使用主机名进行访问,我们需要配置主机名映射,输入命令vi /etc/hosts配置主机名映射,具体操作如图1-20所示。

📷 图1-20 修改主机名映射

(3)关闭防火墙

关闭防火墙步骤如下:

1)如图1-21所示,使用查看systemctl status firewalld防火墙状态,如果处于“running”状态表示防火墙开启。

📷 图1-21 查看防火墙状态

2)关闭防火墙分两步进行,首先使用命令systemctl stop firewalld停止防火墙,然后使用命令systemctl disable firewalld使防火墙失效,具体操作如图1-22所示。

📷 图1-22 关闭防火墙

注意:由于克隆hadoop1,前面已经关闭防火墙此步骤可以省略,jdk安装也可省略。

(4) FileZilla连接

在FileZilla中新建站点,进行配置,具体操作如图1-23所示。

📷 图1-23 FileZilla连接虚拟机

备注:使用同样步骤克隆hadoop3并配置ip(ip:192.168.249.163)。

(5)配置Hosts文件

1)使用命令vi /etc/hosts配置ip地址映射,具体操作如图1-24所示,(备注:hadoop1、hadoop2、hadoop3节点hosts文件配置一样)。

📷 图1-24 配置Hosts文件

2)测试hadoop1节点访问hadoop2节点,具体操作如图1-25所示。

📷 图1-25 测试节点互访

2.2.3 时钟同步

(1)我们使用命令timedatectl set-timezone "Asia/Shanghai"统一时区为上海时区,具体操作如图1-26所示。

📷 图1-26 统一时区

(2)使用yum -y install chrony命令下载安装 chrony服务,中间遇到提问请输入y,具体操作如图1-27所示。

📷 图1-27 下载安装 chrony

(3)编辑 chrony 配置文件

vi /etc/chrony.conf

1. 注释掉:

# pool 2.centos.pool.ntp.org iburst

2. 加入新的的时间服务器(可添加多个时间服务器):

server ntp.aliyun.com iburst

📷 图1-28 同步时间

(4)重启 chronyd 服务

systemctl restart chronyd

(5)设置 chronyd 开机自启

systemctl enable chronyd

(6)进行时间同步

chronyc makestep

(7)查看时间是否同步

date

为了能够周期性执行时钟同步,我们需要加入定时计划任务,如需要每隔10分钟同步一下时钟,使用crontab -e命令,输入如下内容:

📷 0-59/10 * * * * /usr/bin/chronyc makestep

具体操作如图1-29所示。

📷 图1-29 加入定时任务

备注:3个节点执行一遍。

2.2.4 集群SSH免密登录

(1)各个节点SSH免密登录。SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。

但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密码免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密码免密登录的配置。

SSH免密码免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密码免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密码免密登录。

首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。

由于hadoop1先前已经配置过免密登录,我们直接从hadoop2开始配置(注意是在hadoop用户)配置hadoop2节点免密登录的步骤如下,首先使用su - hadoop命令切换至hadoop用户,然后使用rm -rf .ssh/删除克隆过来的ssh目录,最后通过ssh-keygen -t rsa生成秘钥,具体操作如图1-30所示。

📷 图1-30 生成秘钥

(2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。使用cd .ssh/ 进入ssh目录,使用cp id_rsa.pub authorized_keys复制秘钥到authorized_keys文件,最后通过cat authorized_keys查看秘钥是否复制成功,具体操作如图1-31。

📷 图1-31 拷贝公钥到authorized_keys文件中

(3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。具体操作如图1-32所示。

📷 图1-32 为.ssh目录及文件赋予相应的权限

(4)使用ssh命令登录hadoop2,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功,具体操作如图1-33所示。

📷 图1-33 使用ssh登录hadoop2

(5)hadoop3节点按照hadoop2节点一样配置SSH免密登录即可。

(6)配置集群SSH免密登录。为了实现集群节点之间SSH免密登录,我们还需要将hadoop2和hadoop3的公钥id_ras.pub复制到hadoop1中的authorized_keys文件中,具体操作以及命令如图1-24、图1-35所示。

[hadoop@hadoop2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'

📷 图1-34 配置集群SSH免密登录(1)

[hadoop@hadoop3 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'

📷 图1-35 配置集群SSH免密登录(2)

然后将hadoop1中的authorized_keys文件分发到hadoop2和hadoop3节点,具体操作如图1-36、图1-37所示:

[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop2:~/.ssh

📷 图1-36 authorized_keys文件分发到hadoop2

[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop3:~/.ssh/

📷 图1-37 authorized_keys文件分发到hadoop3

然后hadoop1节点就可以免密登录hadoop2和hadoop3节点,如图1-38所示。

📷 图1-38 免密登录hadoop2、hadoop3

2.2.5 集群脚本开发

(1)创建tools目录,并准备脚本与配置文件。

(2)首先使用mkdir tools命令创建tools目录,并用ls命令查看,具体操作如图1-39所示。

📷 图1-39 创建tools目录

(3)通过FileZilla上传脚本文件到tools文件夹并使用ls命令查看,具体操作如图1-40、图1-41所示。

📷 图1-40 上传脚本文件

📷 图1-41 查看脚本文件

(4)然后使用vi deploy.conf配置脚本,具体内容为:

hadoop1,master,all,

hadoop2,slave,all,

hadoop3,slave,all,

具体操作如图1-42所示。

📷 图1-42 配置脚本文件

(5)使用 chmod u+x deploy.sh runRemoteCmd.sh命令给脚本授予可执行权限并使用ls命令查看,具体操作如图1-43所示。

📷 图1-43 给脚本授予可执行权限

(6)使用vi ~/.bashrc命令配置脚本环境变量,具体操作如图1-44所示。

📷 图1-44 配置脚本环境变量(1)

(7)将内容修改为,如图1-45的内容。

📷 图1-45 配置脚本环境变量(2)

(8)使用source ~/.bashrc 使配置生效,具体操作如图1-46所示。

📷 图1-46 配置生效

(9)最后测试运行集群脚本,使用touch words.log创建words.log文件,然后使用deploy.sh words.log /home/hadoop/app slave命令分发文件到hadoop2、hadoop3,具体操作如图1-47所示。

📷 图1-47 测试运行集群脚本

II