首页 > 解决方案 > google dataproc 集群的优化

问题描述

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

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

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

谢谢

马尼什

标签: google-cloud-platformgoogle-cloud-dataproc

解决方案


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

那绝对没问题。我们已经在 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。


推荐阅读