EMRとは何か?
Elastic Map Reduce の略称です。
Amazon EMR は、オープンソースのフレームワークを使用して、ビッグデータを迅速に処理、分析し、そして機械学習 (ML) を適用するためのプラットフォーム
Amazon EMR 公式リファレンス
ビッグデータや膨大なデータを素早く処理するためのプラットフォームだということです。
このプラットフォームではSpark、Hadoopなどの分散処理のオープンソースを利用して処理をおこないます。
以前Spark関係の内容についてまとめましたのでご覧ください。
Sparkについて(Python,Java,JVM,RDD)
EMRの基本的な概念
- マスターノード
- コアノード(スレーブノード)
基本的には上の2つに分かれます。
EMR上で処理を実行する際にはAWS CLIで
aws emr add-steps 「〜〜」 というコマンドを利用します。
この際に様々なオプションを設けますが、
気をつけたいのが、クラスタモードとクライアントモードが存在しているということです。
- depoy-mode cluster
- depoy-mode client
この2つの実行方法では中で動く方法に違いが生まれてしまいます。
- クラスタモードは分散処理を行う処理
- クライアントモードは分散処理を行わない処理
となります。
上記の記述で何が変わるのか?
クラスタモード
マスタノードからコアノード(スレーブノード)に処理が実行されるため分散処理扱いとなる
クライアントモード
マスターノード上のみで処理が実行されるため分散処理にはならないということです。
aws emr add-steps コマンドではpython(pyspark)の処理を行います。その際に実行する環境が地味に異なります。
#HDFS(hadoop database file server)について
EMRを作成した段階で作られるデータサーバです。、ここではhadoopコマンドなどを使うことでAWSs3などとの連携が可能となります。
一時的にファイルを保存する場合、中間ファイルを生成して後続処理に使う場合など。
hadoopコマンドは2種類あります。
hadoop fs -lsこれはLinuxでいう lsコマンドです。
もしくはhdfs dfsコマンドとなります。基本的処理は同じですが、使用できるオプションが少し異なります。
#EMRって結局Ec2のこと。
Ec2を複数台起動し親のサーバから子のサーバにタスクを割り振り処理を分散化し処理性能をトータル的に上げているということになります。
一つのノードではできないけど複数のノードがあれば大規模なデータでも処理できるよねってことです。
#EMRを扱う上で必要なAWSのサービスについて
・VPC
・IAM(ロール、ポリシーなどの権限)
・s3(EMRのログ出力先)
・Ec2
・AWSCLI
・Boto3を利用したpythonアプリケーションの作成
##それ以外にあると良い知見
・Pysparkによる分散処理の知識
・メモリ関連
・Javaの知見
・jmepath(awscliでよく使います。)
・linux