在Spark手册中,建议在worker代码中使用共享静态资源(例如连接池).
手册中的示例:
dstream.foreachRDD { rdd =>
rdd.foreachPartition { partitionOfRecords =>
// ConnectionPool is a static, lazily initialized pool of connections
val connection = ConnectionPool.getConnection()
partitionOfRecords.foreach(record => connection.send(record))
ConnectionPool.returnConnection(connection) // return to the pool for future reuse
}
}
Run Code Online (Sandbox Code Playgroud)
在执行程序关闭之前需要释放/关闭静态资源时该怎么办?没有地方可以调用该close()功能.试过一个关机钩子,但它似乎没有帮助.
实际上我的工作进程当前变成了僵尸,因为我正在使用共享资源创建一个非deamon线程池(HBase异步客户端),这意味着JVM会一直挂起.
我正在使用驱动程序上调用的Spark Streaming graceful shutdown:
streamingContext.stop(true, true);
Run Code Online (Sandbox Code Playgroud)
编辑:
似乎Spark JIRA中存在一个问题,即处理同样的问题
我有一个在 AWS ECS 上运行的 Docker 容器。我不需要负载均衡器,因为容器旨在处理 websocket 连接。
https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/显示使用负载均衡器 DNS 名称到达容器。但由于我没有添加负载均衡器,所以我看不到到达容器的方法。
如何在没有负载均衡器的情况下与 ECS 上运行的 Docker 容器建立 Websocket 连接?
我有一个火花流工作在生产中运行1秒批次.我使用CDH 5.5 Spark 1.5.我们使用Kafka Create Directstream.我们启用了背压.我们不想起诉动态分配所以用固定数量的执行者执行的工作.
从下面的图像我可以看到这些是从13.50的调度延迟突然增加但在同一时间我没有在处理时间看到任何dealy.
有什么想法吗?