【问题标题】:Optimization of the google dataproc clustergoogle dataproc 集群的优化
【发布时间】:2018-11-11 14:42:34
【问题描述】:

我正在使用 dataproc 集群进行火花处理。我是整个谷歌云的新手。在我们的应用程序中,我们有 100 多个使用 dataproc 的作业。对于每个作业,我们都会生成新的集群并在作业结束后终止它。我正在使用 pyspark 进行处理。

  1. 混合使用稳定节点和抢占式节点来降低成本是否安全?
  2. 提高 dataproc 集群性能的最佳软件配置是什么。我知道 hadoop/spark 集群的内部基础架构优化。它适用于 dataroc 集群还是需要其他东西?
  3. 当我们处理大约 150GB 大小的 avro 格式数据时,哪种实例类型最适合 dataproc 集群。
  4. 我已经尝试过 Spark 的数据帧缓存/持久化以优化时间。但它并没有那么有用。有什么方法可以指示 spark 整个资源(内存、处理能力)都属于这个作业,以便它可以更快地处理它?
  5. 读写 GCS 存储桶是否会影响性能?如果是,有什么方法可以优化吗?

感谢您在时间和价格优化方面的任何帮助。提前致谢。

谢谢

马尼什

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataproc


    【解决方案1】:

    混合使用稳定节点和抢占节点来降低成本是否安全?

    那绝对没问题。我们已经在 300 多个节点集群上使用了它,唯一的问题是当节点被抢占时长时间运行的集群,并且作业没有针对节点回收进行优化(没有 RDD 复制,巨大的长时间运行的 DAG)。 Tez 也不喜欢抢占式节点被回收。

    它适用于dataroc集群还是需要其他东西?

    正确。然而,Google 存储驱动程序在操作延迟(例如,FileOutputCommitter 在尝试使用过度分区的输出进行递归移动或删除时可能会花费大量时间)和内存使用(写入器缓冲区为 64 Mb 对 4 Kb HDFS)。

    当我们处理大约 150GB 大小的 avro 格式数据时,哪种实例类型最适合 dataproc 集群。

    只有性能测试可以帮助解决这个问题。

    我已经尝试过 spark 的数据帧缓存/持久化以优化时间。但它并没有那么有用。有什么方法可以指示 spark 整个资源(内存、处理能力)都属于这个作业,以便它可以更快地处理它?

    确保使用动态分配,并且集群的大小适合您的工作负载。 YARN UI 中的调度选项卡应该显示接近 100% 的利用率(如果不是,您的集群对于作业来说过大,或者您没有足够的分区)。在 Spark UI 中,最好让正在运行的任务数接近核心数(如果不是,则可能是分区不够,或者集群过大)。

    读和写回 GCS 存储桶会影响性能吗?如果是,有什么办法可以优化吗?

    从吞吐量的角度来看,GCS 还不错,但对于许多小文件,无论是从读取(计算拆分时)还是写入(当 FileOutputCommitter 时)的角度来看,它都差很多。由于更大的写入缓冲区大小,许多并行写入也可能导致 OOM。

    【讨论】:

    • 关于建议的 100% CPU 利用率的问题。几乎没有限制使其难以访问,首先 - 我们的一些任务消耗大量 RAM,因此执行程序内存相对较高(20GB),其次 - 扩展内存实例很昂贵并且没有持续的使用折扣。你有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2020-12-07
    • 2016-04-06
    • 2017-02-07
    • 2016-06-08
    • 2017-02-16
    • 2018-10-21
    相关资源
    最近更新 更多