【Cloud Data Fusion】GCSバケット消えない問題
はじめに
以前、GCPのローコードETLサービスであるCloud Data Fusionでパイプラインを作成して
記事投稿しました。
書き終えた喜びも束の間、意図しないGCSバケットが大量に生成されていました。
GCSバケット削除画面
このバケットには、パイプライン実行中に生成されるAVRO形式の中間ファイルが置かれます。
パイプラインは、Dataproc(Hadoop Spark)で実行されているためです。
パイプライン実行後は、バケット内は空になりますが、バケットだけが残ってしまいます。
しかも、パイプラインを実行するたびに新規でバケットが生成されてしまいます。
これはなかなかイケていない仕様になっているなと思い
「どうにかならんかな...」ということで改善策について検討しました。
今回実施した内容
対策案として、以下の2つの案が考えられると思いました。
❶パイプライン実行後に自動でバケットが削除する方法
❷特定のGCSバケットを指定することで自動生成されない方法
今回の内容は上記❷として、Temporary Bucket Nameを指定する方法になります。
こちらが説明文になります。
...あれ、これだとTemporary Bucketを指定せずとも終わったら自動で消えるって(笑)
Optional. Google Cloud Storage bucket to store temporary data in. It will be automatically created if it does not exist, but will not be automatically deleted. Temporary data will be deleted after it is loaded into BigQuery. If it is not provided, a unique bucket will be created and then deleted after the run finishes.
設定項目は、BigQuery Pluginsのプロパティ内にあります。
Temporary Bucket Nameの設定場所
今回は細かいことは気にせず、まずは試してみましょう!ということで...
利用環境
Product | version |
---|---|
CDAP | 6.4.0 (Developer) |
BigQuery Sink Plugin | 0.17.0 |
Region | asia-northeast1 |
【構成図】
【補足】
・ Sink BigQuery
で設定をしています。
実施内容
- Temporary Bucket Nameを指定しない場合
- Temporary Bucket Nameを指定する場合
1. Temporary Bucket Nameを指定しない場合
まず、パイプライン実行前のGCSバケットの個数と一覧を確認しました。
$ sudo gsutil ls | wc -l
2
$ sudo gsutil ls
gs://tmp_bucket
gs://bino_dev_bucket
パイプライン実行し、StatusSucceeded
となり、以下のログメッセージが出ればOKです。
※ ログはStatusの左隣のLogsボタンで閲覧できます。
15時12分1秒
のタイミングで中間ファイルが削除されています。
3609aa21-3416-4f62-840d-14a451bfeb8a
が自動生成されたバケットになります。
Successfully deleted GCS output path ‘gs://3609aa21-3416-4f62-840d-14a451bfeb8a/3609aa21-3416-4f62-840d-14a451bfeb8a/input/xxxxxxxxxxxxxxxxxxx-3609aa21-3416-4f62-840d-14a451bfeb8a’.
gsutil ls コマンドを実行するとバケット数が3個に増えていました。
(3609aa21-3416-4f62-840d-14a451bfeb8a
追加)
$ sudo gsutil ls | wc -l
3
$ sudo gsutil ls
gs://tmp_bucket
gs://bino_dev_bucket
gs://3609aa21-3416-4f62-840d-14a451bfeb8a
2. Temporary Bucket Nameを指定する場合
先のパイプラインをコピーし、Sink BigQueryのプロパティを開きます。
Temporary Bucket NameにGCSバケット(tmp_bucket
)を入力します。
※ GCSバケットは作成済みのバケットであればなんでもOKです。
パイプライン実行し、StatusSucceeded
となり、先と同じログメッセージが出ればOKです。
指定したGCSバケット(tmp_bucket
)の中にbcf33b1e-657a-40ce-b666-8a3962d9063cという
フォルダが作成されたログが出ていました。
Successfully deleted GCS output path ‘gs://tmp_bucket/bcf33b1e-657a-40ce-b666-8a3962d9063c/input/xxxxxxxxxxxxxxxxxxx-bcf33b1e-657a-40ce-b666-8a3962d9063c’.
gsutil ls コマンドを実行するとバケット数は3個のまま、新規バケットはありませんでした。
$ sudo gsutil ls | wc -l
3
$ sudo gsutil ls
gs://tmp_bucket
gs://bino_dev_bucket
gs://3609aa21-3416-4f62-840d-14a451bfeb8a
まとめ
さて、いかがでしたでしょうか?
BigQueryのプラグインにあった項目のTemporary Bucket Nameに
バケット名を入力すると自動でのGCSバケット作成がされませんでした。
よって、対策案❷が有効なことが分かりました。
これで安心してCloud Data Fusionを利用できそうですね!
オチですが、本対応している際中にバグ認定され
5/27(木)にBigQuery Pluginのバグ修正[1]がされていました。
CDF 6.4.1、BigQuery Plugin 0.17.3ではちゃんとバケットが削除されるようです^^
CDF 6.4.0を利用している方はご注意ください!!
Fixed an issue in the BigQuery plugins to correctly delete temporary storage buckets.
Cloud Data Fusion 関連投稿
- 本格的なパイプライン作ってみた!
- プライベートインスタンスでS3からデータ収集する方法
- インスタンス作成でどハマりした話
- パイプライン実行エラー検知方法
- ZIPファイルの取り込み時の苦戦とその解決方法
- パイプライン失敗時のSlack通知方法
Discussion