默认情况下,EMR似乎将Spark驱动程序部署到其中一个CORE节点,导致MASTER节点几乎未被利用。是否可以在MASTER节点上运行驱动程序?我试验过--deploy-mode
个参数无济于事。
这是我的实例组JSON定义:
[
{
"InstanceGroupType": "MASTER",
"InstanceCount": 1,
"InstanceType": "m3.xlarge",
"Name": "Spark Master"
},
{
"InstanceGroupType": "CORE",
"InstanceCount": 3,
"InstanceType": "m3.xlarge",
"Name": "Spark Executors"
}
]
这是我的配置JSON定义:
[
{
"Classification": "spark",
"Properties": {
"maximizeResourceAllocation": "true"
},
"Configurations": []
},
{
"Classification": "spark-env",
"Properties": {
},
"Configurations": [
{
"Classification": "export",
"Properties": {
},
"Configurations": [
]
}
]
}
]
这是我的步骤JSON定义:
[
{
"Name": "example",
"Type": "SPARK",
"Args": [
"--class", "com.name.of.Class",
"/home/hadoop/myjar-assembly-1.0.jar"
],
"ActionOnFailure": "TERMINATE_CLUSTER"
}
]
我将aws emr create-cluster
与--release-label emr-4.3.0
一起使用。
答案 0 :(得分:2)
设置驱动程序的位置
使用spark-submit,标志--deploy-mode可用于选择驱动程序的位置。
在调试并希望快速查看应用程序输出时,以客户端模式提交应用程序非常有用。对于生产中的应用程序,最佳做法是以群集模式运行应用程序。此模式为您提供在应用程序执行期间始终可用的驱动程序的保证。但是,如果您使用客户端模式并从EMR集群外部提交应用程序(例如本地,在笔记本电脑上),请记住驱动程序在EMR集群外部运行,并且驱动程序执行程序通信的延迟会更长
答案 1 :(得分:1)
我不认为这是浪费。在EMR上运行Spark时,主节点将运行Yarn RM,Livy Server以及您选择的其他应用程序。而且,如果以客户端模式运行,则大多数驱动程序也将在主节点上运行。
请注意,驱动程序可能比执行程序上的任务重,例如从所有执行程序收集所有结果,在这种情况下,如果驱动程序正在运行,则需要为主节点分配足够的资源。