无法使用群集模式在EMR上运行spark应用程序

时间:2018-04-09 07:55:18

标签: amazon-web-services apache-spark yarn amazon-emr

我有一个火花应用程序,我试图在亚马逊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上运行而不会出现问题

1 个答案:

答案 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 ...