我有一个火花应用程序,我试图在亚马逊EMR上运行。但我的应用程序失败或进入运行模式并且永不退出,相同的代码在2-3分钟内在本地计算机上运行。我怀疑我创建火花会话的方式存在一些问题,我的主要内容是在
之下val spark = SparkSession.builder
.master("local[2]")
.appName("Graph Creation")
.config("spark.sql.warehouse.dir", "warehouse")
.config("spark.sql.shuffle.partitions", "1")
.getOrCreate()
如何构建spark会话以便它在我的本地计算机以及amazon EMR上运行而不会出现问题
答案 0 :(得分:1)
最好不要在EMR集群中使用local
主URL,因为您不会从使用从节点中受益。本地意味着spark将在启动它的系统上本地运行,并且不会尝试使用群集中的其他节点。 local
的主要目的是进行本地测试,每当您想要在群集中运行时,您应该选择资源管理器(yarn,mesos,spark-standalone或Kubernetes群集,有关详细信息,请参阅here)。
您可以将主URL作为spark-submit
命令的参数提供,这样,如果您在本地运行它,则传递'local',而对于EMR群集传递'yarn',例如。
val spark = SparkSession.builder
.appName("Graph Creation")
.config("spark.sql.warehouse.dir", "warehouse")
.config("spark.sql.shuffle.partitions", "1")
.getOrCreate()
然后在当地:
./bin/spark-submit --master local[2] ...
关于EMR:
./bin/spark-submit --master yarn ...