谷歌数据集群的优化

时间:2018-06-01 12:43:14

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

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

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

    由于

    和Manish

1 个答案:

答案 0 :(得分:2)

  

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

这绝对没问题。我们已经在300多个节点集群上使用了它,只有在节点被抢占时长期运行的集群才出现问题,并且未优化作业以考虑节点回收(没有RDD复制,大量长期运行的DAG)。此外,Tez不喜欢可抢占的节点被回收。

  

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

正确。但是,当涉及到操作延迟时,Google Storage驱动程序具有不同的特性(例如,FileOutputCommitter在尝试递归移动或使用超分区输出移除时可能会花费大量时间)和内存使用(写入缓冲区为64 Mb vs 4 Kb on HDFS)。

  

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

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

  

我已尝试使用spark的数据帧缓存/持久进行时间优化。但它并没有那么有用。有没有办法指示火花,整个资源(内存,处理能力)属于这个工作,以便它可以更快地处理它?<​​/ p>

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

  

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

从吞吐量的角度来看,GCS并不差,但是对于许多小文件来说情况要糟糕得多,无论是从阅读(计算拆分)到编写(当FileOutputCommitter)的角度来看。由于更大的写缓冲区大小,许多并行写操作也会导致OOM。