簡體   English   中英

當使用foreachPartition將rdd中的數據寫入mysql時,我偶爾會丟失mysql連接

[英]When use foreachPartition to write data in rdd into mysql , i lost mysql connection occasionally

我使用spark rdd將數據寫入mysql,我使用的運算符是foreachPartition ,在運算符中我設置了連接池並寫入數據(使用scalike jdbc),然后將其刪除,但是似乎偶爾找不到連接池,日志顯示Connection pool is not yet initialized. (name:'xxx) Connection pool is not yet initialized. (name:'xxx) ,我不知道為什么會發生

數據終於被完全插入了。但是異常使我困惑

我相信您已經以​​相同的方式實現(如果使用Java)

dstream.foreachRDD(rdd -> {

  rdd.foreachPartition(partitionOfRecords -> {

    Connection connection = createNewConnection();
    while (partitionOfRecords.hasNext()) {
      connection.send(partitionOfRecords.next());
    }
    connection.close();
  });
});

在createNewConnection()方法的實現中,您只需實現單例連接對象模式,然后關閉即可。

dstream.foreachRDD(rdd -> {

  rdd.foreachPartition(partitionOfRecords -> {

    Connection connection = ConnectionObject.singleTonConnection();
    while (partitionOfRecords.hasNext()) {
      connection.send(partitionOfRecords.next());
    }

  });
});

//單噸方法應該像這樣

public class ConnectionObject (){


private static Connection=null;

public static Connection singleTonConnection(){

if(Connection !=null){

/** get new connection from spring data source or jdbc client**/

}
return Connection;

}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM