google dataproc 集群的优化
Optimization of the google dataproc cluster
我正在使用 dataproc 集群进行 spark 处理。我是整个 google 云的新手。在我们的应用程序中,我们有 100 个使用 dataproc 的作业。对于每个作业,我们都会产生新的集群并在作业结束后终止它。我正在使用 pyspark 进行处理。
- 使用稳定节点和可抢占节点的混合来降低成本是否安全?
- 提高 dataproc 集群性能的最佳软件配置是什么。我知道 hadoop/spark 集群的内部基础设施优化。它适用于 dataroc 集群还是需要其他东西?
- 当我们处理大约 150GB 大小的 avro 格式数据时,哪种实例类型最适合 dataproc 集群。
- 我已经尝试过 spark 的数据帧缓存/持久化以进行时间优化。但它并没有那么有用。有什么方法可以指示 spark 所有资源(内存、处理能力)都属于这个作业,以便它可以更快地处理它?
- 读取和写入 GCS 存储桶是否会影响性能?如果是,有什么办法可以优化吗?
感谢您在时间和价格优化方面的任何帮助。提前致谢。
谢谢
马尼什
Is it safe to use hybrid of stable node and pre-emptible nodes for the cost reduction?
太好了。我们已经在 300 多个节点集群上使用了它,当节点被抢占时,唯一的问题是 long-运行 集群,并且作业没有针对节点回收进行优化(没有 RDD 复制,巨大的 long-运行 DAG)。此外,Tez 不喜欢可抢占节点被回收。
Is it applicable as it is for dataroc cluster or something else is needed?
正确。但是 Google 存储驱动程序在操作延迟方面具有不同的特征(例如,FileOutputCommitter 在尝试进行递归移动或删除过度分区输出时可能会花费大量时间)和内存使用(写入缓冲区为 64 Mb与 HDFS 上的 4 Kb 相比)。
Which instance type is best suit for dataproc cluster when we are processing avro formatted data around 150GB of size.
只有性能测试可以帮助解决这个问题。
I have tried spark's dataframe caching / persist for time optimization. But it was not that useful. Is there any way to instruct spark that entire resources (memory, processing power) belong to this job so that it can process it faster?
确保使用动态分配,并且您的集群大小适合您的工作负载。 YARN UI 中的调度选项卡应该显示接近 100% 的利用率(如果不是,您的集群对于作业而言过大,或者您没有足够的分区)。在 Spark UI 中,最好让 运行 个任务接近核心数(否则,可能分区不够,或者集群过大)。
Does reading and writing back to GCS bucket have a performance hit? If yes, is there any way to optimize it?
从吞吐量的角度来看,GCS 还不错,但是在很多小文件的情况下,无论是从读取(计算拆分时)还是写入(当 FileOutputCommitter 时)的角度来看,它都差得多。由于较大的写入缓冲区大小,许多并行写入也会导致 OOM。
我正在使用 dataproc 集群进行 spark 处理。我是整个 google 云的新手。在我们的应用程序中,我们有 100 个使用 dataproc 的作业。对于每个作业,我们都会产生新的集群并在作业结束后终止它。我正在使用 pyspark 进行处理。
- 使用稳定节点和可抢占节点的混合来降低成本是否安全?
- 提高 dataproc 集群性能的最佳软件配置是什么。我知道 hadoop/spark 集群的内部基础设施优化。它适用于 dataroc 集群还是需要其他东西?
- 当我们处理大约 150GB 大小的 avro 格式数据时,哪种实例类型最适合 dataproc 集群。
- 我已经尝试过 spark 的数据帧缓存/持久化以进行时间优化。但它并没有那么有用。有什么方法可以指示 spark 所有资源(内存、处理能力)都属于这个作业,以便它可以更快地处理它?
- 读取和写入 GCS 存储桶是否会影响性能?如果是,有什么办法可以优化吗?
感谢您在时间和价格优化方面的任何帮助。提前致谢。
谢谢
马尼什
Is it safe to use hybrid of stable node and pre-emptible nodes for the cost reduction?
太好了。我们已经在 300 多个节点集群上使用了它,当节点被抢占时,唯一的问题是 long-运行 集群,并且作业没有针对节点回收进行优化(没有 RDD 复制,巨大的 long-运行 DAG)。此外,Tez 不喜欢可抢占节点被回收。
Is it applicable as it is for dataroc cluster or something else is needed?
正确。但是 Google 存储驱动程序在操作延迟方面具有不同的特征(例如,FileOutputCommitter 在尝试进行递归移动或删除过度分区输出时可能会花费大量时间)和内存使用(写入缓冲区为 64 Mb与 HDFS 上的 4 Kb 相比)。
Which instance type is best suit for dataproc cluster when we are processing avro formatted data around 150GB of size.
只有性能测试可以帮助解决这个问题。
I have tried spark's dataframe caching / persist for time optimization. But it was not that useful. Is there any way to instruct spark that entire resources (memory, processing power) belong to this job so that it can process it faster?
确保使用动态分配,并且您的集群大小适合您的工作负载。 YARN UI 中的调度选项卡应该显示接近 100% 的利用率(如果不是,您的集群对于作业而言过大,或者您没有足够的分区)。在 Spark UI 中,最好让 运行 个任务接近核心数(否则,可能分区不够,或者集群过大)。
Does reading and writing back to GCS bucket have a performance hit? If yes, is there any way to optimize it?
从吞吐量的角度来看,GCS 还不错,但是在很多小文件的情况下,无论是从读取(计算拆分时)还是写入(当 FileOutputCommitter 时)的角度来看,它都差得多。由于较大的写入缓冲区大小,许多并行写入也会导致 OOM。