我尝试在我的本地Mac OS上运行一个火花工作,整个工作完成得很好,但这项工作还没有结束并挂在那里。
当Spark作业正常完成时,它会关闭所有生成的进程,并释放所有相关的端口号,并在其控制台中显示如下内容:
17/09/26 12:04:42 INFO SparkContext: Invoking stop() from shutdown hook
17/09/26 12:04:42 INFO SparkUI: Stopped Spark web UI at http://172.29.16.34:4040
17/09/26 12:04:42 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
17/09/26 12:04:42 INFO MemoryStore: MemoryStore cleared
17/09/26 12:04:42 INFO BlockManager: BlockManager stopped
17/09/26 12:04:42 INFO BlockManagerMaster: BlockManagerMaster stopped
17/09/26 12:04:42 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
17/09/26 12:04:42 INFO SparkContext: Successfully stopped SparkContext
17/09/26 12:04:42 INFO ShutdownHookManager: Shutdown hook called
17/09/26 12:04:42 INFO ShutdownHookManager: Deleting directory /private/var/folders/mc/fl1dm0jx48d086s5jsk18dtc0000gn/T/spark-088260a7-6c27-4dbf-878a-ec6a2efa14a3
我试着调试这个Spark工作的内容,最初我觉得有什么东西挂在那里,但是直到我在我的火花工作结束时放一条打印出来的线并打印出来的那条线,我感到困惑的是什么原因导致它在那里停留?
请帮忙吗?
我的火花:1.0.1
我的操作系统X:10.11.6
这是我的火花工作代码:
SparkConf sparkConf = new SparkConf();
SparkContext sparkContext = new SparkContext(sparkConf);
JavaSparkContext sc = new JavaSparkContext(sparkContext);
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", zkQuorum);
conf.set("zookeeper.znode.parent", zkZNodeParent);
JavaPairRDD<ImmutableBytesWritable, Result> hBasePairRdd = sc.newAPIHadoopRDD(conf, TableInputFormat.class, ImmutableBytesWritable.class, Result.class);
EmbeddedSolrServer server = solrManager.setupSolrServer(shardIndex);
谢谢!
实际上,我只是想通了。
感谢@shridharama戳我发布我的火花作业的一些示例源代码。 然后我基本上对我的代码进行了二进制搜索,以查看哪个部分导致它正常关闭。
然后我最终缩小到这一行:
EmbeddedSolrServer server = solrManager.setupSolrServer(shardIndex);
我们使用Spark作业来构建我们的solr索引,这个服务器进程永远不会停止。 那么,我很乐意添加这一行:
server.close();
我的火花工作在我的Mac上很好地退出。谢谢!
但是,我仍然不明白为什么在我的群集上运行时,这个完全相同的火花作业(相同的代码,只是不同的zookeeper配置)可以正常退出?
干杯!