我正在开发Spark的休息服务,它将用户查询作为输入,制定spark sql并在spark集群上执行它。这是我对JavaSparkContext和JavaSqlContext的假设:
1)他们都线程安全
2)我可以在整个应用程序中重用单个实例(Context!)
基于此,我在应用程序启动期间仅初始化这些变量的一个实例,然后尝试将它们重用于所有传入请求。
我可以按预期启动请求并获得结果但是我最近发现的是我的应用程序死了,如果它已经空闲了几分钟,但有以下异常。
11:49:50.475 [spark-akka.actor.default-dispatcher-14] ERROR o.a.s.s.c.SparkDeploySchedulerBackend- Application has been killed. Reason: Master removed our application: FAILED
11:49:50.477 [spark-akka.actor.default-dispatcher-14] ERROR o.a.s.scheduler.TaskSchedulerImpl- Exiting due to error from cluster scheduler: Master removed our application: FAILED
我错误的是我的任何一个假设导致我这个问题或一般的设计错误?
答案 0 :(得分:1)
您的假设是正确的。实际上,每个JVM只能运行一个SparkContext
。
答案 1 :(得分:0)
我得到的错误是网络错误。我们的公司集群拒绝通过VPN连接