AWSのローカルでのETLパイプラインの開発とテスト
通常、ETLパイプラインの開発とテストは、セットアップに時間がかかり、メンテナンスが必要な実際の環境/クラスターで行われます。 この記事では、DockerとLocalStackを使用して、ETLパイプラインをローカルで開発およびテストすることに焦点を当てています。 このソリューションは、クラウド上にサービスをセットアップすることなく、ローカル環境でテストする柔軟性を提供します。
By サブハッシュ・スリーニバサチャー、Epsilonのソフトウェアエンジニアテクニカルリード
概要
AWSは、エンジニア、データサイエンティストがインフラストラクチャをセットアップする必要性を心配することなく、ソリューションの構築と問題解決に集中できるようにする上で極めて重要な役割を果たします。 サーバーレスで従量課金制の価格設定により、AWSはその場でサービスを簡単に作成できます。
AWS Glueは、サーバーレスETLパイプラインを構築するためにデータエンジニアによって広く使用されています。 PySparkは、開発に使用される一般的な技術スタックのXNUMXつです。 ただし、サービスが利用可能であるにもかかわらず、対処する必要のある特定の課題があります。
ETLスクリプト(PySpark)またはその他のサービスのいずれの場合でも、AWS環境でコードをデバッグすることは困難です。
- AWSサービスの使用状況を継続的に監視することは、コスト要因を管理するための鍵です
- AWSは、すべてのSparkライブラリがインストールされたDev Endpointを提供していますが、価格を考慮すると、大規模な開発チームでの使用には適していません。
- AWSサービスのアクセシビリティは 限られました 特定のユーザー向け
ソリューション
AWSのソリューションは、アクセシビリティやコスト要因を気にすることなく、ローカル環境で開発、テストできます。 この記事を通じて、XNUMXつの問題に取り組んでいます–
- AWS開発エンドポイントを使用せずにローカルでPySparkコードをデバッグします。
- ローカルでAWSサービスとやり取りする
どちらの問題も、Dockerイメージを使用することで解決できます。
- まず、AWS環境でサーバーを使用する必要がなくなり、代わりに、マシンで実行されているDockerイメージがコードを実行する環境として機能します。
AWSは、PySparkスクリプトに使用できるサンドボックスイメージを提供します。 Dockerイメージは、PySparkコードを実行するようにセットアップできます。 https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
- コードの実行にDockerマシンを使用できるため、ETLパイプラインの構築中にファイルを保存(読み取り/書き込み)するS3のようなサービスが必要です。
S3との相互作用は次のように置き換えることができます ローカルスタック これは、クラウドアプリケーションを開発するための使いやすいテスト/モックフレームワークを提供します。 これは、実際のAWSクラウド環境と同じ機能とAPIを提供するローカルマシン上のテスト環境を起動します。
これまでのところ、この記事では、ETLパイプラインの構築と利用可能なサービスの使用について説明しています。 ただし、SNS、SQS、CloudFormation、Lambda関数などのAWSサービスを使用する場合は、同様のアプローチをあらゆるユースケースに適用できます。
アプローチ
- Dockerコンテナをリモートインタプリタとして使用する
- コンテナでPySparkセッションを実行します
- LocalStackを使用してS3サービスをローカルでスピンアップする
- PySparkコードを使用して、LocalStackで実行されているS3バケットからの読み取りと書き込みを行います
前提条件
以下のツールをマシンにインストールする必要があります
- デッカー
- PyCharm Professional / VisualStudioコード
- Dockerイメージをダウンロードまたはプルします(Dockerプル)。
- libs:glue_libs_1.0.0_image_01
- localstack / localstack
- Dockerコンテナーは、PyCharmプロフェッショナルバージョンでリモートインタープリターとして使用できます。
製品の導入
Dockerがインストールされ、イメージがローカルマシンにプルされた状態で、コンテナーを起動するための構成でPyCharmの設定を開始します。
- docker-compose.ymlファイルを作成します
- DockerFileを作成する
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- インストールするパッケージを含む要件ファイルを使用する
- Pythonリモートインタープリターをセットアップする
- docker-composeファイルを使用してPythonインタープリターをセットアップします。
- PyCharm DockerCompose設定で `glue-service`を選択します。
- Docker-composeファイルは、両方のイメージのコンテナーを作成して実行します
- LocalStackはデフォルトでポート4566で実行され、S3サービスが有効になっています
Code
- インポートする必要のあるライブラリ
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports
- LocalStackで実行されているS3バケットにファイルを追加します
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 Dockerコンテナ内でローカルに実行されているS3です
- S3から読み取るようにPySparkセッションを設定します
- PySparkセッションは、提供された模擬クレデンシャルを介してS3に接続します
- 作成されたPySparkセッションを使用して、S3から直接読み取ることができます
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3
- 最後に、任意の形式でS3に書き込むことができます
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3
上記の手順を実行すると、テスト用のモックデータを含むダミーのcsvファイルを作成できます。
- S3(LocalStackで実行されている)にファイルを追加します
- S3から読む
- 寄木細工としてS3に書き戻す
.pyファイルを実行して実行できるはずです。LocalStackAPIを使用してローカルで実行されているS3バケットから読み取ることができるPySparkセッションが作成されます。
さらに、LocalStackがで実行されているかどうかを確認することもできます http://localhost:4566/health
LocalStackは、AWSCLIを使用してコマンドを実行する機能も提供します。
まとめ
DockerとLocalstackを使用すると、Pysparkコードを実行し、コンテナーでデバッグし、ローカルで実行されているS3に書き込むための迅速で簡単な方法が提供されます。 AWSサービスに接続しなくても、これらすべてを実行できます。
参照:
- 接着剤エンドポイント: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
ドッカー: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- PyCharmリモートインタープリター: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- LocalStack: https://localstack.cloud
バイオ: サブハッシュ・スリーニバサチャー Epsilon Digital Experienceチームのリードソフトウェアエンジニアであり、データサイエンスの問題、特にパーソナライズを解決し、クライアントのROIを促進するエンジニアリングソリューションを構築しています。
関連する
過去30日間の人気記事 | |||||
---|---|---|---|---|---|
|
|
ソース:https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html
- "
- &
- 接近性
- すべて
- Amazon
- 分析論
- API
- API
- 記事
- 賃貸条件の詳細・契約費用のお見積り等について
- AWS
- ビルド
- 建物
- 挑戦する
- クライアント
- クラウド
- クラウドアプリケーション
- コード
- コマンドと
- コンテナ
- 作成
- Credentials
- データ
- データ分析
- データサイエンス
- データウェアハウス
- 特価
- 深い学習
- デベロッパー
- 開発
- デジタル
- 取締役
- デッカー
- エンドポイント
- エンジニア
- エンジニアリング
- エンジニア
- 環境
- 等
- 柔軟性
- フォーカス
- 形式でアーカイブしたプロジェクトを保存します.
- フレームワーク
- GitHubの
- 良い
- GPU
- こちら
- 認定条件
- HTTPS
- 画像
- インフラ
- IT
- キー
- 大
- つながる
- LEARN
- 学習
- ローカル
- 局部的に
- ML
- モニタリング
- 提供
- オンライン
- その他
- 個人化
- 極めて重要な
- ブランド
- 価格設定
- 問題解決
- Python
- 要件
- ラン
- ランニング
- サンドボックス
- 科学
- 科学者たち
- サーバレス
- サービス
- 設定
- ソフトウェア
- ソフトウェアエンジニア
- ソリューション
- 解決する
- start
- 店舗
- ストーリー
- 技術的
- test
- テスト
- 時間
- top
- users
- 倉庫
- X
- 年