繁体   English   中英

如何增加hadoop中的地图任务数量以及如何获得hadoop mapreduce作业花费的总时间

[英]how to increase the number of map tasks in hadoop and how to get total time taken by hadoop mapreduce job

我有一个数据集,我正在尝试在hadoop中进行分析。 据我所知,它在少量数据中运行平稳。

第一个查询:
我想在大数据上对此进行测试,并找出增加文件大小后完成任务所需的时间。 如何获得完成任务需要多少秒? 是否有任何cmd行语法或类似语法?

第二查询:
in hdfs-core.xml文件中, dfs.replication设置为1。 它只是复制输入数据,还是对map reduce作业有影响?

第三查询:
现在,我有一个单节点hadoop集群。 如何知道给定输入文件生成的映射器的确切数量,以及如何更改编号。 映射器? 实际上,我想花点时间来完成不同编号下的任务。 映射器。

例如:首先,我想用10个映射器测试数据,然后是20个,依此类推,这样我就可以得到在不同编号下完成任务所需的时间。 映射器。

第三查询:

您可以玩块大小。

默认情况下,如果您未在hadoop 1.x中配置块大小,则其大小为64 MB

Hadoop 2.x,其128 MB

假设如果块大小为64 MB,则文件大小为1 GB,因此默认情况下,如果您为输入拆分大小配置了任何内容,则您的输入拆分大小将等于块大小,因此16个拆分大小为64 mb,每个分区都有1个GB和每个拆分装置的对应1个映射器将为1 Gb数据调用16个映射器

如果将块大小更改为128 mb,则对于256 mb块大小4将使用8个映射器,对于512 mb块大小将使用2个映射器。

第二个查询:复制因子可以提高您的map -reduce任务性能,因为如果数据可以正确地复制,则Task Tracker可以直接在该块上运行,否则必须从其他节点复制该块会占用网络带宽,从而降低性能。

第一个查询:

一旦任何作业在该作业结束时完成,它就会具有所有统计信息,例如使用了多少个映射器和多少个reducer,写入了多少字节以及执行了多长时间,并且具有所有详细信息。

第一查询
我不确定cmd语法,但是您可以在作业完成后使用java api本身。 例如:

job.waitForCompletion(false);
if(job.isSuccessful()){
   System.out.println("completionTime :" 
    + (job.getFinishTime() - job.getStartTime())/1000 + "s");
}

第二查询
这将影响工作绩效。 因为现在该工作将无法像复制因子3那样充分利用数据的局部性。必须将数据传输到具有可用插槽的taskTrackers中,从而导致更多的网络IO和性能下降。

第三查询
映射器的数量始终等于输入吐口的数量。 正统的方法是编写一个自定义的InputFormat ,它根据指定的标准来分散数据文件。 假设您有一个1GB的文件,并且想要5个映射器,只需让InputFormat进行200MB的拆分(在默认的64 MB块大小下将消耗3个以上的块)。

另一方面,使用默认的InputFormat并在提交作业之前将文件手动拆分为所需的映射器数。 为此,约束条件是每个子文件的大小应小于或等于块大小。 因此,对于5个映射器,您最多可以使用5 * 64 = 320MB的文件大小。

改变块大小的第三种方法可以解决这些问题,但是根本不建议这样做。 因为它要求群集每次都重新启动。

UPDATE
第三个查询最简单,也可能最好的解决方案是每个作业使用mapred.max.split.size配置。 要为1GB文件运行5张地图,在提交作业之前,请执行以下操作:

conf.set("mapred.max.split.size", "209715200"); // 200*1024^2 bytes        

很简单,哈。 再次有另一个属性mapred.min.split.size ,我仍然对其用法感到困惑。 SE职位可以在这方面为您提供帮助。

相反,在运行作业时,您也可以利用-D选项。 例如:

hadoop jar job.jar com.test.Main -Dmapred.map.max.split.size=209715200

注意:这些属性在Hadoop 2.5.0中已弃用。 看看是否正在使用它

@namanamu,
查询1
如果您使用单独的驱动程序类,则可以通过在long start = System.currentTimeMillis();之间添加主代码来使用Java计时器来了解它花费了多少时间long start = System.currentTimeMillis(); long stop = System.currentTimeMillis(); 并且花费的时间为(stop-start)/1000秒。

查询3 :当您使用hadoop jar myfile.jar通过命令行执行作业时,最终将找到所有属性,如no。 映射器,化简器,输入组,化简组和所有其他信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM