1.Hadoop概述
- Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
- 主要结局,海量数据的存储和海量数据的分析计算问题。
- 广义上来说,Hadoop通常是指一个更广泛的概念 — Hadoop生态圈。
2.Hadoop优势
- 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
- 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
- 高容错性:能够自动将失败的任务重新分配。
3.Hadoop的组成
- 在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大
- 在Hadoop2.x时代,增加了Yarn,Yarn只负责资源的调度,MapReduce只负责运算
- 在Hadoop3.x时代,组成上没有变化
4.HDFS概述
- NameNode(nn):存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据和校验和。
- Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份
5.Yarn架构概述
- ResourceManager(RM):整个集群资源(内存、CPU等)的老大
- NodeManager(NM):单个节点服务器资源老大
- ApplicationMaster(AM):单个任务运行的老大
- Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。
6.MapReduce架构概述
MapReduce 能够将一个大任务分解成众多子任务,在多个节点上并行处理,然后汇总这些结果以完成原始任务。
MapReduce 模型主要包括两个主要阶段:Map 阶段和 Reduce 阶段。
- Map 阶段: - 在这个阶段,输入的数据集被分割成小块,这些小块被独立地处理。- Map 函数接收一个输入键值对,然后输出一组新的键值对。Map 函数可以并行执行,每个节点处理不同的数据块。- Map 函数的输出会被排序,使得具有相同键的所有值都聚集在一起,为 Reduce 阶段做准备。
- Shuffle 阶段: - 这不是 MapReduce 的核心组成部分,但它是一个重要的中间步骤,位于 Map 和 Reduce 之间。- 在 Shuffle 阶段,Map 输出的数据会被重新分布到不同的 Reduce 节点上。这是通过分区函数来实现的,它决定了哪些数据会被发送给哪个 Reducer。
- Reduce 阶段: - Reduce 函数负责将 Map 阶段产生的中间键值对集合转换成更小的一组输出。- 对于每一个唯一的键,Reducer 收集所有相关的值,并且可能合并或以其他方式处理它们,最终产生一组键值对作为输出。- Reduce 的输出就是整个 MapReduce 作业的结果。
7.HDFS、Yarn、MapReduce三者之间的关系
- HDFS 和 MapReduce:MapReduce 依赖于 HDFS 存储其输入数据和输出结果。HDFS 的分布式特性允许 MapReduce 任务直接在数据所在的节点上执行,从而减少网络带宽消耗。
- YARN 和 MapReduce:YARN 提供了一个抽象层,使得 MapReduce 可以作为一个应用程序在上面运行。YARN 负责资源分配和调度,而 MapReduce 则专注于计算逻辑。
- HDFS 和 YARN:虽然 HDFS 和 YARN 是独立的组件,但是它们通常一起部署在一个集群中,因为 YARN 也需要存储一些状态信息,而 HDFS 可以提供这种持久化的存储服务。
8.大数据生态体系
9.虚拟机配置
10.IP和主机名配置
IP配置
BOOTPROTO=static
可以防止每次启动或登录 Linux 系统时网络接口通过 DHCP 获取一个可能变化的 IP 地址。
#配置IPvim /etc/sysconfig/network-scripts/ifcfg-ens33
# ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"#修改为静态,这系统将一直拥有相同的 IP 地址,固定IPDEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="933931d8-097f-4552-af43-1e504cd7a713"DEVICE="ens33"#接口名(设备、网卡)ONBOOT="yes"#系统启动的时候网络接口是否有效(yes/no)#IP地址IPADDR=192.168.10.100
#网关GATEWAY=192.168.10.2
#域名解析器DNS1=192.168.10.2
主机名配置
- 修改主机名称
vim /etc/hostname
hadoop100
2.配置Linux克隆主机名称映射hosts文件,打开/etc/hosts
vim /etc/hosts
#打开后添加以下内容192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
3.重启克隆机 hadoop102
reboot
4.安装epel-release
只有最小安装模式下需要安装工具,桌面版本不需要安装
yum install -y epel-release
5.net-tool工具包集合
yum install -y net-tools
6.vim编辑器
yum install -y vim
7.关闭防火墙,关闭防火墙开机自启
在企业开发时,通常单个服务器的防火墙是关闭的,公司整体对外会设置非常安全的防火墙
systemctl stop firewalld
systemctl disable firwalld.service
8.创建atguigu用户,并修改atguigu用户的密码
useradd atguigu
passwd atguigu
9.配置atguigu用户具有root权限,方便后期加sudo权限命令
vim /etc/sudoers
# 修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD:ALL
#注意:atguigu这一行不要直接放到root行下面,因为所有用户都属于wheel组,先配置了atguigu具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以atguigu要放到%wheel这行下面
10.卸载虚拟机自带的JDK
注意:如果是最小化安装不需要执行这一步(桌面版需要)
rpm-qa:查询所安装的所有rpm包
grep-i:忽略大小写
xargs-n1:表示每次只传递一个参数
rpm-e-nodeps:强制卸载软件
rpm -qa |grep -i java |xargs -n1 rpm -e --nodeps
11.重启虚拟机
reboot
11.克隆三台虚拟机
1.修改ifcfg-ens33
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="933931d8-097f-4552-af43-1e504cd7a713"DEVICE="ens33"ONBOOT="yes"#IP地址修改为对应的 102 103 104 如:192.168.10.102IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2
2.修改主机名
vim /etc/hostname
#修改为对应的 hadoop101 hadoop102 hadoop103
- hosts文件 由于在hadoop100中已经修改配置好该文件则不需要再进行修改
#hosts文件192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
4.测试网络是否连通
ping www.baidu.com
12.JDK安装
描述:在hadoop102上安装JDK,安装好后将hadoop103、104从hadoop102上进行拷贝
- 配置java环境
sudovim my_env.sh
#配置JAVAHOME全局变量#JAVA_HOMEexportJAVA_HOME=/opt/module/jdk1.8.0_212
exportPATH=$PATH:$JAVA_HOME/bin
#命令行刷新配置source /etc/profile
1.配置Hadoop环境
sudovim my_env.sh
#JAVA_HOMEexportJAVA_HOME=/opt/module/jdk1.8.0_212
exportPATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOMEexportHADOOP_HOME=/opt/module/hadoop-3.1.3
exportPATH=$PATH:$HADOOP_HOME/bin
exportPATH=$PATH:$HADOOP_HOME/sbin
#命令行刷新配置source /etc/profile
13.完全分布式运行模式
- 准备3台客户机(关闭防火墙,静态IP,主机名称)
- 安装JDK
- 配置JDK环境变量
- 安装Hadoop
- 配置Hadoop环境变量
- 配置集群
- 单点启动
- 配置SSH
- 集群启动并测试集群
14.编写集群分发脚本 xsync
一. scp(secure copy)安全拷贝
- scp可以实现服务器与服务器之间的数据拷贝( from server1 to server2 )
#基本语法:scp -r $pdir/$fname$user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
- 前提:在hadoop102、hadoop103、hadoop104上都已经创建好/opt/module、/opt/software/两个目录,并且把这两个目录修改为atguigu:atguigu
sudochown atguigu:atguigu -R /opt/module
- 在hadoop102,将在hadoop102中 /opt/module/jdk1.8.0_212 目录拷贝到hadoop103上
scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module
#在hadoop103上 将hadoop102/opt/module/* 拷贝至 hadoop104/opt/module/scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module/
二. rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的有点。
rsync和scp的区别:用rsync文件复制速度要比scp快,rsync只对差异文件做更新。scp是将所有的文件都复制过去。
- 基本语法
rsync -av $pdir/$fname$user@host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
#选项说明: -a:归档拷贝 -v:显示复制过程
三.xsync集群分发脚本
循环复制文件到所有节点相同目录下
- 基本语法
rsync -av /opt/module atguigu@hadoop103:/opt/
xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[atguigu@hadoop102 ~]$ echo$PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bin
(3)脚本实现
(a)在/home/atguigu/bin 目录下创建 xsync 文件
```shell
[atguigu@hadoop102 opt]$ cd /home/atguigu
[atguigu@hadoop102 ~]$ mkdir bin
[atguigu@hadoop102 ~]$ cd bin
[atguigu@hadoop102 bin]$ vim xsync
xsync文件脚本
注意:若xsync脚本更新后需要将 /usr/bin/的xsync脚本进行删除后重新cp拷贝xsync脚本到/sur/bin/目录下才可以执行
#!/bin/bash#1. 判断参数个数if[$# -lt 1]thenecho Not Enough Arguement!exit;fi#2. 遍历集群所有机器forhostin hadoop102 hadoop103 hadoop104
doecho====================$host====================#3. 遍历所有目录,挨个发送forfilein$@do#4. 判断文件是否存在if[ -e $file]then#5. 获取父目录pdir=$(cd -P $(dirname $file);pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh$host"mkdir -p $pdir"rsync -av $pdir/$fname$host:$pdirelseecho$file does not exists!fidonedone
(b)修改脚本 xsync 具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
(c)测试脚本
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
(d)将脚本复制到/bin 中,以便全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
(e)同步环境变量配置(root 所有者)
[atguigu@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
让环境变量生效
[atguigu@hadoop103 bin]$ source /etc/profile
[atguigu@hadoop104 opt]$ source /etc/profile
15.免密登录
![[Pasted image 20240917161925.png]]
- 切换到atguigu用户进入到家目录、ls -al 显示.shh目录,进入.shh目录
- 创建密钥(公钥、私钥)
ssh-keygen -t rsa
#三次回车成功创建公钥与私钥文件
私钥示例(id_rsa)
-----BEGIN RSA PRIVATE KEY-----
5eI+EH3YhE+nVuVmZ6+vIa0mI7Mas6oK
pILlarE/Eqj/h0LBbm+5DAP8Ca2w982rG26x2KRdNINYeNnPVFu5zacCgYEAwesc
2vpsooiNhP8GJdtoCUKuaoXKKnGyz/i6Hd+cZrfF1t8tMOxrYOy8Ro3XGoaGB9Yo
..................................................................................................................
-----END RSA PRIVATE KEY-----
公钥示例(id_rsa.pub)
ssh-rsa qdwq8KF0FYqwLGzFgYDrmn+O9rsLmvkMBvqRjmMV/xBB3MKl4DShJ35HjZoVxMgZhXJ2LVNQqTPXcC1Zeqy4oRQwMO3wGpXZnGh18NfHhlkPZ4B
...................................... atguigu@hadoop102
- 将公钥发放到hadoop103、hadoop104上(三台机器互相发放公钥配置免密登录)
ssh-copy-id hadoop103
ssh-copy-id hadoop104
- 通过ssh测试免密登录
ssh hadoop103
ssh hadoop104
16.集群配置
目前集群状态:(三台机器的 JDK Hadoop都已经安装完成)
![[Pasted image 20240917163711.png]]
- 集群部署规划 NameNode和SecondaryNameNode不要安装在同一台服务器 ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机 器上 ![[Hadoop概述_集群部署规划.png]]
- 配置文件说明 Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需修改自定义配置文件,更改相应属性2.1默认配置文件 ![[Hadoop概述_Hadoop默认配置文件.png]] 2.2 自定义配置文件 core.site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行配置
- 配置集群注意:编辑时不要使用记事本,或者编辑时候删除注解,否则会因为注释导致格式不正确 (1)核心配置文件 配置core-site.xml
cd$HADOOP_HOME/etc/hadoop
vim core-site.xml
#core-site.xml ---------------------
<!-- 指定 NameNode 的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop102:8020</value></property><!-- 指定 hadoop 数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.1.3/data</value></property><!-- 配置 HDFS 网页登录使用的静态用户为 atguigu --><property><name>hadoop.http.staticuser.user</name><value>atguigu</value></property>
(2)HDFS配置文件
配置hdfs-site.xml
vim hdfs-site.xml
<configuration><!-- nn web 端访问地址--><property><name>dfs.namenode.http-address</name><value>hadoop102:9870</value></property><!-- 2nn web 端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop104:9868</value></property></configuration>
(3)YARN配置文件
配置yarn-site.xml
vim yarn-site.xml
<!-- 指定 MR 走 shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定 ResourceManager 的地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop103</value></property><!-- 环境变量的继承 --><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value></property></configuration>
(4)MapReduce配置文件
配置mapred-site.xml
vim mapred-site.xml
<configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
(5)在集群上分发配置好的 Hadoop 配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
(6)去 103 和 104 上查看文件分发情况
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
4.群起集群
(1)配置workers
该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#-----workers------
hadoop102
hadoop103
hadoop104
同步所有节点配置文件
[atguigu@hadoop102 hadoop~]$ xsync /opt/module/hadoop-3.1.3/etc
去 103 和 104 上查看文件分发情况
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
17.群起集群
1.配置 workers
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#——---workers文件中内容改为----
hadoop102
hadoop103
hadoop104
同步所有节点配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
[root@hadoop102 hadoop]$ xsync workers
启动集群
(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式
化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找
不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停
止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式
化。)
注意:若格式化失败,查看hadoop102、103、104上面hadoop-3.1.3目录所有者、组权限是否为atguigu,若不是则修改权限到atguigu,且将hadoop102的hadoop-3.1.3下logs目录下日志清空,及data下所有数据清空,重新进行格式化
sudochown -R atguigu: atguigu hadoop-3.1.3/
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
当前服务器(Hadoop102)版本号
clusterID=CID-d1982f44-c2f0-41e0-6fb9-ca2d20134908
cTime=1747072502714storageType=NAME_NODE
blockpoolID=BP-1229086324-192.168.10.102-1727070502714
layoutVersion=-64
(2)启动HDF
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(2.1)查看hdfs Web页面
http://192.168.10.102:9870/
(3)在配置了 ResourceManager 的节点(hadoop103)启动 YARN
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(4)Web 端查看 HDFS 的 NameNode
浏览器中输入:http://hadoop102:9870(http://192.168.10.102:9870/)
查看 HDFS 上存储的数据信息
(5)Web 端查看 YARN 的 ResourceManager
浏览器中输入:http://hadoop103:8088 (http://192.168.10.103:8088/)
查看 YARN 上运行的 Job 信息
(6)集群基本测试
上传文件到集群
➢ 上传小文件
[atguigu@hadoop102 ~]$ hadoop fs -mkdir /input
[atguigu@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
执行 wordcount 程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutpu
问题:org.apache.hadoop.mapreduce.v2.app.MRAppMaster 问题解决方
版权归原作者 诗与南巷 所有, 如有侵权,请联系我们删除。