背景:
我用DataFrameWriter加載數據集到紅移。DataFrameWriter寫道S3數據集,並加載數據從S3紅移通過發行紅移複製命令。
問題:
經常我們正在觀察,數據存在於S3但不加載DataFrameWriter的紅移,在這情況DataFrameWriter.save ()操作成功,而不會產生任何錯誤。
最新DataFrameWriter文檔表示,可能有缺失或不完整的數據清單操作中由於S3的最終一致性。盡管S3的官方文檔隻說最終一致性發生桶刪除和版本化的桶,我沒有更多的信息如何這是由DataFrameWriter聲稱,相關數據可能丟失。
文檔簡介
DataFrameWriter文檔(https://docs.m.eheci.com/external-data/amazon-redshift.html):“當讀取或寫入紅移,在S3中讀取和寫入數據的數據源。火花和紅移產生分區的輸出並將其存儲在S3的多個文件。根據Amazon S3數據一致性模型文檔,S3 bucket清單操作最終一致性的,所以必須去特別的文件長度,避免丟失或不完整的數據由於這最終一致性的來源。”
S3:S3數據一致性模型文檔(https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html # ConsistencyModel)
問:
代碼:
/ / dataframe是數據集的obj <行>。DataFrameWriter <行>作家= dataframe.write () .mode (SaveMode.Append) .format .option (“io.github.spark_redshift_community.spark.redshift”) (“url”, this.config.getUrl ()) .option(“用戶”,用戶名).option(“密碼”,密碼).option (“tempdir this.config.getTempS3Dir ()) .option (“aws_iam_role”, iamRole) .option .option (“ssl”、“true”) (“sslfactory”、“org.redshift.ssl.NonValidatingFactory”) .option (“tempformat”, DEFAULT_TEMP_FORMAT) .option(“數據表”,表名);writer.save ();