Java Scala&;Spark:RAM使用率高,垃圾收集时间长,应用程序速度慢

Java Scala&;Spark:RAM使用率高,垃圾收集时间长,应用程序速度慢,java,scala,apache-spark,garbage-collection,Java,Scala,Apache Spark,Garbage Collection,给定一个2MB CSV(golub,请参阅)数据集和一些简单的机器学习,我发现了以下RAM用法: 根据spark中的“存储”选项卡,内存为54,9MB 应用程序界面 根据SizeEstimator.estimate() 根据spark应用程序界面中的“Executors”选项卡,执行器0为18.1GB 考虑到JVM开销,我完全同意前两点。但第3点可能是过度垃圾收集的原因,在应用程序UI冻结之前,垃圾收集会占用50%以上的时间,根据系统监视器,我只能在单个内核上看到活动 这一切都导致了一个令人痛苦

给定一个2MB CSV(golub,请参阅)数据集和一些简单的机器学习,我发现了以下RAM用法:

  • 根据spark中的“存储”选项卡,内存为54,9MB 应用程序界面
  • 根据
    SizeEstimator.estimate()
  • 根据spark应用程序界面中的“Executors”选项卡,执行器0为18.1GB
  • 考虑到JVM开销,我完全同意前两点。但第3点可能是过度垃圾收集的原因,在应用程序UI冻结之前,垃圾收集会占用50%以上的时间,根据系统监视器,我只能在单个内核上看到活动

    这一切都导致了一个令人痛苦的缓慢应用程序:在2MB数据集上训练一个随机forrest分类器60分钟没有结果

    我的
    SparkSession
    创建如下:

    val spark = SparkSession
        .builder()
        .master("spark://10.180.225.53:7077")
        .appName("spark performance eval")
        .config("spark.executor.memory", "32g")
        .config("spark.executor.cores", 30)
        .config("spark.default.parallelism", 3 * 30)
    
    在这之后,它只需要标准化,从文档中复制和粘贴来读取数据,转换数据并在其上训练模型


    设置:在同一台机器上安装spark master和一个spark slave,96GB内存,32核,在HP Z840上安装Ubuntu 16.04LTS。

    您似乎没有问过任何问题。如果没有你的应用程序实际运行的细节,很难看到有人能提供帮助。“标准、复制和粘贴”并不是一个真正的问题,更好的解决这个问题很容易,但在这种情况下,一个最小的、完整的和可验证的示例可能并不容易(它是Spark和Scala,而不是C),而且似乎有许多依赖关系正在幕后进行,导致我的问题(我没有完全掌握atm),这是你的问题,但我仍然认为提供更多信息将有助于人们提供答案。这是Spark,Scala并不能阻止它。