• 0301yarn&mapredude入门-hadoop-大数据学习


    1 MapReduce概述

    分布式计算是一种计算模型,它涉及将计算任务分解成多个子任务,并将这些子任务分配给多台计算机或节点以并行处理。这种计算模型的主要目标是提高计算性能、可伸缩性和可靠性,以处理大规模的数据和复杂的计算任务。分布式计算通常用于处理大数据、高性能计算(HPC)、网络服务和云计算等领域。

    以下是分布式计算的一些关键概念和特点:

    1. 并行计算: 在分布式计算中,任务可以并行执行,因为它们被分配给多个计算节点。这可以显著提高计算速度,特别是对于需要大量计算资源的任务。
    2. 节点通信: 分布式计算系统中的不同节点需要进行通信,以协调任务的执行和数据的传输。通信协议和机制对于系统的性能和可靠性至关重要。
    3. 负载均衡: 为了充分利用所有计算节点,分布式系统通常需要有效地分配任务,以确保负载均衡。这可以通过动态调整任务分配来实现,以应对不同节点的性能差异。
    4. 容错性: 分布式系统需要具备容错机制,以应对计算节点的故障或通信问题。数据冗余、故障检测和恢复机制是确保系统可靠性的重要组成部分。
    5. 数据分布和复制: 在分布式计算中,数据通常分布在不同的节点上,这可以提高数据访问速度和可用性。数据的复制和分片技术可确保数据的安全性和可靠性。
    6. 资源管理: 有效管理计算资源(例如,CPU、内存和存储)是分布式计算的关键任务。资源管理器用于分配和监视资源的使用。
    7. 编程模型: 分布式计算通常涉及使用特定的编程模型,例如MapReduce、Spark、MPI(消息传递界面)等,以编写分布式应用程序。
    8. 云计算: 云计算是一种分布式计算的变体,它提供了虚拟化资源(如虚拟机和存储)的访问,使用户能够根据需要动态扩展或缩减计算资源。

    分布式计算在众多领域中都有应用,包括大数据处理、科学研究、人工智能、金融建模、Web服务和网络应用。各种技术和工具,如Hadoop、Spark、Kubernetes和容器技术,已经涌现出来,用于支持分布式计算任务的管理和执行。这些技术使分布式计算更容易实现和操作,从而推动了分布式计算在现代计算中的重要性。

    MapReduce是一种编程模型和处理框架,用于处理和生成大规模数据集的计算。它最初由Google开发用于内部数据处理,并在后来的论文中公开介绍,启发了Hadoop等开源实现。MapReduce模型非常适用于并行化和分布式处理大数据集,它简化了并行计算的任务,使开发人员能够专注于问题的本质而不必担心底层的分布式细节。

    以下是MapReduce的基本概述:

    1. Map阶段: 在MapReduce中,输入数据集被划分成许多小的数据块。每个数据块由一个Map任务处理。Map任务的目标是将输入数据块转换为一系列键值对(key-value pairs)。这些键值对通常代表数据中的某种特征或属性,例如单词计数中的单词和出现次数。
    2. Shuffle和Sort阶段: 在Map阶段之后,MapReduce框架会将所有Map任务的输出按照键进行分组(shuffling),并将每个键值组合进行排序(sorting)。这确保了所有相同键的值都被传递给同一个Reduce任务。
    3. Reduce阶段: Reduce任务的目标是对相同键的值进行汇总或聚合。每个Reduce任务处理一个或多个键的值,并生成最终的输出结果。通常,Reduce任务执行某种数据聚合操作,如求和、求平均值、查找最大值等。

    MapReduce的关键特点和优势包括:

    • 可扩展性: MapReduce模型能够轻松适应大规模数据集,只需增加更多的计算资源(例如,更多的计算节点)即可提高性能。
    • 容错性: MapReduce框架具有内置的容错机制,能够处理计算节点故障,并重新分配任务以确保计算的正确性。
    • 编程模型简单: 使用MapReduce模型,开发人员只需实现Map和Reduce函数,无需处理并发编程或分布式系统的复杂性。
    • 适用于各种任务: MapReduce不仅适用于大规模数据处理,还可以用于分布式计算的各种任务,包括日志分析、数据挖掘、文本处理和机器学习等。

    尽管MapReduce是一个强大的分布式计算框架,但在处理某些类型的任务时,如迭代算法(例如图算法)和复杂数据处理流水线时,可能不是最高效的选择。因此,一些新的分布式计算框架,如Apache Spark,已经涌现出来,以提供更灵活和高性能的替代方案。不过,MapReduce仍然在许多大规模数据处理任务中广泛使用。

    2 YARN

    2.1 yarn概述

    Apache Hadoop YARN(Yet Another Resource Negotiator)是Hadoop生态系统的一个关键组件,用于集群资源的管理和作业调度。它被设计用于提高Hadoop集群的资源利用率,支持多种数据处理工作负载,并允许多个应用程序在共享的Hadoop集群上运行而不互相干扰。以下是YARN的主要概述:

    1. 资源管理: YARN的一个主要功能是集群资源的管理。它负责跟踪和监控集群中的所有可用资源,包括计算节点上的CPU、内存和存储等。这使YARN能够有效地分配资源给正在运行的应用程序,以满足它们的需求。
    2. 多租户支持: YARN允许多个应用程序共享同一集群,每个应用程序都可以使用集群资源的一部分。这种多租户支持允许不同团队或用户在同一Hadoop集群上运行自己的作业,而不会相互干扰。
    3. 作业调度: YARN包括一个调度器,负责决定哪个应用程序可以在集群上运行,以及它们可以使用的资源量。YARN支持不同的调度策略,例如先进先出(FIFO)、容量调度和公平调度,以满足不同类型工作负载的需求。
    4. 容错性: YARN具有一定程度的容错性,可以处理计算节点的故障。如果某个节点发生故障,YARN可以重新分配任务给其他节点,以确保应用程序的继续运行。
    5. 灵活性: YARN不仅限于Hadoop MapReduce作业。它还支持其他分布式计算框架,如Apache Spark、Apache Flink和Apache Tez等。这使得YARN成为一个通用的资源管理和作业调度平台。
    6. 可扩展性: YARN是一个高度可扩展的系统,可以管理大规模的集群,适应不断增长的工作负载需求。

    总之,YARN是Hadoop生态系统的关键组件之一,它提供了一个强大的资源管理和作业调度平台,使Hadoop集群更加灵活、高效和多用途。它有助于最大化集群资源的利用率,并允许不同类型的应用程序在共享的集群上同时运行,从而促进了大数据处理和分布式计算的发展。

    2.2 yarn与MapReduce关系

    MapReduce在YARN上运行: 在Hadoop集群上运行MapReduce作业时,YARN扮演着关键角色。当用户提交MapReduce作业时,YARN负责分配计算资源给Map和Reduce任务,并监控它们的执行。YARN还负责容错处理,如果某个节点上的任务失败,它会将任务重新分配到其他节点上。因此,YARN为MapReduce作业提供了必要的资源管理和调度支持。

    2.3 yarn架构

    1. ResourceManager (RM): ResourceManager是YARN架构的中央组件,负责整个集群的资源管理。它有两个主要子组件:
      • ResourceScheduler: ResourceScheduler负责集群中可用资源的调度。它接受应用程序的资源请求,并决定将资源分配给哪个应用程序。YARN支持不同的调度策略,包括FIFO(先进先出)、容量调度和公平调度等。
      • ApplicationManager: ApplicationManager负责应用程序的生命周期管理。每个正在运行的应用程序都有一个对应的ApplicationManager,负责与ResourceManager交互以获取所需的资源、跟踪任务的状态,并处理应用程序的完成和失败。
    2. NodeManager (NM): NodeManager是每个计算节点上的代理,负责监控该节点上的资源使用情况,并与ResourceManager通信。NodeManager的主要功能包括:
      • 跟踪节点上可用的CPU、内存和其他资源。
      • 启动和监视容器(Container),容器是运行应用程序任务的隔离环境。
      • 报告节点的资源利用情况和容器状态给ResourceManager。
    3. 容器(Containers): 容器是YARN中的基本执行单元,用于隔离和运行应用程序任务。容器封装了任务的执行环境,包括所需的CPU、内存和其他资源。NodeManager负责启动和监视容器的执行,ResourceManager负责管理容器的资源分配。
    4. 应用程序(Applications): 应用程序是用户提交到YARN集群上运行的工作负载。每个应用程序由一个或多个任务组成,这些任务以容器的形式运行在集群上。ResourceManager为每个应用程序分配资源,并跟踪应用程序的状态。
    5. 资源(Resources): 资源是计算节点上的计算能力、内存、存储等资源。YARN负责管理和分配这些资源,以满足应用程序的需求。
    6. 通信机制: 在YARN架构中,各个组件之间通过RPC(远程过程调用)和心跳机制进行通信。ResourceManager和NodeManager之间以及ResourceManager和ApplicationManager之间都有通信通道,用于协调资源分配和应用程序管理。

    2.4 辅助角色

    1. HistoryServer: HistoryServer是一个可选的组件,用于存储和提供已完成应用程序的历史信息。它允许用户查看先前运行的应用程序的日志、计数器和任务信息。这对于调试和性能分析非常有用。
    2. ResourceManager High Availability (RM HA): ResourceManager高可用性是一种配置选项,用于确保ResourceManager的高可用性。在启用RM HA时,有多个ResourceManager节点(通常是主备模式),如果一个ResourceManager节点出现故障,系统可以切换到备份节点,以确保集群的连续性。
    3. NodeManager启动器(NodeManager Launcher): NodeManager启动器是一个辅助进程,负责启动NodeManager。它在集群启动时启动NodeManager,以确保节点的正常运行。
    4. 日志聚合器(Log Aggregator): YARN的日志聚合器用于将应用程序和任务的日志从各个计算节点收集到一个中心位置,以便进行集中管理和检索。这有助于日志的持久性存储和方便的日志查看。
    5. 跨集群复制(Cross-Cluster Replication): 这个角色允许将应用程序和数据从一个YARN集群复制到另一个YARN集群,通常用于跨数据中心或多云环境中的数据复制和备份。
    6. 应用程序代理(Application Proxy): 应用程序代理是一个可选的组件,用于代理应用程序的状态和信息,以支持外部监控和管理工具与YARN的集成。

    3 MapReduce & YARN部署

    运用之前配置好的3台服务器及hdfs集群配置,可以参考下面连接或者自行百度

    3.1 集群规划

    有3台服务器,其中node1配置较高

    集群规划如下:

    主机角色
    node1ResourceManager
    NodeManager
    ProxyServer
    JobHistoryServer
    node2NodeManager
    node3NodeManager

    3.2 配置文件

    在node1机器 $HADOOP_HOME/etc/hadoop路径下配置如下内容,

    MapReduce配置文件如下:

    • mapred-env.sh

      # 设置jdk
      export JAVA_HOME=/export/server/jdk
      # 设置JobHistoryServer进程内存512M
      export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=512
      ## 设置日志级别INFO
      export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • mapred-site.xml

      <configuration>
        <property>
          <name>mapreduce.framework.namename>
          <value>yarnvalue>
          <description>MepReduce的运行框架设置为yarndescription>
        property>
        <property>
          <name>mapreduce.jobhistory.addressname>
          <value>node1:10020value>
          <description>历史服务器通讯端口node1:10020description>
        property>
        <property>
          <name>mapreduce.jobhistory.wabapp.addressname>
          <value>node1:19888value>
          <description>历史服务器web端口node1:19888description>
        property>
        <property>
          <name>mapreduce.jobhistory.intermediate-done-dirname>
          <value>/data/mr-history/tmpvalue>
          <description>历史信息在HDFS的记录临时路径description>
        property>
        <property>
          <name>mapreduce.jobhistory.done-dirname>
          <value>/data/mr-history/donevalue>
          <description>历史信息在HDFS中的记录路径description>
        property>
        <property>
          <name>yarn.app.mapreduce.am.envname>
          <value>HADOOP_MAPRED_HOME=$HADOOP_HOMEvalue>
          <description>MapReduce HOME 设置为HADOOOP_HOMEdescription>
        property>
        <property>
          <name>mapreduce.map.envname>
          <value>HADOOP_MAPRED_HOME=$HADOOP_HOMEvalue>
          <description>MapReduce HOME 设置为HADOOP_HOMEdescription>
        property>
        <property>
          <name>mapreduce.reduce.envname>
          <value>HADOOP_MAPRED_HOME=$HADOOP_HOMEvalue>
          <description>MapReduce HOME 设置为HADOOP_HOMEdescription>
        property>
      configuration>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
    • yarn-env.sh

      # 设置jdk
      export JAVA_HOME=/export/server/jdk
      # 设置HADOOP_HOME
      export HADOOP_HOME=/export/server/hadoop
      # 设置配置文件路径
      export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
      # 设置日志路径
      export HADOOP_LOG_DIR=$HADOOP_HOME/logs
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • yarn-site.xml

      <configuration>
        <property>
          <name>yarn.resourcemanager.hostnamename>
          <value>node1value>
          <description>ResourceManager 设置在node1description>
        property>
        <property>
          <name>yarn.nodemanager.local-dirsname>
          <value>/data/nm-localvalue>
          <description>NodeManager中间数据本地存储路径description>
        property>
        <property>
          <name>yarn.nodemanager.log-dirsname>
          <value>/data/nm-logvalue>
          <description>NodeManager数据日志本地存储路径description>
        property>
        <property>
          <name>yarn.nodemanager.aux-servicesname>
          <value>mapreduce_shufflevalue>
          <description>为MapReduce开启shuffle服务description>
        property>
        <property>
          <name>yarn.log.server.urlname>
          <value>http://node1:19888/jobhistory/logsvalue>
          <description>历史服务器URLdescription>
        property>
        <property>
          <name>yarn.web-proxy.addressname>
          <value>node1:8089value>
          <description>代理服务器主机和端口description>
        property>
        <property>
          <name>yarn.log-aggregation-enablename>
          <value>truevalue>
          <description>开启日志聚合description>
        property>
        <property>
          <name>yarn.nodemanager.remote-app-log-dirname>
          <value>/tmp/logsvalue>
          <description>程序日志HDFS的存储路径description>
        property>
        <property>
          <name>yarn.resourcemanager.scheduler.classname>
          <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulervalue>
          <description>选择公平调度器description>
        property>
      configuration>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47

      3.3 分发配置文件

      MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中。

      cd $HADOOP_HOME/etc/hadoop
      scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`
      scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:`pwd`
      
      • 1
      • 2
      • 3

      分发完成配置文件,就可以启动YARN的相关进程啦。

    4 体验

    4.1 集群启动命令介绍

    常用的进程启动命令如下:

    •一键启动YARN集群:

    $HADOOP_HOME/sbin/start-yarn.sh
    
    • 1

    •会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager

    •会基于workers文件配置的主机启动NodeManager

    •一键停止YARN集群:

    $HADOOP_HOME/sbin/stop-yarn.sh
    
    • 1

    •在当前机器,单独启动或停止进程

    $HADOOP_HOME/bin/yarn --daemon start|stop resourcemanager|nodemanager|proxyserver
    
    • 1

    •start和stop决定启动和停止

    •可控制resourcemanager、nodemanager、proxyserver三种进程

    •历史服务器启动和停止

    $HADOOP_HOME/bin/mapred --daemon start|stop historyserver
    
    • 1

    现在我们来启动hdfs和yarn,node1节点hadoop用户

    start-dfs.sh
    start-yarn.sh
    mapred --daemon start historyserver
    
    • 1
    • 2
    • 3

    jps查看node1节点运行java进程

    # node1
    2288 WebAppProxyServer
    1973 ResourceManager
    1416 DataNode
    1705 SecondaryNameNode
    2090 NodeManager
    1290 NameNode
    2605 JobHistoryServer
    # node2
    1267 NodeManager
    1141 DataNode
    # node3
    1266 NodeManager
    1140 DataNode
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.2 提交MapReduce任务到YARN执行

    提交自带的MapReduce程序到yarn执行

    在部署并成功启动YARN集群后,我们就可以在YARN上运行各类应用程序了。

    YARN作为资源调度管控框架,其本身提供资源供许多程序运行,常见的有:

    •MapReduce程序

    •Spark程序

    •Flink程序

    Spark和Flink是大数据后续的学习内容,我们目前先来体验一下在YARN上执行MapReduce程序的过程。

    •可以通过 hadoop jar 命令来运行它,提交MapReduce程序到YARN中。

    语法: hadoop jar 程序文件 java类名 [程序参数] ... [程序参数]
    
    • 1

    执行自带示例jar包 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar 这个文件内统计单词的程序

    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar workcount hdfs://node1:8020/gaogzhen/bigdata hdfs://node1:8020/output/wc1
    
    
    • 1
    • 2

    查看执行结果:

    [hadoop@node1 software]$ hdfs dfs -ls /output/wc1
    Found 2 items
    -rw-r--r--   3 hadoop supergroup          0 2023-09-04 19:37 /output/wc1/_SUCCESS
    
    [hadoop@node1 software]$ hdfs dfs -cat /output/wc1/*
    13413	1
    32323`	1
    fsl1	1
    gaogzhen	2
    goagzhen	1
    node1	3
    node2	2
    node3	1
    sdfasf	1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结语

    如果小伙伴什么问题或者指教,欢迎交流。

    ❓QQ:806797785

    参考链接:

    [1]大数据视频[CP/OL].2020-04-16.

    [2]0102阿里云配置3台ECS服务器-大数据学习[CP/OL].

    [3]0201hdfs集群部署-hadoop-大数据学习[CP/OL].

  • 相关阅读:
    python+django_vue旅游酒店预订出行订票系统pycharm项目lw
    【C语言刷题】双指针原地修改数组(力扣原题分析)
    HTML5新特性 day_04(8.10)地图、文件上传
    EMQX Enterprise 4.4.11 发布:CRL/OCSP Stapling、Google Cloud Pub/Sub 集成、预定义 API 密钥
    汽车之家车型_车系_配置参数数据抓取
    Java项目:鞋子商城系统(java+SSM+JSP+layui+bootstrap+echarts+Mysql)
    【vue2+onlyoffice】基础预览demo运行+问题解决
    Java学习Day023(封装,static关键字)
    【论文阅读】时序动作检测系列论文精读(2017年 下)
    2022年Google开发者大会纪录
  • 原文地址:https://blog.csdn.net/gaogzhen/article/details/132676309