0


Hadoop搭建(概述及环境搭建)详细版

1.Hadoop概述


  • Hadoop是一个由Apache基金会所开发的分布式系统基础架构
  • 主要结局,海量数据的存储和海量数据的分析计算问题。
  • 广义上来说,Hadoop通常是指一个更广泛的概念 — Hadoop生态圈在这里插入图片描述
2.Hadoop优势

  1. 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
  2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
  3. 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
  4. 高容错性:能够自动将失败的任务重新分配。
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架构概述

  1. ResourceManager(RM):整个集群资源(内存、CPU等)的老大
  2. NodeManager(NM):单个节点服务器资源老大
  3. ApplicationMaster(AM):单个任务运行的老大
  4. Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。在这里插入图片描述
6.MapReduce架构概述

MapReduce 能够将一个大任务分解成众多子任务,在多个节点上并行处理,然后汇总这些结果以完成原始任务。

MapReduce 模型主要包括两个主要阶段:Map 阶段和 Reduce 阶段。

  1. Map 阶段: - 在这个阶段,输入的数据集被分割成小块,这些小块被独立地处理。- Map 函数接收一个输入键值对,然后输出一组新的键值对。Map 函数可以并行执行,每个节点处理不同的数据块。- Map 函数的输出会被排序,使得具有相同键的所有值都聚集在一起,为 Reduce 阶段做准备。
  2. Shuffle 阶段: - 这不是 MapReduce 的核心组成部分,但它是一个重要的中间步骤,位于 Map 和 Reduce 之间。- 在 Shuffle 阶段,Map 输出的数据会被重新分布到不同的 Reduce 节点上。这是通过分区函数来实现的,它决定了哪些数据会被发送给哪个 Reducer。
  3. 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

主机名配置

  1. 修改主机名称
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
  1. 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上进行拷贝

在这里插入图片描述

  1. 配置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.完全分布式运行模式
  1. 准备3台客户机(关闭防火墙,静态IP,主机名称)
  2. 安装JDK
  3. 配置JDK环境变量
  4. 安装Hadoop
  5. 配置Hadoop环境变量
  6. 配置集群
  7. 单点启动
  8. 配置SSH
  9. 集群启动并测试集群
14.编写集群分发脚本 xsync

一. scp(secure copy)安全拷贝

  1. scp可以实现服务器与服务器之间的数据拷贝( from server1 to server2 )
#基本语法:scp   -r  $pdir/$fname$user@$host:$pdir/$fname
    命令  递归  要拷贝的文件路径/名称      目的地用户@主机:目的地路径/名称
  1. 前提:在hadoop102、hadoop103、hadoop104上都已经创建好/opt/module、/opt/software/两个目录,并且把这两个目录修改为atguigu:atguigu
sudochown atguigu:atguigu -R /opt/module
  1. 在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是将所有的文件都复制过去。

  1. 基本语法
rsync   -av       $pdir/$fname$user@host:$pdir/$fname
命令    选项参数    要拷贝的文件路径/名称    目的地用户@主机:目的地路径/名称

#选项说明: -a:归档拷贝  -v:显示复制过程

三.xsync集群分发脚本
循环复制文件到所有节点相同目录下

  1. 基本语法
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]]

  1. 切换到atguigu用户进入到家目录、ls -al 显示.shh目录,进入.shh目录
  2. 创建密钥(公钥、私钥)
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
  1. 将公钥发放到hadoop103、hadoop104上(三台机器互相发放公钥配置免密登录)
ssh-copy-id hadoop103
ssh-copy-id hadoop104
  1. 通过ssh测试免密登录
ssh hadoop103
ssh hadoop104
16.集群配置

目前集群状态:(三台机器的 JDK Hadoop都已经安装完成)
![[Pasted image 20240917163711.png]]

  1. 集群部署规划 NameNode和SecondaryNameNode不要安装在同一台服务器 ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机 器上 ![[Hadoop概述_集群部署规划.png]]
  2. 配置文件说明 Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需修改自定义配置文件,更改相应属性2.1默认配置文件 ![[Hadoop概述_Hadoop默认配置文件.png]] 2.2 自定义配置文件 core.site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行配置
  3. 配置集群注意:编辑时不要使用记事本,或者编辑时候删除注解,否则会因为注释导致格式不正确 (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 问题解决方


本文转载自: https://blog.csdn.net/weixin_44848436/article/details/143089590
版权归原作者 诗与南巷 所有, 如有侵权,请联系我们删除。

“Hadoop搭建(概述及环境搭建)详细版”的评论:

还没有评论