版本

VM 15 Pro
Centos 7
Hadoop 2.6.5
FinalShell 3.9.2.2

步骤

1. 安装虚拟机、Centos,配置网络环境

  1. 创建虚拟机;
  2. 配置网络;
  3. 配置操作系统;
  4. 进入GUI界面配置;
  5. 配置静态网络并验证网络连通性;
  6. 使用FinalShell连接Centos

详细步骤:
VMWare上搭建Centos7并配置网络用FinalShell连接(详细图文教程)

2. 创建三台虚拟机并相互连通

(1)克隆虚拟机

先关闭虚拟机
在这里插入图片描述
鼠标右键单击Master虚拟机,点击管理里的克隆
在这里插入图片描述
点击下一步
在这里插入图片描述
在这里插入图片描述
创建完整克隆
在这里插入图片描述
完成克隆
在这里插入图片描述
再根据自己需求去调整Slave1的内存和磁盘大小

以此方式,再克隆出Slave2
在这里插入图片描述
参考文章:
虚拟机的克隆(带图详解)

(2)连通三台虚拟机网络

1)修改主机名,以Master为例
sudo vi /etc/hostname

在这里插入图片描述
Slave1和Slave2,分别修改为slave1和slave2

reboot重启,使主机名生效

2)根据设置的IP地址范围,规划网络

在这里插入图片描述
再进入centos中,修改配置主机配置文件
三个节点中都需要更改,以Master为例

[admin@master ~]$ sudo vi /etc/hosts

在这里插入图片描述
规划master、slave1和slave2的IP地址如上

再更改网络接口配置信息,三个节点中都需要更改,以master为例:

sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 

在这里插入图片描述
在Slave1和Slave2中的IPADDR分别改为192.168.44.102和192.168.44.103

再输入命令行重启网络服务:

sudo service network restart | systemctl restart network.service

验证宿主机和虚拟机之间的连通性,虚拟机上的DNS服务
在这里插入图片描述

在这里插入图片描述
正常连通,salve1和slave2的方式同上

再在FinalShell上设置三个主机的连接信息
在这里插入图片描述

3)关闭系统防火墙和内核防火墙

由于hadoop中的程序都是网络服务,需要监听端口,这些端口默认会被linux防火墙挡住。因此要把hadoop中的端口一个个打开,或者把防火墙关掉。由于都是内网,所以将三台虚拟机的防火墙直接全部关闭就行

  1. 永久关闭内核防火墙
    输入命令行sudo vi /etc/selinux/config
    在这里插入图片描述

  2. 先临时关闭防火墙
    sudo systemctl stop firewalld

  3. 再禁止开机启动防火墙(永久关闭)
    sudo systemctl disable firewalld

验证三台主机的连通性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三台主机网络连接正常

(3)SSH互信配置

1)三台虚拟机上生成密钥

输入su再输入密码,切换到管理员身份,进入到根目录cd ~

在三台虚拟机上生成密钥,输入ssh-keygen -t rsa ,三次回车,生成密钥
在这里插入图片描述

注: FinalShell可在下方的命令窗口里直接发送同一条命令,给三台虚拟机,进行相同指令操作。
在这里插入图片描述

2)Master上生成公钥(仅Master执行)

在/root/.ssh文件下生成id_dsa id_dsa.pub,在该文件下建立一个authorized_keys文件,将id_dsa.pub文件内容拷贝authorized_keys文件中,同时赋予该文件600权限“只有拥有者有读写权限”

[root@master .ssh]# cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
[root@master .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub
[root@master .ssh]# chmod 600 /root/.ssh/authorized_keys

资料拓展:
Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

3)复制其他节点公钥

再复制Slave1和Slave2中的公钥(仅Maser执行):

ssh slave1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
ssh slave2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

在这里插入图片描述
执行命令后,输入yes,再输入slave1的登录密码,执行Slave2时,同方式。

4)复制公钥到其他节点

再将Master上的公钥复制到Slave1和Slave2上

scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys

在这里插入图片描述
注: scp(secure copy)基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”

5)免密连接测试
ssh slave1 ip addr 
ssh slave2 ip addr

在这里插入图片描述

拓展资料:
如何在CentOS 7上设置SSH密钥

3.安装JDK环境

注: 若不是minimal(最小化)安装的,有可能出现openjdk已安装的情况,会导致到软件冲突,我们在这里先将openjdk进 行卸载。

(1)查询是否已有jdk文件

rpm -qa|grep java

在这里插入图片描述
最小化安装:仅安装系统关键部件,安装最基本的程序。使之可以运行,确保开机后可以进入系统而不崩溃,不安装其他任何可扩展软件。

(2)删除已有包

rpm -e --nodeps java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64

在这里插入图片描述
再次检查时,已被删除

(3)上传文件

将JDK文件jdk-8u172-linux-x64.tar.gz上传到虚拟机中,因/usr/local/src仅root用户可读写,为方便后续将上传的安装都放置在此,改为777权限(三台虚拟机共同执行):

[root@master admin]# chmod 777 -R /usr/local/src

然后上传jdk-8u172-linux-x64.tar.gz
在这里插入图片描述
解压文件至/usr/local/src

tar -zxvf /usr/local/src/jdk-8u172-linux-x64.tar.gz -C /usr/local/src

在这里插入图片描述
在这里插入图片描述
将JDK包复制给Slave1和Slave2

scp -r  /usr/local/src/jdk1.8.0_172   root@slave1:/usr/local/src/
scp -r  /usr/local/src/jdk1.8.0_172   root@slave2:/usr/local/src/

(4)配置环境变量

[root@master hadoop-2.6.5]# vim ~/.bashrc

注: 此时修改的为root下的.bashrc进行全局变量修改

在文件后加入

export JAVA_HOME=/usr/local/src/jdk1.8.0_172
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

在这里插入图片描述

再将环境变量赋值给Slave1和Slave2

[root@master admin]# scp ~/.bashrc root@slave1:~/
[root@master admin]# scp ~/.bashrc root@slave2:~/

在这里插入图片描述
重新载入环境

source  ~/.bashrc 

测试环境是否配置成功

java -version

在这里插入图片描述
JDK环境配置成功

4. 搭建hadoop2.6.5

(1)hadoop集群规划

MasterSlave1Slave2
HDFSNameNode、SecondaryNameNodeDataNodeDataNode
YARNResourceManagerNodeManagerNodeManager

(2)hadoop配置文件概述

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

  • 默认配置文件
要获取的默认文件文件存放在Hadoop的jar包中的位置
[core-default.xml]hadoop-common-2.6.5.jar/ core-default.xml
[hdfs-default.xml]hadoop-hdfs-2.6.5.jar/ hdfs-default.xml
[yarn-default.xml]hadoop-yarn-common-2.6.5.jar/ yarn-default.xml
[mapred-default.xml]hadoop-mapreduce-client-core-2.6.5.jar/ mapred-default.xml
  • 自定义配置文件
    core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

(3)上传hadoop文件

hadoop-2.6.5.tar.gz上传到/usr/local/src,打开目录,解压hadoop安装包

[root@master ~]$ cd /usr/local/src
[root@master src]$ tar zxvf hadoop-2.6.5.tar.gz 

在这里插入图片描述

(4)修改hadoop-env.sh

路径:/usr/local/src/hadoop-2.6.5/etc/hadoop

[root@master hadoop]$ vim hadoop-env.sh

修改为export JAVA_HOME=/usr/local/src/jdk1.8.0_172
在这里插入图片描述

(5)修改yarn-env.sh

[root@master hadoop]$ vim yarn-env.sh

修改为export JAVA_HOME=/usr/local/src/jdk1.8.0_172
在这里插入图片描述

(6)修改slaves

[root@master hadoop]# vim slaves

修改为slave1slave2
在这里插入图片描述

(7)修改core-site.xml(核心配置文件)

[root@master hadoop]# vim core-site.xml

修改为

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
-->
<!--参考地址 http://hadoop.apache.org/docs/r2.6.5/-->
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
                <description>指定HDFS中NameNode地址(用来指定默认的文件系统)</description>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/src/hadoop-2.6.5/tmp</value>
                <description>hadoop运行时产生临时文件的存放目录</description>
        </property>
</configuration>

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

[root@master hadoop]# vim hdfs-site.xml

修改为

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<!--参考地址 http://hadoop.apache.org/docs/r2.6.5/-->
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:9001</value>
                <description>secondaryNamenode地址和端口</description>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/src/hadoop-2.6.5/dfs/name</value>
                <description>保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata</description>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/src/hadoop-2.6.5/dfs/data</value>
                <description>存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块</description>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
                <description>block块副本数,默认值3</description>
        </property>
</configuration>

(9)配置mapred-site.xml(MapReduce配置文件)

[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vim mapred-site.xml

修改为

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--参考地址 mapred-site.xml-->
<!--http://hadoop.apache.org/docs/r2.6.5/-->
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
		<description>指定运行mapreduce的环境是yarn</description>
	</property>
	<!--hadoop历史服务器-->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>master:10020</value>
		<description>MR JobHistory服务器进程间通信地址</description>
	</property>
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>master:19888</value>
		<description>MR JobHistory服务器的用户界面地址</description>
	</property>
	<property>
		<name>mapreduce.jobhistory.done-dir</name>
		<value>/mr-history/done</value>
		<description>已执行完毕作业信息存储位置</description>
	</property>
	<property>
		<name>mapreduce.jobhistory.intermediate-done-dir</name>
		<value>/mr-history/tmp</value>
		<description>正在运行的作业信息存储位置</description>
	</property>
	<property>
		<name>yarn.app.mapreduce.am.staging-dir</name>
		<value>/mr-history/hadoop-yarn/</value>
		<description>MR作业在提交时所使用的临时目录, 是一个本地路径</description>
	</property>
	<property>
		<name>mapreduce.map.memory.mb</name>
		<value>2048</value>
		<description>调度器为每个map task申请的内存数,各Job也可以单独指定,如果实际使用的资源量超过该值,则会被强制杀死</description>
	</property>
	<property>
		<name>mapreduce.reduce.memory.mb</name>
		<value>2048</value>
		<description>调度器为每个reduce task申请的内存数,同map task,超出强制杀死</description>
	</property>
	<property>
		<name>mapreduce.job.reduce.slowstart.completedmaps</name>
		<value>0.8</value>
		<description>当map task完成80%时,为reduce申请资源,reduce开始进行拷贝map结果数据和做reduce shuffle操作,默认0.05</description>
	</property>
</configuration>

(10)配置yarn-site.xml(YARN配置文件)

[root@master hadoop]# vim yarn-site.xml 

打开文件后用gg跳转至文件首行,
再用dG指令清屏(dG为删除光标所在行以及其下所有行的内容;d为删除,G为跳转到文件末尾行;)
修改为

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--参考地址 yarn-site.xml-->
<!--http://hadoop.apache.org/docs/r2.6.5/-->
<configuration>
	<!--日志聚合相关-->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
		<description>开启日志聚合功能,开启后日志保存在hdfs上</description>
	</property>
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>86400</value>
		<description>聚合后的日志在hdfs上的保存时间,单位为秒</description>
	</property>
	<property>
		<name>yarn.log.server.url</name>
		<value>http://master:19888/jobhistory/logs</value>
		<description>日志聚合服务器URL</description>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
		<description>NodeManager上运行的附属服务,需配置成mapreduce_shuffle,才可运行MapReduce程序</description>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
		<value>org.apache.hadoop.mapred.ShuffleHandler</value>
	</property>
	<property>
		<name>yarn.resourcemanager.address</name>
		<value>master:8032</value>
		<description>RM 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序</description>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address</name>
		<value>master:8030</value>
		<description>RM 对ApplicationMaster暴露的访问地址。AM通过该地址向RM申请资源、释放资源</description>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address</name>
		<value>master:8035</value>
		<description>RM 对NodeManager暴露的地址,NM通过该地址向RM汇报心跳,领取任务</description>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address</name>
		<value>master:8033</value>
		<description>RM 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等</description>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address</name>
		<value>master:8088</value>
		<description>RM对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息</description>
	</property>
	<!-- 关闭虚拟内存检查-->
	<property>
		<name>yarn.nodemanager.pmem-check-enabled</name>
		<value>false</value>
		<description>是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认为true</description>
	</property>
	<property>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
		<description>是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true</description>
	</property>
</configuration>

(11)创建临时文件和文件目录

[root@master hadoop]# mkdir /usr/local/src/hadoop-2.6.5/tmp
[root@master hadoop]# mkdir -p /usr/local/src/hadoop-2.6.5/dfs/name
[root@master hadoop]# mkdir -p /usr/local/src/hadoop-2.6.5/dfs/data

根据之前配置中规划的路径,创建临时文件和目录

(12)配置hadoop环境变量

.bashrc 中添加hadoop环境变量

[root@master hadoop-2.6.5]# vim ~/.bashrc 

添加内容

export HADOOP_HOME=/usr/local/src/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin

在这里插入图片描述

(13)将文件赋值给其他节点

.bashrc文件复制到Slave1和Slave2上

[root@master hadoop-2.6.5]# scp -r ~/.bashrc root@slave1:~/
[root@master hadoop-2.6.5]# scp -r ~/.bashrc root@slave2:~/

在这里插入图片描述
刷新环境变量

source ~/.bashrc

在这里插入图片描述
将hadoop包复制到Slave1和Slave2上

scp -r /usr/local/src/hadoop-2.6.5 root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop-2.6.5 root@slave2:/usr/local/src/

在这里插入图片描述

5. 启动hadoop集群

(1)初始化Namenode

[root@master hadoop-2.6.5]# ./bin/hadoop namenode -format

第一次启动集群需要初始化(仅Master执行)
在这里插入图片描述
在这里插入图片描述
要保证过程不报错

(2)启动集群并检查是否正常启动

1)启动集群

在Master上启动集群

[root@master hadoop-2.6.5]# sbin/start-all.sh

正常启动:
在这里插入图片描述
出现上图为启动成功

* 踩坑点1:之前启动时报错

在这里插入图片描述
排查错误: 发现找不到slave2,但master和slave1启动正常,推测整体文件修改时应该没有大的共性错误,否则maser和slave1也无法正常启动,那么问题可能仅是在有修改有slave2内容时,填写的错误。而在整个修改过程中,仅有slaves文件涉及salve2,故问题可能在slaves

原因:进入/usr/local/src/hadoop-2.6.5/etc/hadoop/下的slaves文件中,发现把slaves写错成salve1,更改为slave1后,启动成功

2)查看服务进程
[root@master hadoop-2.6.5]# jps

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

* 踩坑点2: 输入jps时,显示jps命令无法找到

排查错误: 进入到java/bin输入jps,发现可正常显示进程服务,说明没有文件损失,可能为修改环境配置文件时错误。

原因: 查看环境配置文件,发现JAVA_HOME路径有内容敲错,修改后,可直接启动jps

注: sbin/start-dfs.sh为开启hdfs,sbin/start-yarn.sh为开启yarn

3)查看集群信息状态

Master执行

[root@master hadoop-2.6.5]# hadoop dfsadmin -report

在这里插入图片描述
上述两个命令可正常执行显示,则说明hadoop集群正常启动

(3)修改宿主机hosts文件

进入C:\Windows\System32\drivers\etc,修改hosts
在这里插入图片描述
修改完后,可在浏览器上输入master:8088直接访问

ResourceManager运行在主节点master上,可以Web控制台查看状态, 访问如下地址:
http://master:8088/

来源:
组件 :HDFS
节点 :NameNode
默认端口 :50070
配置 :dfs.namenode.http-address
用途说明 :http服务的端口

在这里插入图片描述

通过登录Web控制台,查看HDFS集群状态,访问如下地址:
http://master:50070/
在这里插入图片描述

参考文章:
hadoop 2.6中管理界面

Hadoop Web界面解读

(4)关闭hadoop

[root@master hadoop-2.6.5]# ./sbin/stop-all.sh 

在这里插入图片描述

Hadoop中目录介绍

bin:bin目录是Hadoop最基本的管理脚本和使用脚本所在的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。

sbin:存放的是我们管理脚本的所在目录,重要是对hdfs和yarn的各种开启和关闭和单线程开启和守护。

etc:存放一些hadoop的配置文件。

lib:该目录下存放的是Hadoop运行时依赖的jar包,Hadoop在执行时会把lib目录下面的jar全部加到classpath中。

logs:该目录存放的是Hadoop运行的日志,查看日志对寻找Hadoop运行错误非常有帮助。

include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。

libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。

share:Hadoop各个模块编译后的jar包所在的目录。

参考资料
hadoop目录介绍(各目录功能介绍)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐