在使用spark submit
命令在EMR集群上运行python脚本时,进程被卡住了10%(可以通过yarn application --list
看到),当我检查日志时,所有cores执行器都显示了以下类型的消息,因为最近出现了错误:
Could not find valid SPARK_HOME while searching ['/mnt1/yarn/usercache/hadoop/appcache/application_x_0001', '/mnt/yarn/usercache/hadoop/filecache/11/pyspark.zip/pyspark', '/mnt1/yarn/usercache/hadoop/appcache/application_x_0001/container_x_0001_01_000002/pyspark.zip/pyspark', '/mnt1/yarn/usercache/hadoop/appcache/application_x_0001/container_x_0001_01_000002']
代码在本地运行得很好,因为Spark安装在所有内核上,所以我无法找出导致此问题的原因以及如何解决此错误。除了Portuguese中的一篇帖子外,没有明确的答案,我找不到任何解决这个问题的帖子
最后,我发现导致此错误的原因是试图从运行在内核上且不属于主脚本的函数调用spark上下文对象,而该对象已在主脚本中创建。显然是下面的命令
创建新的SparkContext对象,即使它已在主节点上的主脚本中创建。因此,为了防止此问题,如果必须在非主脚本的脚本中使用sparkContext,则必须将其从主脚本显式导出/导入到副脚本(例如,作为函数的参数),以避免以下问题
相关问题 更多 >
编程相关推荐