我运行的任何火花作业都将失败,并显示以下错误消息
17/06/16 11:10:43 WARN cluster.YarnScheduler:初始工作没有接受任何资源;检查群集UI以确保工作人员已注册并具有足够的资源
Spark版本是1.6,在Yarn上运行 .
我正在从pyspark发布工作 .
您可以从作业时间表中注意到它无限期地运行并且没有添加或删除任何资源 . 1
第一点是,如果有足够的资源,如纱线可用的节点,CPU和内存,它可以使用动态分配来创建具有适当的默认核心和内存分配的spark工作者 .
在我的情况下,我需要关闭动态分配,因为我的资源水平非常低 .
所以从pyspark我设置了以下值:
conf = (SparkConf().setAppName("simple") .set("spark.shuffle.service.enabled", "false") .set("spark.dynamicAllocation.enabled", "false") .set("spark.cores.max", "1") .set("spark.executor.instances","2") .set("spark.executor.memory","200m") .set("spark.executor.cores","1")
注意:这里设置的值基本上应该小于可用的实际资源 . 但是,此处太小的值可能会导致内存不足问题,或者在作业运行时导致性能问题变慢 .
The complete code gist of a sample job is available here
这个pyspark案例的另一个重要注意事项是Spark on Yarn可以在两种模式下运行
集群模式 - 火花驱动程序在spark主节点中运行
客户端模式 - 从运行交互式shell的客户端运行spark驱动程序 .
群集模式不适合以交互方式使用Spark . 需要用户输入的Spark应用程序(例如spark-shell和pyspark)需要Spark驱动程序在启动Spark应用程序的客户端进程内运行 .
客户端模式可以在环境中设置如下export PYSPARK_SUBMIT_ARGS='--master yarn --deploy-mode client pyspark-shell'
export PYSPARK_SUBMIT_ARGS='--master yarn --deploy-mode client pyspark-shell'
1 回答
第一点是,如果有足够的资源,如纱线可用的节点,CPU和内存,它可以使用动态分配来创建具有适当的默认核心和内存分配的spark工作者 .
在我的情况下,我需要关闭动态分配,因为我的资源水平非常低 .
所以从pyspark我设置了以下值:
注意:这里设置的值基本上应该小于可用的实际资源 . 但是,此处太小的值可能会导致内存不足问题,或者在作业运行时导致性能问题变慢 .
The complete code gist of a sample job is available here
这个pyspark案例的另一个重要注意事项是Spark on Yarn可以在两种模式下运行
集群模式 - 火花驱动程序在spark主节点中运行
客户端模式 - 从运行交互式shell的客户端运行spark驱动程序 .
群集模式不适合以交互方式使用Spark . 需要用户输入的Spark应用程序(例如spark-shell和pyspark)需要Spark驱动程序在启动Spark应用程序的客户端进程内运行 .
客户端模式可以在环境中设置如下
export PYSPARK_SUBMIT_ARGS='--master yarn --deploy-mode client pyspark-shell'