0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】EMR Studioでお手軽にデータ処理をする(EMR Studio, Amazon EMR Serverless, Notebook)

Last updated at Posted at 2025-02-24

はじめに

じゅんじゅんです。
私は以前EMRを使ってETL処理を行っていたデータエンジニアの1人だったのですが、最近またEMRを手軽に使ってみたいと考えるようになり、この検証をしようと考えた次第です。

当時はEC2を選定してその上でEMRを起動させる方法を使っていたのですが、最近だと手軽に始められるEMR StudioやEMR Serverlessのアップデートがあったため、そちらを検証できればと思います。

これからEMRを利用する方々のご助力になれば幸いです。

EMR Studioの初期設定

こちら を参考にEMR Studioの初期設定を行ないます。

まず、AWSコンソールからEMRのサービスページにアクセスし、

image.png

EMR Studioの"Studios"から"Studioを作成"

image.png

設定オプションをインタラクティブワークロード、その他のリソース名を任意でつけて、作成します。(リソース名はデフォルトのままで問題ありません)

image.png

これでStudioの作成ができました。

Studiosに先ほど命名したStudioが生成されたことを確認できます。
そしてこのStudio名をクリックするとEMR Studioの画面に遷移します。

image.png

image.png

WorkSpacesから先ほど作成したWorkSpaceをクリックすると見慣れたJupyterの画面に遷移します。

image.png

image.png

こちらでデータ処理の作業を行なっていきます。

Notebook上での作業

今回はPySparkのNotebookを開いて作業します。
image.png

このタイミングでEMR StudioのServeless→Applicationsを確認するとServerless_Interactive_App_junjun(初期設定で命名した名前)が起動されていることがわかります。
こちらがNotebookの裏で動いているサーバーの設定となります。logやlimitの制限など多数の設定項目が確認できます。今回は検証なので何もいじらずに進めます。

image.png

image.png

image.png

データの変換およびSQL

s3://inu-is-dog/japan_population_tsv/ 配下に以下の日本人口の推移を記録したtsvファイルが配置されています。
このtsvファイルをS3から読み取って男性比率のカラムを追加し、parquetに変換してs3://inu-is-dog/japan_population_parquet/に出力する をやってみます。

image.png

コードを書く前にEMR StudioがS3に対して読み書きをする権限が必要なので、IAMにて、初期設定でアタッチしたEMR StudioのロールにS3へのアクセスの権限を付与します。
今回はインラインポリシーで対応しました。

image.png

Jupyterの画面に戻りまして、まずS3のデータを読み取るコードを実行します。

# データの読み取り先のS3パス(ファイル指定でも、フォルダ指定で複数ファイルでもOK)
input_s3_path = "s3://inu-is-dog/japan_population_tsv/"

# S3からtsvファイルを読み取ってデータフレーム(df)に格納する
df = spark.read.csv(input_s3_path, sep=r'\t', header=True)

# データフレームの中身の確認のため標準出力する(デフォルト20行)
df.show()

image.png

では、男性比率のカラムman_ratioを追加するコードを実行しましょう
今回はSpark SQLを使ってみます。

# データフレームをSpark SQLで使えるように登録する
df.createOrReplaceTempView("population_tbl")

# SQLの実行、および実行結果をoutput_dfに格納する
output_df = spark.sql("""
SELECT 
  *,
  man_population / all_population as man_ratio
FROM 
  population_tbl
""")

# データフレームの中身の確認のため標準出力する
output_df.show()

image.png

無事、man_ratioのカラムを追加できました。

では次にこのデータをparquet形式で出力します。
せっかくなのでyearごとにパーティション分割した形で出力してみます

output_s3_path = "s3://inu-is-dog/japan_population_parquet/"
output_df.write.mode("overwrite").partitionBy("year").parquet(output_s3_path)

image.png

S3の方を見てみましょう。
綺麗にパーティション分割されていますね。素晴らしいです。

image.png

image.png

これにて検証は以上になります。

終了処理

検証が終わったのでリソースを終了させます。
WorkSpacesから使用していたWorkSpaceを選択し"Stop"の状態にします。
(リソースがもう必要ないということであればDeleteを選択してください)

image.png

またApplicationsから使用していたApplicationをStop Applicationします。
image.png

EMR Studioの料金

こちらより、
EMR StudioはEMR Serverlessの料金だけを気にすれば良さそうです。
EMR Serverlssの料金は使用するvCPU、メモリ、およびストレージリソースに基づいた従量課金制です。

※2025/02/25時点 東京リージョンの場合
■Linux/x86
1 時間あたりのvCPU 単位:USD 0.065728
1 時間あたりのGB単位:USD 0.007189

■Linux/ARM
1 時間あたりのvCPU 単位:USD 0.052585
1 時間あたりのGB単位:USD 0.005746

所感・まとめ

以前はデータ処理の負荷に応じてEC2を選定してデータ処理を行うというのがルーチン化してしていたのですが、それがないだけでかなりストレスフリーだと感じました。また、Notebookでインタラクティブに結果がわかるのもかなり好感触でした。
今回は、検証ということでEMR StudioのVPCや権限やセキュリティはかなり緩めに設定していたのですが、本格的に使うときにはその設定も必要そうです。それでもEMRは敷居が高いというイメージを払拭できる可能性を感じられました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?