use*_*662 11 hadoop apache-spark
我的用例如下所述.
我在这里面临的问题是决定要在输入数据上应用的分区数.输入数据大小每次都在变化,硬编码特定值不是一种选择.只有当某些最佳分区应用于我必须执行大量迭代(试验和错误)的输入数据时,spark才能很好地执行.这不是生产环境中的选项.
我的问题:根据输入数据大小和可用的集群资源(执行程序,核心等等),是否有拇指规则来决定所需的分区数量?如果是,请指出我的方向.任何帮助深表感谢.
我在纱线上使用火花1.0.
谢谢,AG
来自Spark官方文档中的Tuning Spark的两个注释:
1-通常,我们建议群集中每个CPU核心有2-3个任务.
2- Spark可以有效地支持短至200毫秒的任务,因为它在多个任务中重用了一个执行程序JVM,并且任务启动成本低,因此您可以安全地将并行度提高到超过群集中的核心数.
这两个tumb规则可以帮助您估计分区的数量和大小.因此,拥有小任务(可以在几百毫秒内完成)会更好.
确定分区的数量有点棘手。Spark 默认情况下会尝试推断合理的分区数量。注意:如果您将 textFile 方法与压缩文本一起使用,那么 Spark 将禁用拆分,然后您将需要重新分区(听起来这可能是发生的情况?)。对于非压缩数据,当您使用 sc.textFile 加载时,您还可以指定最小分区数(例如 sc.textFile(path, minPartitions) )。
coalesce 函数仅用于减少分区数量,因此您应该考虑使用 repartition() 函数。
至于选择一个“好的”数字,您通常需要至少与并行执行器的数量一样多。已经存在一些逻辑来尝试确定“良好”的并行度,您可以通过调用 sc.defaultParallelism 来获取该值
| 归档时间: |
|
| 查看次数: |
5829 次 |
| 最近记录: |