可插拔混洗和可插拔排序功能允许使用替代实现替换内置的混洗和排序逻辑。为此,示例用例是:使用HTTP以外的其他应用程序协议(例如RDMA)将数据从Map节点转换到Reducer节点;或将排序逻辑替换为启用散列聚合和Limit-N查询的自定义算法。
重要说明:可插拔混洗和可插拔排序功能是实验性的,不稳定。这意味着提供的API可能会更改并破坏Hadoop未来版本中的兼容性。
自定义洗牌实施需要org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.AuxiliaryService在NodeManagers和运行实现类org.apache.hadoop.mapred.ShuffleConsumerPlugin在减速运行任务的实现类。
Hadoop提供的默认实现可以用作参考:
自定义排序实现需要在Mapper任务中运行的org.apache.hadoop.mapred.MapOutputCollector实现类,以及(可选,取决于排序实现)在Reducer任务中运行的org.apache.hadoop.mapred.ShuffleConsumerPlugin实现类。
Hadoop提供的默认实现可以用作参考:
除了在服务于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中设置这些属性,以更改所有作业的默认值。
收集器类配置可以指定以逗号分隔的收集器实现列表。在这种情况下,映射任务将尝试依次实例化每个实例,直到实现之一成功初始化。例如,如果给定的收集器实现仅与某些类型的键或值兼容,则这很有用。
属性 | 默认值 | 说明 |
---|---|---|
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文件的远程绝对或相对路径 |
<配置> <属性> <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>
<配置> <属性> <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。