在我的spark streaming应用程序中,我有许多I/O操作,如codis、hbase等。我想确保每个executor中只有一个连接池,我如何才能优雅地做到这一点?现在,我分散地实现了一些静态类,这不利于管理。如何将它们集中到一个类中,比如xxContext,或者像SparkContext,需要我广播它吗?我知道广播大型只读数据集很好,但是这些连接池呢?Java或scala都可以接受。
发布于 2017-09-02 09:53:16
foreachPartition最适合
它的示例代码片段
val dstream = ...
dstream.foreachRDD { rdd =>
//loop through each parttion in rdd
rdd.foreachPartition { partitionOfRecords =>
//1. Create Connection object/pool for Codis, HBase
// Use it if you want record level control in rdd or partion
partitionOfRecords.foreach { record =>
// 2. Write each record to external client
}
// 3. Batch insert if connector supports from an RDD to external source
}
//Use 2 or 3 to write data as per your requirement
}https://stackoverflow.com/questions/46009763
复制相似问题