在我的 Spark Streaming 应用程序中,我有很多 I/O 操作,例如 codis、hbase 等。我想确保每个 executor 中只有一个连接池,我该如何优雅地做到这一点?现在,我分散实现了一些静态类,这不利于管理。如何将它们集中到一个类中,比如 xxContext,一些类似于 SparkContext,需要我广播吗?我知道广播大型只读数据集很好,但是这些连接池呢?Java 或 Scala 都可以接受。
问问题
2286 次
1 回答
1
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
}
检查这个:使用foreachRDD的设计模式
于 2017-09-02T01:53:16.287 回答