如果我只有一个工作节点,处理文件需要多长时间?

How long does it take to process the file If I have only one worker node?

假设我有一个包含 25 个块的数据,复制因子为 1。映射器需要大约 5 分钟来读取和处理单个数据块。那么如何计算一个工作节点的时间呢? 15个节点呢?如果我们将复制因子更改为 3,时间会改变吗? 我真的需要帮助。

首先,我建议阅读一些关于这个问题的科学论文(Google Scholar 是一个很好的起点)。

现在讨论一下。从我最近的实验中我得出结论,处理时间与您要处理的数据量有很强的关系(有道理)。在我们的集群上,Mapper 读取一个 128MBytes 的块平均需要大约 7-8 秒。现在,为了预测整体执行时间,您需要考虑几个因素:

  1. Mapper产生多少数据,决定了Hadoop执行Shuffling所需的时间
  2. Reducer 在做什么?它会做一些迭代处理吗? (可能会很慢!)
  3. 资源的配置是什么? (允许多少个Mappers和Reducers在同一台机器上运行)
  4. 最后还有其他工作运行同时进行吗? (这可能会显着降低作业速度,因为您的 Reducer 插槽可能会被占用等待数据而不是做有用的事情)。

因此对于一台机器,您已经看到预测作业执行时间的任务的复杂性。基本上在我的研究期间,我能够得出结论,平均一台机器能够处理 20-50 MBytes/second(速率根据以下公式计算:总输入 size/total 工作 运行宁时间)。处理速率包括暂存时间(例如,当您的应用程序启动并将所需文件上传到集群时)。不同用例的处理速率不同,并且受输入大小的影响很大,更重要的是受映射器生成的数据量的影响(同样,这个值是针对我们的基础设施的,在不同的机器配置上你会看到完全不同的执行时间)。

当你开始扩展你的实验时,你会发现平均性能有所提高,但我再次从我的研究中得出结论,它不是线性的,你需要自己适应,对于你自己的基础设施模型近似于作业执行时间的各个变量。

只是为了给你一个想法,我将分享部分结果。在 1 个节点上执行确定用例时的速率为 ~46MBytes/second,对于 2 个节点,它是 ~73MBytes/second,对于 3 个节点,它是 ~85MBytes/second(在我的例子中,复制因子等于节点数)。

问题很复杂,需要时间、耐心和一些分析技巧才能解决。玩得开心!