Amazon EMR

# Amazon EMR

https://d1.awsstatic.com/webinars/jp/pdf/services/20191023_AWS-Blackbelt_EMR.pdf

## なぜAmazon EMR を利用するのか

  • 何が求められているか
    • 新たな非リレーショナルデータをペタバイト以上のスケールでリアルタイムにキャプチャして保存
    • バッチレポートだけではなく、リアルタイム、予測、音声、画像認識を組み込む新しいタイプの分析をする必要がある
    • 安全かつ管理された方法でデータへのアクセスを民主化する
  • 従来までの分析方法
  • Amazon EMRとは
    • マネージドなHadoop Spark
      • 最新のHadoop および Spark エコシステムのリリースをデプロイ
      • 任意のサイズに拡張可能
      • 高い可用性と耐久性
        • オートヒーリング
      • 高い安全性
        • 暗号化
          • 保管時の暗号化
          • 転送時の暗号化
        • Amazon Macie によるセキュリティ
        • VPCを利用したネットワーク分離
          • S3 Private Link で接続してよりセキュアに
          • パブリックアクセスをブロックするオプション(Block Public Access)
        • IAMポリシーとの連携
        • AWS CloudTrail
        • Kerberos サポートによるAD認証
        • Hadoop エコシステム機能による認証認可
      • RIを利用可能
        • 必要に応じてスケールさせることができ、コスト最適化を図れる
      • データはS3へ、コンピューティング部分と分けることで、用途に合わせたクラスタを立てることができる
    • 他のAWSサービスとの連携
      • Kinesis Connector
      • DynamoDB-connector for Hive
      • S3
      • Redshift-spark  connector

 

## Amazon EMR で何ができるのか

  • Amazon EMR クラスタへのjob の送信方法
    • Spark アプリケーションからAmazon EMR Step API 経由で送信
    • Lambda 経由で送信
    • ジョブ送信をスケジューリングしたり、パイプラインを構成して送信
  • AWS Glue データカタログを共通のメタデータストアとして適用できる

 

## どうやって利用するのか

 

  • クラスタを作成後でも、ソフトウエア設定を再構成して、実行中のクラスタ内の各インスタンスグループに設定を追加・更新することができる
  • Job 実行時の処理のステップを追加することが可能
  • 複数のtask グループを設定することが可能(task グループによってインスタンスファミリーを変更するなど)
  • オートスケーリングの設定
  • ロギング
    • デフォルトでマスターノードに書き込まれるログをS3に出力することもできる
    • デバッグオプション
  • EMRFS Consistent View
    • S3は結果生合成を持つので、一貫性がない場合に処理を再実行させることができる
    • DynamoDB をファイルレジストリとして使用し、矛盾の検出と処理の再実行を行う
  • カスタムAMI
    • ゴールデンイメージとして運用
  • 起動時の処理の追加
  • EC2キーペアを設定することでマスターノードにSSHできる
  • IAMの設定
  • 暗号化とセキュリティグループ
  • EMRノートブック
    • Jupyter ノートブックベースのツール
    • Hadoop, Spark およびLivy を実行しているEMRクラスタにアタッチすることで利用可能

 

## Amazon EMR とその他のサービスとの使い分け

  • Amazon Athena
    • 以下のケースに当てはまるなら Presto on Amazon EMR を利用するのが良い
      • RDBなどS3以外にもデータソースにする必要がある
      • Athena の同時実行クエリ数の制限を回避したい
  • AWS Glue
    • 以下のケースに当てはまるなら Apache Spark on Amazon EMR を利用するのが良い
      • ETL 処理にSpotインスタンスを利用したい
      • 単一のノードのスペックを高くしたい
      • ETL 処理にSpark 以外のアプリを使いたい
  • Amazon Kinesis Data Analytics for SQL/Java App
    • 以下のケースに当てはまるなら Apache Spark on Amazon EMR を利用するのが良い
      • ストリーミングアプリをより柔軟にカスタマイズしたい
  • Amazon DynamoDB

 

まとめると以下の場合にはAmazon EMRを利用するのが良い

  • Hadoop と各種アプリを柔軟にカスタマイズしたい
  • オンプレのHadoop クラスタをシンプルに移行したい
  • マネージドサービスの制限を回避したい
  • できるだけ新しいバージョンを利用したい
  • アプリケーションのバージョンを固定したい
  • 複数種類のアプリケーションを同一クラスタ上に稼働させて連携させたい

 

## 雑感

Amazon のマネージド MapReduce。大量のデータを処理するための分散処理基盤であるHadoop / Spark のマネージドサービス。分析するAWSのサービスは他にAmazon Athena Amazon Redshift があるが、これらはS3をデータソースとして分析するだけにとどまっているので比較的制限がある。それに対してAmazon EMR はより柔軟に大規模なデータを扱うのに適している。Amazon EMR で最初に処理を行った後にS3にストアしたデータを利用してAthena Redshift を利用するという組み合わせで処理を組むことも可能。

インターネットに露出しない仕組みや、IAM Hadoop そのもののセキュリティの仕組みを利用してセキュアに利用することもできる。

 

Q. Redshift EMR の使い分け

https://aws.amazon.com/jp/redshift/faqs/

Q. ビッグデータサービス(Athena, EMR, Redshift)との比較

https://aws.amazon.com/jp/athena/faqs/