YARN集群 和 MapReduce 原理及应用

news2024/10/7 20:28:50

YARN集群模式

本文内容需要基于 Hadoop 集群搭建完成的基础上来实现

如果没有搭建,请先按上一篇:

<Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤>

搭建:https://mp.weixin.qq.com/s/zPYsUexHKsdFax2XeyRdnA

配置hadoop安装目录下的 etc/hadoop/yarn-site.xml

配置hadoop安装目录下的 etc/hadoop/mapred-site.xml

例如:/opt/apps/hadoop-3.2.4/etc/hadoop/

配置 yarn-site.xml

vim etc/hadoop/yarn-site.xml

添加内容如下:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node3</value>
    </property>
</configuration>

注意:上面node3 为自己规划的作为 resourcemanager 节点的主机名

配置 mapred-site.xml

[zhang@node3 hadoop]$ vi mapred-site.xml

添加内容如下:

<configuration>
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    <property>
          <name>yarn.app.mapreduce.am.env</name>
          <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.2.4</value>
    </property>
    <property>
          <name>mapreduce.map.env</name>
          <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.2.4</value>
    </property>
    <property>
          <name>mapreduce.reduce.env</name>
          <value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.2.4</value>
    </property>
</configuration>

注意:上面的 /opt/apps/hadoop-3.2.4 为自己 hadoop 的安装目录

同步配置

修改完成后,需要复制配置到其他所有节点

scp -r etc/ zhang@node1:/opt/apps/hadoop-3.2.4/

scp -r etc/ zhang@node1:/opt/apps/hadoop-3.2.4/

在 $HADOOP_HOME/etc/下

scp -r hadoop/yarn-site.xml zhang@node2:/opt/apps/hadoop-3.2.4/etc/hadoop/

也可以通过 pwd来表示远程拷贝到和当前目录相同的目录下

scp -r hadoop node2:`pwd`  # 注意:这里的pwd需要使用``(键盘右上角,不是单引号),表示当前目录

启动 YARN 集群

 # 在主服务器(ResourceManager所在节点)上hadoop1启动集群
 sbin/start-yarn.sh
 # jps查看进程,如下所⽰代表启动成功
==========node1===========
[zhang@node1 hadoop]$ jps
7026 DataNode
7794 Jps
6901 NameNode
7669 NodeManager

==========node2===========
[zhang@node2 hadoop]$ jps
9171 NodeManager
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 来查询运行状态

截图如下:

图片

MapReduce

简介和原理

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

Map(映射)阶段

  • 将输入数据集划分为独立的块。

  • 对每个数据块执行用户自定义的 map 函数,该函数将原始数据转换为一系列中间键值对。

  • 输出的结果是中间形式的键值对集合,这些键值对会被排序并分区。

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

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

Reduce(归约)阶段

  • 每个 reduce 节点接收一组特定键的中间键值对,并执行用户自定义的 reduce 函数。

  • reduce 函数负责合并相同的键值对,并生成最终输出结果。

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

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

图片

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:

[2024-03-15 08:00:16.276]Container exited with a non-zero exit code 1. Error file: prelaunch.err. Last 4096 bytes of prelaunch.err : Last 4096 bytes of stderr : Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your etc/hadoop/mapred-site.xml contains the below configuration: yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}

解决办法:

根据上面提示修改 mapred-site.xml ,配置 HADOOP_MAPRED_HOME,指向 hadoop 安装目录 即可。

错误2:

运行 Java 程序,调用 Hadoop 时,抛出异常

2024-03-16 14:35:57,699 INFO ipc.Client: Retrying connect to server: node3/192.168.184.13:8032. Already tried 7 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

原因:

连接node3的 yarn 时,没有成功,说明没启动 start-yarn.sh

错误3:

node2: ERROR: JAVA_HOME is not set and could not be found.

解决办法:

${HADOOP_HOME}/etc/hadoop/hadoop_en.sh 添加

JAVA_HOME=/opt/apps/opt/apps/jdk1.8.0_281

注意:不能使用 JAVA_HOME=${JAVA_HOME}

错误4:

[zhang@node3 hadoop]$ start-dfs.sh
ERROR: JAVA_HOME /opt/apps/jdk does not exist.

解决办法:

修改 /hadoop/etc/hadoop/hadoop-env.sh 文件

添加 JAVA_HOME 配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…

数据库-root密码丢失的重置方案(win11环境)

当在windows系统中安装的mysql由于操作不当&#xff0c;或者密码遗忘&#xff0c;今天测试了一下&#xff0c;可以用以下方法重置root的密码。 mysqlwindows环境root密码重置问题 在win10/11环境下mysql8密码遗忘后的重置密码方案。 停止mysql服务 查找windows中的mysql服务名称…

Windows下用CMake编译PugiXML及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 PugiXML是什么&#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口&#xff0c;能够高效地加载…

Spring IoCDI(2)

IoC详解 通过上面的案例, 我们已经知道了IoC和DI的基本操作, 接下来我们来系统地学习Spring IoC和DI的操作. 前面我们提到的IoC控制反转, 就是将对象的控制权交给Spring的IoC容器, 由IoC容器创建及管理对象. (也就是Bean的存储). Bean的存储 我们之前只讲到了Component注解…

C 练习实例97 - 读磁盘 写磁盘

题目&#xff1a;从键盘输入一些字符&#xff0c;逐个把它们送到磁盘上去&#xff0c;直到输入一个‘#’为止 在桌面新建一个hello.txt文件&#xff0c;内容示例&#xff1a; 代码&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {FILE *fp; //文…

PetaLinux 去除自动获取 IP 地址

问题&#xff1a;系统启动的时候会自动检测 IP 地址&#xff0c;如不需要这个功能&#xff08;该过程需耗时十几秒&#xff09;。可以自定义 IP 地址&#xff0c;去掉这一步。 操作步骤如下&#xff1a; 所有命令均需在非管理员模式下执行 1. 初始化 PetaLinux 运行环境 运行…

新手学python还是c?

考虑到个人情况和职业规划是非常重要的。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 Python作为初学者入门语言…

isaacgym 渲染黑屏

问题描述&#xff1a; isaacgym安装完IsaacGym_Preview_4_Package.tar.gz之后&#xff0c;运行python joint_monkey.py没有任何内容现实&#xff0c;但是终端还是正常输出信息。 环境是ubuntu22服务器&#xff0c;python3.8&#xff0c;nvidia Driver Version: 515.65.01 CUDA…

IP代理池赋能Python网络爬虫

文章目录 什么是IP代理池代理服务器IP代理池的作用IP代理池的构建IP代理池的管理 相关案例IP代理在爬虫中的运用IP代理在数据收集中的运用IP代理在反爬虫中的运用 结语 什么是IP代理池 IP代理池是一个存储了多个可用代理IP地址的资源池&#xff0c;用于在网络爬虫、数据采集、…

【实战项目】某考务成绩查询小程序

熊猫开发记录 – QQ&#xff1a;1040375575 【实战项目】某考务成绩查询小程序 一、项目功能二、项目涉及三、部分代码四、程序实现 一、项目功能 实现通过身份证号、手机号、手机验证码三层进行后台成绩获取&#xff0c;并输出提示。 二、项目涉及 项目涉及前端开发&#x…

B树,红黑树,LR,RL

红黑树来源于多叉树–>234树4阶B树 红黑树&#xff1a;每个节点不是红色就是黑色&#xff0c;根节点一定是黑色&#xff0c;叶子节点是黑色的&#xff0c;一个红色节点的子节点一定是黑色的&#xff0c;从根节点到根节点都会经过相同数量的黑色节点&#xff0c;从根节点到任…

RK3568 学习笔记 : 独立修改与编译 u-boot

前言 开发板&#xff1a;【正点原子】ATomPi-CA1 开发板&#xff0c;配置&#xff1a;RK3568&#xff0c;4GB DDRAM 64GB emmc 开发板资料给了 u-boot 与 Linux kernel 源码&#xff0c;尝试手动编译。 本篇记录 收到编译 RK3568 平台 u-boot 的方法 环境搭建 由于 RK 平台…

“探秘数据结构:栈的奇妙魔力“

每日一言 兰有秀兮菊有芳&#xff0c;怀佳人兮不能忘。 —刘彻- 栈 栈的概念及结构 栈(Stack) &#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守…

软件资源分享六:EPLAN Electric P8 2024 | Eplan 2024 中文版软件介绍+保姆级安装教程

原文链接&#xff1a;安装激活教程 EPLAN Electric P8 2024 | Eplan 2024 中文版软件介绍安装教程 EPLAN 2024是一款电气设计软件&#xff0c;它可以用于自动化系统的设计、文档编制和维护。EPLAN可以对电气设计的各个方面进行完整的支持&#xff0c;包括电气控制系统、机械设…

全栈的自我修养 ———— redux入门(看这么一篇就够了!!!)

redux时react中负责状态管理的工具 一、下载二、配置1、目录2、store配置3、redux中index.js配置4、启动类中index.js配置 三、使用1、调用store的数据2、调用store里面的方法3、改变store里面的值 一、下载 npm I reduxjs/toolkit react-redux二、配置 1、目录 modules里面…

Pygame基础9-射击

简介 玩家用鼠标控制飞机&#xff08;白色方块&#xff09;移动&#xff0c;按下鼠标后&#xff0c;玩家所在位置出现子弹&#xff0c;子弹匀速向右飞行。 代码 没有什么新的东西&#xff0c;使用两个精灵类表示玩家和子弹。 有一个细节需要注意&#xff0c;当子弹飞出屏幕…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…

【云呐】公司资产怎么盘点,如何做好资产盘点?

固定资产盘点是一个复杂的过程&#xff0c;需要充分的计划、准备和组织。确保盘点团队具备足够的专业知识和技能&#xff0c;并与相关部门和人员进行充分的沟通和协作。  盘点公司的固定资产是确保资产准确性并管理资产风险的重要过程。下面是一般性的指导步骤&#xff0c;供…

Outlook邮箱后缀是什么?如何改邮箱后缀?

Outlook邮箱后缀可以更改吗&#xff1f;微软有哪些后缀的邮箱&#xff1f; 对于许多刚接触Outlook邮箱的新手来说&#xff0c;了解Outlook邮箱后缀是必不可少的一步。那么&#xff0c;Outlook邮箱后缀究竟是什么呢&#xff1f;接下来&#xff0c;AokSend就来详细探讨一下这个问…

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现&#xff0c;主要从以下两个方面&#xff1a; 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途&#xff1a; sub&#xff1a;下标、sup&#xff1a;上标、var 变量 代码如下&am…