第2周 · Hadoop安装与配置(一)
Hadoop 下载解压、核心配置文件、伪分布式启动与词频统计测试
本实训对应的知识点
- 单元1 1.1.1 数据仓库简介 · 数据仓库基础与Hive入门
- 单元1 1.1.2 数据仓库的意义 · 数据仓库基础与Hive入门
- 单元1 1.1.3 数据仓库分层架构 · 数据仓库基础与Hive入门
- 单元1 1.1.4 数据仓库的数据模型结构 · 数据仓库基础与Hive入门
- 单元1 1.2.1 Hive概述 · 数据仓库基础与Hive入门
- 单元1 1.2.2 Hive架构 · 数据仓库基础与Hive入门
- 单元1 1.3.1 Hive的数据模型 · 数据仓库基础与Hive入门
- 单元1 1.3.2 Hive的数据类型 · 数据仓库基础与Hive入门
实训内容与步骤 依据原始实训文档整理,命令与配置均来自文档原文
Hadoop安装与配置(一)
1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示:
[hadoop@hadoop1 app]$ ls
hadoop-3.3.1.tar.gz2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示:
[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz3)为了方便管理多版本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/jdk4)修改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 workershadoop1
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.18)创建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.sh3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。
[hadoop@hadoop1 ~]$ jps10885 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 /test3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ vi words.log
hadoop hadoop hadoop
spark spark spark
flink flink flink4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test5)运行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/out6)查看作业运行状态。在浏览器中输入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.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 配置文件
vi /etc/chrony.conf1. 注释掉:
# pool 2.centos.pool.ntp.org iburst2. 加入新的的时间服务器(可添加多个时间服务器):
📷 图1-28 同步时间server ntp.aliyun.com iburst(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所示。
📷 图1-34 配置集群SSH免密登录(1)📷 图1-35 配置集群SSH免密登录(2)[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[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、hadoop32.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