每个JVM中的Spark Streaming连接池

时间:2017-09-02 01:47:53

标签: apache-spark spark-streaming connection-pool

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

1 个答案:

答案 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 
}

Another SO Answer for similar use case

检查一下:Design Patterns for using foreachRDD