🦁

DEA/DAS のお勉強書き連ね②

2024/01/02に公開

雑メモ

KDFでのデータロードまでのバッファ間隔

最低60秒

Athena のアクセス制御

ワークグループを作成することでワークグループごとに実行クエリ保存、クエリ結果の制限、メトリクスの表示、スキャン対象データの上限設定などができる
*IAMではサービスレベルでのアクセス制御

EMRのスケーリング

マネージドスケーリング: EMRクラスターのメトリクスを5~10秒ごとに評価しスケーリング
カスタム自動スケーリング: ユーザ定義のメトリクス、ポリシーで5分間隔で評価しスケーリング

Athena のパフォーマンス向上

ファイルフォーマット、GZIPへの圧縮、フォルダ構造以外に128MB未満のファイルを大きくしてもパフォーマンスが向上する
*Apache ORC の GZIP 圧縮はサポートされていないので SNAPPY 形式で圧縮する

S3 から Redshift へのデータのロード方法

INSERT/DELETE/COPY
*COPY が一番効率がいい

KDS の重複レコードの主な原因

  • プロデューサ側のタイムアウト的問題での再試行
  • ワーカーの予期せぬ終了によるレコードプロセッサの再起動
  • ワーカーインスタンスが追加/削除されたことによるレコードプロセッサの再起動
  • コンシューマ側のアプリケーションデプロイによるレコードプロセッサの再起動

Glue の増分ジョブ実行

ジョブブックマークを使用することで帯ジェクトの最終更新日時から増分データのみ処理が可能、また、実行以前の状態に戻すロールバックもできる

KDSのデータ処理時にパーテーションキーが同一だと処理するシャードが偏りパフォーマンスが悪くなることがある

EMRのEMRFSで使用するIAMロールはセキュリティ設定に該当しなかった場合、サービスロールの権限が使用される

  1. S3へのアクセスを制限するサービスロール(EMRロール)を作成する
  2. チームごとにEMRFS用のIAMロールを作成しサービスロール(EMRロール)を引き受けられるように信頼ポリシーを設定する
  3. EMRFS用のIAMロールをマッピングするセキュリティ設定を作成してEMRクラスターに割り当てる

Redshift Spectrumで作成した外部テーブルには更新/削除クエリを実行することはできない

Redshift Data API

https://dev.classmethod.jp/articles/redshift-data-api-features/
Redshift のデータに対してクエリを実行することが出来る機能
*非同期 = 実行したレスポンスで結果が返ってくるものではない = 別途クエリ結果の取得が必要
JDBC/ODBC を使ったクラスターへの接続が必要なくなる → 通信経路を開けなくてもよくなる
レスポンスサイズは 100M まで

S3 Storage Lens

https://dev.classmethod.jp/articles/amazon-s3-storage-lens/
オブジェクトストレージの使用状況やアクティビティが可視化できる
→ライフサイクルポリシーの有無やリクエストを確認することでコスト最適化に使うことが出来る
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/storage-lens-optimize-storage.html

Concurrency scale

https://dev.classmethod.jp/articles/20190329-amazon-redshift-concurrency-scaling-benchmark/
= 同時実行スケーリング
Redshift で同時ユーザとクエリからの大量の要求を処理する必要がある際に使用
スケーリングクラスタという一時キャパシティを追加して処理を行う
*WLM(Work Load Management: ワークロード管理): 各キューに優先度をつけて処理を実行できる

Vacuum

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_VACUUM_command.html
データベース内を再ソートする

Glue 実行タイプ

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/job-run-statuses.html

  • Spark ジョブ(Standard)
  • Spark ジョブ (Flex)
  • Python シェルジョブ

Spark DataFrame

DataframeとはSpark上でParquetやCSVといったファイルをデータベースのテーブルのように扱うことができるオブジェクト
*概念上、データフレームは、一般的なオブジェクトDataset[Row]のコレクションに対するエイリアス。ここで、Rowは一般的な型付けのないJVMオブジェクト
一方、データセットは、強い型付けのJVMオブジェクトであり、ScalaあるいはJavaクラスで定義するケースクラスで表現される

DynamicFrame

AWS Glueで独自に定義されたデータ構造
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-dynamic-frame.html

DataFrame と似ているけど内部で複数の型を持っている場合などに柔軟に処理が出来る

ちょっと古いけど:https://dev.classmethod.jp/articles/aws-glue-dynamicframe/

EMR のプロビジョニングタイムアウト

設定すると、スポットインスタンスを使用している中、ターゲットキャパシティにスポットインスタンスでは足らない場合、足らない分をオンデマンドキャパシティで補うことが出来る
→ターゲットキャパシティに対する SLA の準拠のため

Glue スキーマレジストリ

KPL と KCL を統合しストリーミングデータのスキーマの変更を追跡できる
*ストリーミングデータの進化の検証とは。。。?

EMR から S3 にデータ保存する際のデータ転送暗号化方法

証明書を zip ファイルにして S3 にアップロードしてそれを転送時の暗号化アーティファクトとして使用する
https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-encryption-certificates

KDA のクエリ処理

Tumbling Windows
特定の時間で区切ってクエリを行う *データの重複はないが、時間の区切りをまたいで関連するデータが来た場合処理が分かれてしまう

Stagger Windows(ずらしウィンドウ)
パーミッションキーベースでのウィンドウで処理を行うため、 Tumbling Windows のように必要なデータが途中で別れることがない
→一貫性のないタイミングでのデータクエリに適している
Slidin Windows
特定の時間ごとにスライドしながらクエリを行う *同一のデータが重複して含まれる可能性がある
→特定時間ごとの集計では使える (過去何分のデータなど)

Discussion