在我的spark流媒体应用程序中,我有许多I / O操作,例如codis,hbase等。我想确保每个执行程序中只有一个连接池,我该如何优雅地执行此操作? 现在,我分散地实现了一些静态类,这对管理不利。如何将它们集中到像xxContext这样的类中,有些像SparkContext,需要我广播吗?我知道广播大型只读数据集很好,但这些连接池怎么样? Java或scala都是可以接受的。
答案 0 :(得分:0)
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
}