所以通常20个节点的集群提交作业处理3GB(200个分割)的数据大约需要30秒,实际执行大约需要1m。我想了解作业提交过程中的瓶颈是什么并了解下一个报价
每个 MapReduce 开销很大:启动/结束 MapReduce 作业需要时间
我知道的一些过程: 1. 数据拆分 2. jar 文件共享
关于 HDFS 和 M/R 的一些了解有助于理解这种延迟的事情:
如果您要处理内容为 1000 行的文件,那么您最好使用普通的文件读取和处理程序。在分布式系统上生成进程的 Hadoop 基础架构不会产生任何好处,只会增加定位包含相关数据块的数据节点、启动其上的处理程序、跟踪和收集结果的额外开销。
现在将其扩展到 100 Peta 字节的数据,与处理它们所需的时间相比,这些开销看起来完全微不足道。处理器(映射器和减速器)的并行化将在这里显示出它的优势。
因此,在分析 M/R 的性能之前,您应该首先查看对集群进行基准测试,以便更好地了解开销。
在集群上做一个无操作的 map-reduce 程序需要多少时间?
为此目的使用 MRBench :
要运行此程序,请尝试以下操作(检查最新版本的正确方法:
hadoop jar /usr/lib/hadoop-0.20/hadoop-test.jar mrbench -numRuns 50
令人惊讶的是,在我们的一个开发集群上,它是 22 秒。
另一个问题是文件大小。
如果文件大小小于 HDFS 块大小,则 Map/Reduce 程序的开销很大。Hadoop 通常会尝试为每个块生成一个映射器。这意味着如果你有 30 个 5KB 的文件,那么即使文件很小,Hadoop 最终也可能最终为每个块生成 30 个映射器。这是一种真正的浪费,因为与处理小文件所花费的时间相比,每个程序的开销都很大。
据我所知,没有一个瓶颈会导致作业运行延迟;如果有,早就解决了。
有许多步骤需要时间,而且过程缓慢是有原因的。我将尝试列出它们并估计我可以:
我已经看到了类似的问题,我可以在以下步骤中说明要破解的解决方案:
尝试使用数据节点和名称节点:
尝试安装低版本的 hadoop (hadoop 2.5.2),它在两种情况下都有效,并且在命中和试验中都有效。