gpt4 book ai didi

hadoop - Spark/Hadoop 作业未并行运行

转载 作者:可可西里 更新时间:2023-11-01 14:51:44 25 4
gpt4 key购买 nike

我想我遇到了初学者错误,但我真的不知道如何修复它,这让我抓狂。我有一个由 2 台机器组成的集群:

  1. 8GB 内存(6.9 可用),4 核,Win10:运行一个主机,一个工作机,它也是我运行 java 驱动程序的机器(来自 IntelliJ)
  2. 2GB RAM(1.3 可用),4 核,VM 上的 Ubuntu 16.04(在 VBox 中运行):运行一个 worker

我有一个网络类,我想通过从具有单个网络的列表开始,然后使用平面图将每个网络转换为 N 个新网络,在 for 循环中生成网络。之后我有一个过滤器和一个计数。步骤:

    JavaSparkContext sc = new JavaSparkContext(conf);
List<Network> data = Arrays.asList(new Network());
JavaRDD<Network> currentN = sc.parallelize(data);
for(int k=1;k<=10;k++) {
JavaRDD<Network> newN = currentN.flatMap(new MyFlatMap());
currentN = newN;
}
JavaRDD<Network> filteredNetworks = currentN.filter(new MyFilter());
System.out.println(filteredNetworks.count());

算法运行并输出正确的值。

但是通过比较应用在不同场景下的持续时间,我倾向于认为应用不是并行运行的:

使用两台机器的集群,总共有 2GB 内存和 8 个内核:持续时间 1.5 分钟

仅使用第二台机器 (VM Ubuntu)、1GB RAM、4 核的集群:持续时间 1.1 分钟

仅使用第一台机器(master、worker 和驱动程序)、1GB RAM、4 核的集群:持续时间 3.2 分钟

我的 spark UI 的屏幕截图:

活着的 worker Alive workers

首次运行的事件时间表(两台机器): Event timeline of first run

按执行器(两台机器)汇总指标 Metrics

我不知道为什么在虚拟机中运行 Ubuntu 的机器比主机(master、worker 和驱动程序)快,因为主机有更好的 CPU(i7 2.6GHZ 与 i3 1 相比,9GHZ).

但主要问题是为什么在一台机器上运行比在两台机器上运行更快?难道不应该反过来吗?我的猜测是 RDD 不是并行计算的。如果是这种情况,您能否解释一下为什么以及如何让它并行处理?

工作职责说明:

基本上,这是我想在 for 循环中实现的:

我从 1 Network 的 RDD 开始(它不是一个文件,它只是一个小类)。

在 for 循环中,我使用 flatMap 将 1 个网络转换为 10 个新网络。

迭代 0:currentN = 1 个网络 -> flatMap -> currentN = 10 个网络

迭代 1:currentN = 10 个网络 -> flatMap -> currentN = 100 个网络

..

迭代 9:currentN = 10^8 个网络 -> flatMap -> currentN = 10^9 个网络

正如我所说,我正在生成输入。我想并行生成,所以这意味着 flatMap 需要并行完成。为此,spark 应该:

  1. 带N个网络的RDD

  2. 将RDD分成8个partition for each core,每个partition有N/8 Networks

  3. 在每台机器上并行应用 flatMap,将每个 N/8 网络转换为 N/8*10 新网络。

  4. 在每台机器上重复这些步骤,并行使用 flatMap 进行生成。

  5. for 循环结束后,每台机器应该有 10^9/8 个网络。并行过滤,然后统计每台机器上每个RDD的元素个数,并行输出结果。

这是我想要实现的,但出于某种原因,for 循环中的 flatMap 生成仅在一台机器上完成。

最佳答案

Spark UI 的最后一个屏幕截图显示,在您的 8 个任务中,有 7 个以最长 37 毫秒的时间完成,而最长的任务至少运行了 46 秒。

如果您有一个任务运行 3 分钟而其他任务运行不到一秒,则您的分布式计算是不平衡的,因此您无法利用多台机器同时运行的优势,因为计算时间受最长限制任务。

这种行为通常是由不平衡操作/转换(join, ...)的不平衡大小的输入(1 Ko 的 7 个文件和 1 Go 的 1 个文件)引起的。

最后,如果不知道你的工作是什么,很难解释你的时间与 CPU,但一个可能的解释是你有一个数据密集型工作(而不是 CPU 密集型工作),因此瓶颈是硬盘驱动器(SSD在 CPU 最慢的机器上)。

关于hadoop - Spark/Hadoop 作业未并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42886401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com