Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

可插拔混洗和可插拔排序功能允许使用替代实现替换内置的混洗和排序逻辑。为此,示例用例是:使用HTTP以外的其他应用程序协议(例如RDMA)将数据从Map节点转换到Reducer节点;或将排序逻辑替换为启用散列聚合和Limit-N查询的自定义算法。

重要说明:可插拔混洗和可插拔排序功能是实验性的,不稳定。这意味着提供的API可能会更改并破坏Hadoop未来版本中的兼容性。

实施自定义随机播放和自定义排序

自定义洗牌实施需要org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.AuxiliaryService在NodeManagers和运行实现类org.apache.hadoop.mapred.ShuffleConsumerPlugin在减速运行任务的实现类。

Hadoop提供的默认实现可以用作参考:

  • org.apache.hadoop.mapred.ShuffleHandler
  • org.apache.hadoop.mapreduce.task.reduce.Shuffle

自定义排序实现需要在Mapper任务中运行的org.apache.hadoop.mapred.MapOutputCollector实现类,以及(可选,取决于排序实现)在Reducer任务中运行的org.apache.hadoop.mapred.ShuffleConsumerPlugin实现类。

Hadoop提供的默认实现可以用作参考:

  • org.apache.hadoop.mapred.MapTask $ MapOutputBuffer
  • org.apache.hadoop.mapreduce.task.reduce.Shuffle

组态

除了在服务于shuffle的NodeManagers中运行的辅助服务(默认为ShuffleHandler)之外,所有可插拔组件均在作业任务中运行。这意味着,可以基于每个作业对其进行配置。服务Shuffle的辅助服务必须在NodeManagers配置中进行配置。

作业配置属性(基于每个作业):

属性 默认值 说明
mapreduce.job.reduce.shuffle.consumer.plugin.class org.apache.hadoop.mapreduce.task.reduce.Shuffle 要使用的ShuffleConsumerPlugin实现
mapreduce.job.map.output.collector.class org.apache.hadoop.mapred.MapTask $ MapOutputBuffer 要使用的MapOutputCollector实现

也可以在mapred-site.xml中设置这些属性,以更改所有作业的默认值。

收集器类配置可以指定以逗号分隔的收集器实现列表。在这种情况下,映射任务将尝试依次实例化每个实例,直到实现之一成功初始化。例如,如果给定的收集器实现仅与某些类型的键或值兼容,则这很有用。

NodeManager配置属性,所有节点中的yarn-site.xml

属性 默认值 说明
yarn.nodemanager.aux服务 ...,mapreduce_shuffle 辅助服务名称
yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler 使用的辅助服务类
yarn.nodemanager.aux-services。%s.classpath 没有 本地目录,其中包括相关的jar文件以及所有依赖项的jar文件。我们可以指定单个jar文件,也可以使用/ dep / *在dep目录下加载所有jar。
yarn.nodemanager.aux-services。%s.remote-classpath 没有 jar文件的远程绝对或相对路径

从HDFS加载jar文件的示例:

<配置>
    <属性>
        <name> yarn.nodemanager.aux-services </ name>
        <value> mapreduce_shuffle,AuxServiceFromHDFS </ value>
    </ property>

    <属性>
        <name> yarn.nodemanager.aux-services.AuxServiceFromHDFS.remote-classpath </ name>
        <value> /aux/test/aux-service-hdfs.jar </ value>
    </ property>

    <属性>
        <name> yarn.nodemanager.aux-services.AuxServiceFromHDFS.class </ name>
        <value> org.apache.auxtest.AuxServiceFromHDFS2 </ value>
    </ property>
</ configuration>

从本地文件系统加载jar文件的示例:

<配置>
    <属性>
        <name> yarn.nodemanager.aux-services </ name>
        <value> mapreduce_shuffle,AuxServiceFromHDFS </ value>
    </ property>

    <属性>
        <name> yarn.nodemanager.aux-services.AuxServiceFromHDFS.classpath </ name>
        <value> /aux/test/aux-service-hdfs.jar </ value>
    </ property>

    <属性>
        <name> yarn.nodemanager.aux-services.AuxServiceFromHDFS.class </ name>
        <value> org.apache.auxtest.AuxServiceFromHDFS2 </ value>
    </ property>
</ configuration>

重要信息:如果除了默认的mapreduce_shuffle服务之外还设置了辅助服务,则应将新的服务密钥添加到yarn.nodemanager.aux-services属性中,例如mapred.shufflex。然后,定义相应类的属性必须是yarn.nodemanager.aux-services.mapreduce_shufflex.class