YARN集群 和 MapReduce 原理及应用,69个经典大数据开发面试题和答案详解

8597 DataNode
8713 SecondaryNameNode
9294 Jps

node3=
[zhang@node3 etc]$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers
[zhang@node3 etc]$ jps
11990 ResourceManager
12119 NodeManager
12472 Jps
11487 DataNode


启动成功后,可以通过浏览器访问 ResourceManager 进程所在的节点 node3 来查询运行状态


截图如下:



![图片](https://img-blog.csdnimg.cn/img_convert/cc2c8c990aa3189fef03b7c22ac3064c.png)


## MapReduce


### 简介和原理



> 
> MapReduce 是一种分布式编程模型,最初由 Google 提出并在学术论文中公开描述,后来被广泛应用于大规模数据处理,尤其是 Apache Hadoop 等开源项目中实现了这一模型。MapReduce 的核心思想是将复杂的大量数据处理任务分解成两个主要阶段:Map(映射)阶段和 Reduce(归约)阶段。
> 
> 
> 


**Map(映射)阶段**:


* 将输入数据集划分为独立的块。
* 对每个数据块执行用户自定义的 map 函数,该函数将原始数据转换为一系列中间键值对。
* 输出的结果是中间形式的键值对集合,这些键值对会被排序并分区。


**Shuffle(洗牌)和 Sort(排序)阶段**:


* 在 map 阶段完成后,系统会对产生的中间键值对进行分发、排序和分区操作,确保具有相同键的值会被送到同一个 reduce 节点。


**Reduce(归约)阶段**:


* 每个 reduce 节点接收一组特定键的中间键值对,并执行用户自定义的 reduce 函数。
* reduce 函数负责合并相同的键值对,并生成最终输出结果。



> 
> 整个过程通过高度并行化的方式完成,非常适合处理 PB 级别的海量数据。由于其简单易懂的设计理念和强大的并行处理能力,MapReduce 成为了大数据处理领域的重要基石之一,尤其适用于批处理类型的分析任务,如网页索引构建、日志分析、机器学习算法实现等。
> 
> 
> 


下面通过一张使用 MapReduce 进行单词数统计的过程图,来更直观的了解 MapReduce 工作过程和原理



![图片](https://img-blog.csdnimg.cn/img_convert/4173d7185786c35ceb25367a7e8dd130.png)


### MapReduce 示例程序


在搭建好 YARN 集群后,就可以测试 MapReduce 的使用了,下面通过两个案例来验证使用 MapReduce


* 单词统计
* pi 估算



> 
> 在hadoop 安装目录下的 share/hadoop/mapreduce 目录下存放了一些示例程序 jar 包,
> 
> 
> 可以调用 hadoop jar 命令来调用示例程序
> 
> 
> 


具体步骤如下:


#### PI 估算案例


先切换目录到 安装目录/share/hadoop/mapreduce/ 下



[zhang@node3 ~]$ cd /opt/apps/hadoop-3.2.4/share/hadoop/mapreduce/
[zhang@node3 mapreduce]$ ls
hadoop-mapreduce-client-app-3.2.4.jar hadoop-mapreduce-client-shuffle-3.2.4.jar
hadoop-mapreduce-client-common-3.2.4.jar hadoop-mapreduce-client-uploader-3.2.4.jar
hadoop-mapreduce-client-core-3.2.4.jar hadoop-mapreduce-examples-3.2.4.jar
hadoop-mapreduce-client-hs-3.2.4.jar jdiff
hadoop-mapreduce-client-hs-plugins-3.2.4.jar lib
hadoop-mapreduce-client-jobclient-3.2.4.jar lib-examples
hadoop-mapreduce-client-jobclient-3.2.4-tests.jar sources
hadoop-mapreduce-client-nativetask-3.2.4.jar
[zhang@node3 mapreduce]$



> 
> 调用 jar 包执行
> 
> 
> hadoop jar hadoop-mapreduce-examples-3.2.4.jar pi 3 4
> 
> 
> 



[zhang@node3 mapreduce]$ hadoop jar hadoop-mapreduce-examples-3.2.4.jar pi 3 4
Number of Maps = 3 #
Samples per Map = 4
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Starting Job
2024-03-23 17:48:56,496 INFO client.RMProxy: Connecting to ResourceManager at node3/192.168.184.13:8032
2024-03-23 17:48:57,514 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for #…省略
2024-03-23 17:48:59,194 INFO mapreduce.Job: Running job: job_1711186711795_0001
2024-03-23 17:49:10,492 INFO mapreduce.Job: Job job_1711186711795_0001 running in uber mode : false
2024-03-23 17:49:10,494 INFO mapreduce.Job: map 0% reduce 0%
2024-03-23 17:49:34,363 INFO mapreduce.Job: map 100% reduce 0%

Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=354
File Output Format Counters
Bytes Written=97
Job Finished in 53.854 seconds
Estimated value of Pi is 3.66666666666666666667 # 计算结果


命令的含义



> 
> 这个命令的具体含义是:
> 
> 
> * `hadoop jar`: 命令用于执行 Hadoop 应用程序,这里的应用程序是指从 JAR 包 `hadoop-mapreduce-examples-3.2.4.jar` 中提取的 MapReduce 程序。
> * `pi`: 这是具体的示例程序名称,用于通过概率方法估算π值。
> * `2`: 这个数字代表实验的总样本数(也称为总投点数),意味着将会随机投掷2次点来估计π值。
> * `4`: 这个数字通常表示地图任务(map tasks)的数量,也就是说,计算过程将会被拆分为4个部分来并行执行。
> 
> 
> 


#### 单词统计案例



> 
> `hadoop-mapreduce-examples-3.2.4.jar` 是 Apache Hadoop MapReduce 框架的一部分,其中包含了多个演示 MapReduce 概念和功能的例子程序,其中一个经典例子就是 `wordcount`。
> 
> 
> `wordcount` 示例程序展示了如何使用 MapReduce 模型处理大规模文本数据,统计文本中每个单词出现的次数。当你在 Hadoop 环境中执行如下命令时:
> 
> 
> 
> ```
> hadoop jar hadoop-mapreduce-examples-3.2.4.jar wordcount input_path output_path
> ```
> 
> 这里发生了以下过程:
> 
> 
> 1. **input\_path**:指定输入数据的位置,通常是 HDFS 上的一个目录,该目录下的所有文件将作为输入数据源,被分割成各个映射任务(Mapper)处理。
> 2. **Mapper**:每个映射任务读取一段输入数据,并将其拆分成单词,然后为每个单词及其出现次数生成键值对 `<word, 1>`。
> 3. **Reducer**:所有的映射任务完成后,Reducer 对由 Mapper 发出的中间键值对进行汇总,计算出每个单词的总出现次数,并将最终结果输出到 **output\_path** 指定的 HDFS 目录下。
> 
> 
> 


#### 演示步骤如下:


##### 新建文件



> 
> 首先在 /opt/下新建目录 data 用来存放要统计的文件
> 
> 
> 


新建 word.txt 文件并输入内容如下:



hello java
hello hadoop
java hello
hello zhang java


具体命令如下:



[zhang@node3 opt]$ mkdir data
[zhang@node3 opt]$ cd data
[zhang@node3 data]$ ls
[zhang@node3 data]$ vim word.txt


##### 上传文件到hadoop



> 
> * hdfs dfs 命令
> * 新建 input 目录用来存放 word.txt 文件
> 
> 
> 



[zhang@node3 data]$ hdfs dfs -mkdir /input # 新建目录
[zhang@node3 data]$ hdfs dfs -ls / # 查看目录
Found 1 items
drwxr-xr-x - zhang supergroup 0 2024-03-23 16:52 /input
[zhang@node3 data]$ hdfs dfs -put word.txt /input # 上传文件到目录
[zhang@node3 data]$


##### 统计单词



> 
> hadoop jar hadoop-mapreduce-examples-3.2.4.jar wordcount /input /outputx
> 
> 
> hadoop jar 为命令
> 
> 
> hadoop-mapreduce-examples-3.2.4.jar 为当前目录下存在jar文件
> 
> 
> wordcount 为要调用的具体的程序
> 
> 
> /input 为要统计单词的文件所在的目录,此目录为 hadoop 上的目录
> 
> 
> /outputx 为输出统计结果存放的目录
> 
> 
> **注意:**/outputx 目录不能先创建,只能是执行时自动创建,否则异常
> 
> 
> 



[zhang@node3 mapreduce]$ hadoop jar hadoop-mapreduce-examples-3.2.4.jar wordcount /input /outputx
2024-03-23 18:11:55,438 INFO client.RMProxy: Connecting to ResourceManager at node3/192.168.184.13:8032
#…省略
2024-03-23 18:12:17,514 INFO mapreduce.Job: map 0% reduce 0%
2024-03-23 18:12:50,885 INFO mapreduce.Job: map 100% reduce 0%
2024-03-23 18:12:59,962 INFO mapreduce.Job: map 100% reduce 100%
2024-03-23 18:12:59,973 INFO mapreduce.Job: Job job_1711186711795_0003 completed successfully
2024-03-23 18:13:00,111 INFO mapreduce.Job: Counters: 54
File System Counters
FILE: Number of bytes read=188
FILE: Number of bytes written=1190789
FILE: Number of read operations=0
#…省略
HDFS: Number of write operations=2
HDFS: Number of bytes read erasure-coded=0
Job Counters
Launched map tasks=4
Launched reduce tasks=1
Data-local map tasks=4
Total time spent by all maps in occupied slots (ms)=125180
#…省略
Map-Reduce Framework
Map input records=13
Map output records=27
Map output bytes=270
Map output materialized bytes=206
#…省略
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=163
File Output Format Counters
Bytes Written=51
[zhang@node3 mapreduce]$


##### 查看统计结果



> 
> 先查看输出目录下的结果文件名
> 
> 
> 在 hdfs dfs -cat 查看内容
> 
> 
> 



[zhang@node3 mapreduce]$ hdfs dfs -ls /outputx # 查看输出目录下文件
Found 2 items
-rw-r–r-- 3 zhang supergroup 0 2024-03-23 18:12 /outputx/_SUCCESS
-rw-r–r-- 3 zhang supergroup 51 2024-03-23 18:12 /outputx/part-r-00000
[zhang@node3 mapreduce]$ hdfs dfs -cat /outputx/part-r-00000 # 查看内容
hadoop 3
hello 14
java 6
python 2
spring 1
zhang 1


### 常见问题


#### 错误1:


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/6ed06e632992efd9849af39c57cf5608.png)
![img](https://img-blog.csdnimg.cn/img_convert/bba2415bee8bbdca5af6af1334db8f25.png)
![img](https://img-blog.csdnimg.cn/img_convert/2f20fdb525cb100575ca6f7862c1ca70.png)
![img](https://img-blog.csdnimg.cn/img_convert/4378a0a98303bacc27bed92aff54c70b.png)
![img](https://img-blog.csdnimg.cn/img_convert/147d181885442aa5ca2f6cb9b9152407.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
![img](https://img-blog.csdnimg.cn/img_convert/3553e76268663734d5eb8d68cdf5188e.png)

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

8)]
[外链图片转存中...(img-zOtXLBOj-1712993843198)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**
[外链图片转存中...(img-L5arG8Ih-1712993843198)]

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值