![](/img/trans.png)
[英]Lost connection to MySQL server during query error when I try to use function
[英]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.