文章目录

一,前置知识


Hadoop: 适合海量数据分布式计算(多台计算机并行处理数据)和分布式存储

hadoop的版本:
原生版:Apache-hadoop
发行版:CDH,HDP
在这里插入图片描述

  • Hadoop核心架构的发展历史
    在这里插入图片描述

    • MapReduce: 分布式计算(负责海量数据的分布计算)
    • HDFS(Hadoop Distributed File System): 分布式文件系统(负责海量数据的存储)
    • YARN: 集群资源的管理和调度

二,集群的结构


在这里插入图片描述

本文中Hadoop集群中主要含一台主节点(bigdata01)和两个从节点(bigdata02, bigdata03)


三,集群内主机名称和ip映射的配置情况


主机Hostname 静态ip
bigdata01 192.168.182.100
bigdata02 192.168.182.101
bigdata03 192.168.182.102

添加主机映射的方法
在这里插入图片描述

在这里插入图片描述

四, 集群部署详细步骤 (十个步骤)

1️⃣,集群内主从节点都要一一进行配置的基本步骤

注: 包括的设置选项有, 静态IP, 主机名, IP地址-主机名的映射, 关闭防火墙, 安装JDK和Hadoop并配置相应的环境变量

这里以bigdata01为例, (这一小节(4.1), 主从节点的配置方法是一样的, 但是bigdata02, 和 bigdata03两台从主机的静态ip, 和host映射要改成第三节表格中的形式噢!)

一. 配置静态IP

  • 首先cd跳转到网络配置文件所在的目录:
cd /etc/sysconfig/network-scripts  

在这里插入图片描述

由于centos版本的不同,此处网络配置文件名称会有所不同,此处为 ifcfg-en016777736(centos 7.0),还可能为 ens-33(centos 7.3)

  • 然后用vim修改网络配置如下:
    在这里插入图片描述

BOOTPROTO=static 意思为静态ip模式

另外,注意此处ip前三位应与虚拟机所在的子网保持一致
windows网络适配器Vmnet8中的默认网关和DNS服务器同样跟上面所配置的网关和DNS保持一致;
同时也要注意, 虚拟机的NAT设置中的网关与外部系统(windows系统)网络适配器中的网关,DNS 保持一致

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

二.设置Hostname , 添加IP地址-主机名的映射

vi /etc/hostname 

在这里插入图片描述

添加主机映射的方法
在这里插入图片描述

在这里插入图片描述

三. 关闭防火墙

在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安全的防火墙

  systeamctl status firewalld----查看防火墙状态   
  systemctl stop firewalld----暂时关闭防火墙  
  systemctl disable firewalld----关闭防火墙服务  

关闭防火墙后的状态:
在这里插入图片描述

四. 安装JDK,Hadoop以及配置相应的环境变量

(0). 删除centos自带的openJDK

[root@bigdata01]# rpm -qa | grep -i java
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

[root@bigdata01]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
[root@bigdata01l]# rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

[root@bigdata01]# java -version
-bash: /usr/bin/java: No such file or directory

我们也可以利用下面的这行命令一键删除OpenJDK

(1).下载Jdk1.8和Hadoop-3.2.0
Oracle下载 jdk-8u281-linux-x64.tar.gz
Apache下载 Hadoop-3.2.0.tar.gz

(2). 因为在工作中, 我们不一定有root用户的权限, 所以在以后的栗子中, 我们使用普通用户名win10 完成所有的操作.

  • 而为了能够正常使用系统级命令(通过sudo 暂时获取root权限), 我们需要做以下的设置:
    -通过 vi /etc/soduers 打开sudoers文件, 使用vim的搜索功能搜索/wheel, 在 %wheel这一行下面添加新的一行, 如下图框中所示:
    在这里插入图片描述

注意: win10 这一行不要直接放在root行下面, 因为所有用户都属于wheel组(如果我们发现普通用户不在wheel组该怎么办呢? 让root用户把他加入wheel组即可, 如下图所示),

  • 当你配置了 wi10用户具有免密功能并放在了上图所示的 root行下面时,
  • 在程序执行到 %wheel 行时, 该功能又被覆盖回需要密码, 所以 win10 要放到 %wheel这行下面.
  • 借助 usermod -G wheel 用户名 把win10加入wheel组.
    在这里插入图片描述

(3). 在/opt目录中创建 modulesoftware目录,并确保目录的所有用户名和所属组均为win10, 然后`解压jdk, hadoop的压缩包和hadoop到/module目录中,并改名以方便引用
在这里插入图片描述

 ##解压jdk,hadoop安装包并改名  
   tar -zxvf jdk-8u281-linux-x64.tar.gz    -C  /opt/module
   tar -zxvf hadoop-3.2.0       -C /opt/module
   mv jdk-8u281-linux-x64.tar jdk1.8    

(3). 通过vi /etc/profile配置jdk,hadoop的环境变量:

exprot JAVA_HOME=/data/soft/jdk1.8
export HADOOP_HOME=/data/soft/hadoop-3.2.0      
exprot PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
  • 注: 强烈推荐环境变量采用下面的写法, 方便记忆:
# JAVA_HOME configuration
export JAVA_HOME=/opt/module/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
####java编译器路径
export CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=${JAVA_HOME}/jre


# HADOOP_HOME configuration
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

(4). 使用 source /etc/profile 使刚修改的环境变量生效

对hadoop配置环境变量主要是方便使用其安装目录sbin或是bin目录下的脚本。

另外注意,另外两台子节点主机无需全部手动配置环境变量,只要解压的路径一致,只需通过scp命令复制 bigdata01的/etc/profile.d/my_env.sh 文件到bigdata02与bigdata03即可!(当然, 我们还是在后面直接克隆其他节点的主机比较省事儿, 这一段话可直接略过)

(5) 检查安装是否成功

检查java以及hadoop安装是否成功的方法: java -versionjavac -verision hadoop -version, 版本号一致则说明安装成功。
也可以通过echo $PATH 查看路径是否一致

在这里插入图片描述

[注意!]

到此, 主从结点都要进行的配置阶段完成, 如果此时主节点这一台主机已经完成以上的配置操作了, 而我们又不想再重复配置剩下的从节点, 我们可以通过克隆虚拟机的方式, 来得到从节点, 但是要注意:

从节点中的静态IP地址, 主机名, IP地址-主机名映射, 防火墙 一定要进行相应的修改哦!

强烈推荐: 配置环境变量的另一种方法: 使用 /etc/profile.d/

2️⃣, 配置Hadoop集群

Hadoop安装目录的结构
在这里插入图片描述

五. SSH的免密登录以及不同节点主机之间的文件同步方法(必会)

  1. 参见:SSH免密登录及在HADOOP集群中的应用

由于本文使用的是普通用户win10, 所以在实现免密登录方法一的时候, 注意.ssh目录是位于路径在 /home/win10/ 目录下, 切记注意!!!

  1. 参见: 大数据集群节点之间的文件或配置同步方法(集群分发脚本)

要注意的是: 我们在使用集群分发脚本去同步root用户所属的环境变量my_env.sh的时候, 要利用sudo进行提权操作, 上面参见的文章中是直接使用的root用户, 所以没有必要使用sudo, 但是本文中, 使用的是普通用户win10, 所以需要.

  • 另外, 在使用sudo之后, 我们的分发脚本必须带上完整的路径(绝对路径), 详见下面的解释:
    在这里插入图片描述
    参考链接
  • sudo /opt/etc/profile.d/my_env.sh
  • 最终的执行结果如下:
    在这里插入图片描述

六, 集群配置

1. 集群部署规划

注意:

  1. NameNode 和 SecondaryNameNode 不要安装在同一台服务器
  2. ResourceManager 也很消耗内存, 不要和NameNode, SecondaryNameNode 配置在同一台服务器上.
  • 集群规划如下:

    在这里插入图片描述

2. 配置集群(修改hadoop配置文件)

对Hadoop配置文件的说明:

Hadoop 配置文件分两类: 默认配置文件自定义配置文件

  1. 只有用户想修改某一默认配置值时, 才需要修改自定义配置文件, 更改相应的属性值;
  2. 默认配置文件相当于一个模版, 一个参考, 里面有所有提供的属性property及其说明, 当我们添加或修改自定义配置文件时, 可以先查看默认配置文件搞清楚要添加或修改的属性的含义, 再去编写自定义配置文件(注意自定义配置文件初始情况下是空的)
  1. 默认配置文件:
要获取的默认文件 文件存放在Hadoop的jar包中的位置
[core-default.xml] hadoop-coomon-3.2.0.jar/core-default.xml
[hdfs-default.xml] hadoop-hdfs-3.2.0.jar/hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-3.2.0.jar/yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-3.2.0.jar/mapred-default.xml
  1. 自定义配置文件

core-site.xml,hdfs-site.xml, mapred-site.xml, yarn-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/haoop路径上, 用户可以根据项目需求重新进行修改配置;


需要修改的hadoop配置文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers

注意: core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 四个配置文件放在$HADOOP_HOME/etc/hadoop 这个路径上. 用户可以根据项目需求重新进行修改配置;

(0). hadoop配置文件的路径

在这里插入图片描述

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

注意: fs.defaultFS的主机名需要和主节点(master)名保持一致

在这里插入图片描述

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

在这里插入图片描述

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

注意下图的一个小错误: aux-services 少了个s, 马虎的我害
在这里插入图片描述

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

在这里插入图片描述

(6). 分发本节点的配置文件到其余节点上

在这里插入图片描述

  • 检验其他节点的分发情况:
	cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

七, 群起集群

1. 修改workers

什么是workers? 在hadoop 3.x以前这个文件叫 slaves(对, 现在3.x以后他改名叫workers了), 但是作用还是一样的, 即workers(saves)由主机的列表组成,每台1行,用于说明数据节点(DataNode)。 这个文件供NameNode在集群执行和结束的时候进行读取.

注意: workers中, 主机名后面不允许出现空格, 每个主机名之间不允许出现空行.

(1). 修改(添加存储数据的结点DataNodes)

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

(2). 分发workers到其他节点进行同步:

在这里插入图片描述

2. 集群的开启, 验证, 关闭.

非常重要的一点说明:

  • 如果是集群是第一次启动, 需要在bigdata01(NameNode所在节点)格式化NameNode,
  • 注意: 格式化NameNode, 会产生新的集群id, 导致NameNode和DataNode的集群id 不一致, 集群找不到以往的数据. ———>所以如果集群在运行过程中报错(我们可以选择格式化), 在重新格式化NameNode 的时候, 一定要:
    • 先停止 NameNode 和 DataNode进程.
    • 再删除所有节点机器的 data 和 logs目录
    • 最后再进行格式化

(0) 格式化NameNode
hdfs namenode -format

没有报错就说明已经格式化成功了.

(1) 启动DFS
	start-dfs.sh

经验证, 此命令可在主节点, 从节点任意位置处执行, 整个hdfs相关的NN, 2NN, DN都会相应的启动
在这里插入图片描述

(2) 启动YARN: 要在配置了 ResourceManager的节点(bigdata02) 上
	start-yarn.sh

注意!!! , yarn相关的启动和停止命令必须在 ResourceManager 所在的节点才能正常运作在这里插入图片描述

(3) 验证集群: jps 以及 Web端查看 HDFS的NameNode, YARN的ResourceManager
  1. 使用jps查看节点上相应的进程启动情况, 正常情况下应该与 6.1小节中集群部署规划的进程相同;

在这里插入图片描述

  1. WEB端查看HDFS的 NameNodes (设置在bigdata01主机上, 开放的是9870端口)

在这里插入图片描述

  1. WEB端查看YARN的ResourceManager(设置在bigdata02主机上, 默认开放的是8088端口)

在这里插入图片描述

(4). 测试集群功能
  1. 文件的上传
    • 上传小文件, 大文件
      在这里插入图片描述
    • Web端查看
      在这里插入图片描述
  • 文件在节点上的存储位置
    -这是小文件 poem.txt
    在这里插入图片描述
    • 对于大文件, 可能会被分割存储, 我们可以拼接起来进行查看
      在这里插入图片描述
  1. 文件的下载

     hdfs dfs -get /dfs上的目录路径  /下载目的地路径
    

在这里插入图片描述
在这里插入图片描述
出现 permission denied 的解决办法

  1. 执行WordCount程序
    在这里插入图片描述
    在这里插入图片描述
(5). 关闭集群

在这里插入图片描述

#3. 提高效率:(把集群的开启/关闭, 验证集群编写到脚本中)

3.1 集群的启动/停止方式

各个模块(hdfs, yarn)分开停止或启动

  1. 整体启动/停止 HDFS模块

     start-dfs.sh / stop-dfs.sh
    
  2. 整体启动/停止 YARN模块
    start-yarn.sh/ stop-yarn.sh


各个服务组件(namenode, datanode等)逐一启动/停止

  1. 单个启动/停止 HFDS模块的组件

     hdfs --daemon start/stop namenode/datanode/secondarynamenode
    
  2. 单个启动/停止YARN模块的组件

     yarn --daemon start/stop nodemanager/resourcemanager
    

3.2 Hadoop集群一键启动/停机脚本(HDFS, YARN, HistoryServer的启动和停止): myHadoop.sh

➢ 编写myHadoop.sh脚本如下

#!/bin/bash
if [ $# -lt 1 ]
then
	echo "No Args Input..."
	exit ;
fi
case $1 in
	"start")
			echo " =================== 启动 hadoop 集群 ==================="
			echo " --------------- 启动 hdfs ---------------"
			ssh bigdata01 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
			echo " --------------- 启动 yarn ---------------"
			ssh bigdata02 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
			echo " --------------- 启动 historyserver ---------------"
			ssh bigdata01 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
	;;
	"stop")
			echo " =================== 关闭 hadoop 集群 ==================="
			echo " --------------- 关闭 historyserver ---------------"
			ssh bigdata01 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
			echo " --------------- 关闭 yarn ---------------"
			ssh bigdata02 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
			echo " --------------- 关闭 hdfs ---------------"
			ssh bigdata01 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
	;;
	*)
			echo "Input Args Error..."
	;;
esac

tips: 关于shell脚本编程的入门好文- Linu进阶-Shell编程入门上

➢ 保存后退出,然后赋予脚本执行权限

	chmod +x myhadoop.sh
  • 运行
    在这里插入图片描述
  1. 如果想要全局运行的话, 可以把脚本路径作为环境变量添加到/etc/profile.d/my_env.shetc/profile中去, 当然, 一定不要忘了 source /etc/profile
  2. 如果在别的节点机器上也想运行的话, 老样子, xsync myhadoop.sh进行分发即可.
    在这里插入图片描述
3.3 Hadoop集群一键验证集群进程脚本(jps 所有节点的整合): jpsall.sh

➢ 输入如下内容

#!/bin/bash
	for host in bigdata01 bigdata02 bigdata03
		echo =============== $host ===============
		ssh $host jps
	done

➢ 保存后退出,然后赋予脚本执行权限

	chmod +x jpsall.sh

在这里插入图片描述

➢ 1. 全局运行, 添加环境变量; 2. 其他节点运行, 分发此脚本
在这里插入图片描述
在这里插入图片描述

#4., 集群崩溃的处理方法

1、停掉所有进程(NameNode和DataNode所有进程)
2、删除每台机器hadoop-3.1.3下的data和logs
3、在NameNode配置机器上格式化:hdfs namenode -format
4、重新启动集群

详细处理方法步骤-参见此文章

八, 配置历史服务器

hadoop jobhistory记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下,默认情况下是没有启动的,需要配置完后手工启动服务。

  • 配置步骤如下:

1. 配置 mapred-site.xml 并分发同步

  • 在hadoop的安装目录下/etc/hadoop中输入vi mapred-site.xml, 添加下列的配置, 这里我们把历史服务器运行在bigdata01主机, 并提供19888端口给WEB端访问

在这里插入图片描述

  • 分发到其他的节点上, xsync mapred-site.xml.

在这里插入图片描述

2. 在配置的节点上启动历史服务器, 并验证是否启动成功

  • 在配置了历史服务器的节点上(此处为 bigdata01) 输入mapred --daemon start historyserver, 启动历史服务器
  • 输入jps, 查看 JobHistoryServer 进程是否存在
    在这里插入图片描述

3. 执行官方的WordCount示例, 然后查看 JobHistory

  1. 在hadoop安装目录内输入 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examplies-3.1.3.jar wordcount /input/wc.txt /output1
    在这里插入图片描述
  2. 查看历史服务器: bigdata01:19888
    在这里插入图片描述
  • 检验wordcount执行后的结果(HDFS web端(bigdata01:9870)查看输出目录的part文件)
    在这里插入图片描述

九, 配置日志的聚集

  • 日志聚集: 集群上的应用运行完成之后, 将程序运行日志信息上传到HDFS系统上.
  • 通过日志聚集功能, 我们可以很方便的查看到程序的运行情况, 方便开发调试.

注意: 开启日志聚集功能, 需要重新启动 NodeManager, ResourceManager 和 historyServer

在这里插入图片描述

  • 配置步骤如下:

1. 配置 yarn-site.xml 并分发同步

  • 在hadoop安装目录下配置vi etc/hadoop/yarn-site.xml
<!-- 开启日志聚集功能, 方便查看日志详细信息 -->
<property>  
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>  
</property>  
<!-- 设置日志聚集服务器的地址 -->
<property>
        <name>yarn.log.server.url</name>
        <value>http://bigdata01:19888/jobhistoryserver/logs</value>
</property>
<!-- 设置日志的保留时间为7-->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>
  • 分发
    在这里插入图片描述

2. 如果集群正在运行, 重启ResourceManager, NodeManager 和 HistoryServer

  • 在上面的操作中, 我们在 bigdata01上配置的 historyserver, 在bigdata02上配置的 resourceManager, 所以相应进程的停止和启动也应该在各自的主机上.
    在这里插入图片描述
    在这里插入图片描述

3. 执行一些操作(WordCount), 以便产生日志

  • 把第九步的Worcount示例重新执行一次即可(注意要删除已经生成了的输出目录)
  • 在hadoop安装目录内输入 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examplies-3.1.3.jar wordcount /input/wc.txt /output1

4. 查看日志

在这里插入图片描述

在这里插入图片描述

十, 集群各节点之前的时间同步(主要用于实际工作, 虚拟机集群不需要)

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期
和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,
导致集群执行任务时间不同步

1. 需求分析

找一台主机作为时间服务器, 集群中所有其他的主机与这台主机定时进行时间同步, 生产环境根据任务对时间的准确程度要求周期性同步. 在这里, 我们为了尽快看到效果, 采用一分钟更新一次.

在这里插入图片描述

2. 时间服务器的配置

(1)查看所有节点 ntpd 服务状态和开机自启动状态

	[atguigu@hadoop102 ~]$ sudo systemctl status ntpd
	[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
	[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd

(2)修改 hadoop102 的 ntp.conf配置文件

	[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf

修改内容如下

  • (a)修改 1(授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查
    询和同步时间)
	#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
	改为 
	restrict 192.168.182.0 mask 255.255.255.0 nomodify notrap
  • (b)修改 2(集群在局域网中,不使用其他互联网上的时间)
	server 0.centos.pool.ntp.org iburst
	server 1.centos.pool.ntp.org iburst
	server 2.centos.pool.ntp.org iburst
	server 3.centos.pool.ntp.org iburst
	为
	#server 0.centos.pool.ntp.org iburst
	#server 1.centos.pool.ntp.org iburst
	#server 2.centos.pool.ntp.org iburst
	#server 3.centos.pool.ntp.org iburst
  • (c)添加 3 ( 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中
    的其他节点提供时间同步 )
	server 127.127.1.0
	fudge 127.127.1.0 stratum 10

(3)修改 hadoop102 的/etc/sysconfig/ntpd 文件

	[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步)

	SYNC_HWCLOCK=yes

(4)重新启动 ntpd 服务

	[atguigu@hadoop102 ~]$ sudo systemctl start ntpd

(5)设置 ntpd 服务开机启动

	[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd

3. 其他机器配置(必须 root 用户)

(1)关闭所有节点上 ntp 服务和自启动

	[atguigu@hadoop103 ~]$ sudo systemctl stop ntpd
	[atguigu@hadoop103 ~]$ sudo systemctl disable ntpd
	[atguigu@hadoop104 ~]$ sudo systemctl stop ntpd
	[atguigu@hadoop104 ~]$ sudo systemctl disable ntpd

(2)在其他机器配置 1 分钟与时间服务器同步一次

	[atguigu@hadoop103 ~]$ sudo crontab -e

编写定时任务如下:

	 */1 * * * * /usr/sbin/ntpdate hadoop102

(3)修改任意机器时间

	[atguigu@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"

(4)1 分钟后查看机器是否与时间服务器同步

	[atguigu@hadoop103 ~]$ sudo date

附录一, Hadoop集群部署中常用的端口号和配置文件

在这里插入图片描述

附录二, Hadoop客户端节点

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

附录三, 在搭建集群时经常遇到的问题及其解决办法

版权声明:本文为sha-Pao-Zi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sha-Pao-Zi/p/16315122.html