The*_*ian 1 apache-spark google-cloud-dataproc
详细说明:
通常,在编写spark作业时,需要为不同的spark配置指定特定值,以便以最佳方式使用群集资源.我们可以在初始化SparkSession时以编程方式执行此操作:
SparkSession.builder .appName(SPARK_APP_NAME).config("spark.executor.memory","1G")
我想知道的是:使用Cloud Dataproc时我们还需要这样做吗?实际上,在创建Dataproc集群时,会初始化一个名为的属性文件cluster.properies并包含类似的值spark\:spark.executor.memory=2688m.所以,我想知道Dataproc是否会根据群集资源自动填充这些值,在这种情况下,我们不必手动/编程调整这些火花配置?
Dataproc确实提供了基于机器类型(甚至是自定义机器类型)和集群形状的智能默认值,这些默认值旨在成为最佳"一刀切"设置,以平衡每个JVM的更多线程的效率与共享资源池的限制每个JVM; 粗略地说,机器被分割成每台机器适合2个执行器,并且每个执行器被给予半个机器的线程(因此你希望2个执行器能够在n1-standard-8上并行运行4个任务,例如).
请记住,YARN会错误地报告多线程Spark执行器的 vcores,因此在Dataproc上运行大型Spark作业时,您可能只看到两个YARN"vcores",但是您可以通过查看确认所有核心确实被使用Spark AppMaster页面,ps在worker上运行,或在Dataproc云控制台页面上查看CPU使用情况.
但是,这些类型的设置从不普遍100%"最佳",Dataproc尚未根据您运行的实际工作负载或历史工作负载自动预测设置.因此,纯粹基于群集形状的任何设置对于在该群集上运行的所有工作负载而言都不是100%最佳.
简而言之,在Dataproc上你不应该担心在大多数情况下显式优化,除非你试图真正挤出每一盎司的效率,但同时你可以随时用你自己的方式覆盖Dataproc的设置如果需要,可以在创建群集或作业提交时使用属性.需要考虑以下几点:
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |