Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark worker关机-如何释放共享资源_Apache Spark_Spark Streaming - Fatal编程技术网

Apache spark Spark worker关机-如何释放共享资源

Apache spark Spark worker关机-如何释放共享资源,apache-spark,spark-streaming,Apache Spark,Spark Streaming,在Spark手册中,建议在工作代码中使用共享静态资源(例如连接池) 示例来自: dstream.foreachRDD{rdd=> rdd.foreachPartition{partitionOfRecords=> //ConnectionPool是一个静态的、延迟初始化的连接池 val connection=ConnectionPool.getConnection() Records.foreach分区(记录=>connection.send(记录)) ConnectionPool.return

在Spark手册中,建议在工作代码中使用共享静态资源(例如连接池)

示例来自:

dstream.foreachRDD{rdd=>
rdd.foreachPartition{partitionOfRecords=>
//ConnectionPool是一个静态的、延迟初始化的连接池
val connection=ConnectionPool.getConnection()
Records.foreach分区(记录=>connection.send(记录))
ConnectionPool.returnConnection(connection)//返回池以便将来重用
}
}
在关闭执行器之前,当需要释放/关闭静态资源时,该怎么办?没有地方可以调用
close()
函数。尝试了一个关机挂钩,但似乎没有帮助

实际上,目前我的工作进程变成了僵尸,因为我使用的共享资源创建了一个非deamon线程池(HBase async client),这意味着JVM将永远挂起

我使用的是在驱动程序上调用的火花流:

streamingContext.stop(true,true);

编辑:

似乎Spark JIRA中已经存在一个问题,它正在处理相同的问题


想分享一些代码片段吗?我的实际代码太复杂了。但是让我们假设
ConnectionPool
有一个方法
close()
,需要在工作完成后调用该方法。什么时候调用它?在
close()
;阻塞直到所有连接返回,切勿松开连接。并在分区结束时调用它?就是这样,有了给定的信息,没错。但是我想跨多个批重用连接对象。为每个微批次打开一个新的连接是非常低效的。不,不,不。你可能已经仔细考虑过了,因为它太复杂了。但在批处理之间共享状态或资源(这也可能意味着在机器之间)听起来比低效更糟糕,与分布式计算形成对比。您可能过早地进行了优化。