我在学习hadoop时,发现减缩器的数量非常混乱:1) 异径管的数量与隔板的数量相同。2) 异径管数量为0.95或1.75乘以(节点数)(每个节点的最大容器数)。3) 还原数由mapred.reduce.tasks设置。4) 缩减器的数量最接近:块大小的倍数5到15分钟之间的任务时间*创建尽可能少的文件。我很困惑,我们是显式地设置减缩器的数量还是由mapreduce程序本身来完成的?如何计算减速器的数量?请告诉我如何计算减速机的数量。
nkoocmlb1#
1-异径管的数量与隔板的数量相同- False . 一个减速机可以在一个或多个分区上工作。但是一个选定的分区将在它启动时在减速器上完全完成。2-这只是可以为hadoop集群配置的最大缩减器的理论数量。这在很大程度上也取决于您处理的数据类型(决定了减速器的负载有多重)。3-the mapred-site.xml 配置只是对Yarn的一个建议。但是在内部,resourcemanager有自己的算法在运行,在运行中优化事情。因此,该值实际上不是每次运行的reducer任务数。4-这个看起来有点不切实际。我的块大小可能是128mb,每次我不能有128*5个最小数量的减速机。我相信这又是假的。没有固定数量的减速机任务可以配置或计算。这取决于实际有多少资源可供分配。
False
mapred-site.xml
a11xaf1n2#
你的工作可能需要也可能不需要减速器,这取决于你想做什么。当有多个reducer时,map任务对其输出进行分区,每个reduce任务创建一个分区。每个分区中可以有许多键(及其相关值),但是任何给定键的记录都在一个分区中。一个经验法则是针对每个减速机运行5分钟左右,并且至少产生一个hdfs块的输出值的减速机。太多的减速机和你结束了很多小文件。
voase2hg3#
partitioner确保来自多个Map器的相同的键被放到同一个reducer中。这并不意味着分区的数量等于减速器的数量。但是,可以使用job.setnumreducetasks(2)等作业示例指定驱动程序中的reduce任务数。如果在驱动程序中没有指定reduce任务的数量,那么它将从mapred.reduce.tasks中进行选择,mapred.reduce.tasks的默认值为1(https://hadoop.apache.org/docs/r1.0.4/mapred-default.html)也就是说,所有Map器的输出都将转到同一个减速机。另外,请注意,程序员将无法控制Map器的数量,因为它取决于输入分割,程序员可以控制任何作业的还原器数量。
x6yk4ghg4#
若在驱动程序中并没有显式指定usingbelowAPI,则reducer的数量是从我们正在处理的数据的大小内部计算出来的job.setnumreducetasks(x)默认情况下,对于1GB的数据,将使用一个缩减器。因此,如果您使用的数据少于1GB,并且没有特别设置reducer的数量,那么将使用1个reducer。同样,如果您的数据是10gb,那么将使用10reducer。您还可以更改配置,以指定更大或更小的大小,而不是1 gb。配置单元中用于设置减速器大小的属性为:配置单元.exec.reducers.bytes.per.reducer您可以通过在配置单元cli中触发set命令来查看此属性。partitioner只决定哪些数据将进入哪个reducer。
4条答案
按热度按时间nkoocmlb1#
1-异径管的数量与隔板的数量相同-
False
. 一个减速机可以在一个或多个分区上工作。但是一个选定的分区将在它启动时在减速器上完全完成。2-这只是可以为hadoop集群配置的最大缩减器的理论数量。这在很大程度上也取决于您处理的数据类型(决定了减速器的负载有多重)。
3-the
mapred-site.xml
配置只是对Yarn的一个建议。但是在内部,resourcemanager有自己的算法在运行,在运行中优化事情。因此,该值实际上不是每次运行的reducer任务数。4-这个看起来有点不切实际。我的块大小可能是128mb,每次我不能有128*5个最小数量的减速机。我相信这又是假的。
没有固定数量的减速机任务可以配置或计算。这取决于实际有多少资源可供分配。
a11xaf1n2#
你的工作可能需要也可能不需要减速器,这取决于你想做什么。当有多个reducer时,map任务对其输出进行分区,每个reduce任务创建一个分区。每个分区中可以有许多键(及其相关值),但是任何给定键的记录都在一个分区中。一个经验法则是针对每个减速机运行5分钟左右,并且至少产生一个hdfs块的输出值的减速机。太多的减速机和你结束了很多小文件。
voase2hg3#
partitioner确保来自多个Map器的相同的键被放到同一个reducer中。这并不意味着分区的数量等于减速器的数量。但是,可以使用job.setnumreducetasks(2)等作业示例指定驱动程序中的reduce任务数。如果在驱动程序中没有指定reduce任务的数量,那么它将从mapred.reduce.tasks中进行选择,mapred.reduce.tasks的默认值为1(https://hadoop.apache.org/docs/r1.0.4/mapred-default.html)也就是说,所有Map器的输出都将转到同一个减速机。
另外,请注意,程序员将无法控制Map器的数量,因为它取决于输入分割,程序员可以控制任何作业的还原器数量。
x6yk4ghg4#
若在驱动程序中并没有显式指定usingbelowAPI,则reducer的数量是从我们正在处理的数据的大小内部计算出来的
job.setnumreducetasks(x)
默认情况下,对于1GB的数据,将使用一个缩减器。
因此,如果您使用的数据少于1GB,并且没有特别设置reducer的数量,那么将使用1个reducer。
同样,如果您的数据是10gb,那么将使用10reducer。
您还可以更改配置,以指定更大或更小的大小,而不是1 gb。
配置单元中用于设置减速器大小的属性为:
配置单元.exec.reducers.bytes.per.reducer
您可以通过在配置单元cli中触发set命令来查看此属性。
partitioner只决定哪些数据将进入哪个reducer。