Comments
Description
Transcript
Amazon EMRで分散処理
Amazon Elastic MapReduce 2015/9/16 ※2015/11/30更新 AWS Black Belt Tech Webinar 2015 アマゾン データ サービス ジャパン株式会社 ソリューションアーキテクト 岩永 亮介 1 Amazon Elastic MapReduceの歴史 • 2009年に最初のリリース – MapReduceジョブを、ボタン1つで実行できる環境を提供 • Hadoopエコシステムの進化に対応 – Pig, Hive, HBase, Impala, Presto, Hue, Hadoop 2.0, Spark • AWSサービスの進化に対応 – Spot, IAM, DynamoDB, VPC, CloudWatch, CLI, Kinesis, KMS → もはやMapReduceだけではない! 2 ビッグデータパイプライン Collect Data Data Collection and Storage Event Processing S3 AWS Lambda Kinesis KCL Apps DynamoDB 3 Process Store EMR Analyze Data Processing EMR Answers Data Analysis Redshift Machine Learning Amazon EMRを構成する2つの要素 分散処理基盤 分散処理アプリケーション • 分散処理に必要なリソー スを簡単に調達/廃棄可能 • 複雑な設定無しに分散アプ リケーションを利用可能 – Master/Core/Task node – EMRFS – Bootstrap Action, Steps 4 – Hadoop, YARN – Hive, Pig, HBase, Spark.. Agenda • • • • 5 分散処理基盤としてのAmazon EMR Amazon EMR主要アップデート (2014/10以降) 分散処理アプリケーションとしてのAmazon EMR まとめ 分散処理基盤としてのAmazon EMR - アーキテクチャ - 6 Amazon EMRのアーキテクチャ Core Node Master Node スレーブ群を 管理 HDFS HDFS HDFS アクセス Task Node Task Node HDFS Master Instance Group HDFS Core Instance Group AWSサービス アクセス Amazon S3 7 Task Instance Group Task Instance Group Amazon EMR Master Instance Group • Master Nodeは1つ – Failoverは非対応 • いわゆるマスターの 役割を担う – NameNodeや JobTrackerなどが動く – Core NodeやTask Nodeの監視 8 Master Node Hadoop1: JobTracker Hadoop2: ResourceManager HDFS: NameNode Hive: HiveServer, MetaStore Presto: Coordinator Master Instance Group Amazon EMR Core Instance Group • 1つ以上のCore Node • いわゆるスレーブの 役割を担う – TaskTrackerなど – DataNodeが動きロー カルディスクがHDFS として使われる Core Node Hadoop1: TaskTracker Hadoop2: NodeManager HDFS: DataNode Presto: Worker HDFS Core Instance Group 9 Amazon EMR Core Instance Group • Core Node追加可能 – HDFS容量増加 – CPU/RAM増設 • HDFSを持っているた め、削減はできない Core Node Hadoop1: TaskTracker Hadoop2: NodeManager HDFS: DataNode Presto: Worker HDFS – 4.1.0からは削減も可 能に Core Instance Group 10 Amazon EMR Task Instance Group • HDFSを持たない以外 はCoreと同じ役割 • HDFSのデータは Core Nodeにアクセ スする • HDFSを持たないので 削除も自由 Task Node Hadoop1: TaskTracker Hadoop2: NodeManager (Presto: Worker) Task Instance Group 11 Amazon EMR Task Instance Group • 複数Group設定可能 – Spotのbid価格を調整 – Instance Typeを調整 • 余っているRIを活用 したり、市場価格に 合わせてSpotを調整 したりと柔軟に対応 c3.xlarge * 2 bid: $0.1 Task Instance Group 1 r3.xlarge * 2 bid: $0.5 Task Instance Group 2 12 Spot Instanceの活用例 予測されたコストで最低要件を満たす 低コストでより高速に On-demandを Core Nodeに利用 Spot Instanceを Task Nodeに利用 最低要件を満たすだけ のキャパシティをOndemand価格で確保 On-demandの最大 90%引き程度の価格で 追加のリソースを確保 Core Instance Group Task Instance Group 例: m3.xlarge 6台で10時間かかる処理 (倍の12台なら、5時間で終わると仮定) Core Node(On-demand)のみ: $0.336×10h×6台 = $20.16 で10時間※ Task Node(Spot)で倍に: $0.336×5h×6台 + $0.12×5h×6台 = $13.68 で5時間※ 13 ※2015年9月16日現在のus-east-1の価格です。Spotの価格は時によって変動するので仮の価格です。 分散処理基盤としてのAmazon EMR - 機能・特徴 - 14 EMRFS: Amazon S3をHDFSの様に扱う • 計算資源とストレージを隔離できる • クラスタのシャットダウンが可能 EMR – クラスタを消してもデータをロストしない • 複数クラスタ間でデータ共有が簡単 – クラスタのバージョンアップ検証が並行できる • データの高い耐久性 15 Amazon S3 EMR EMRFSの特徴 • “s3://”と指定するだけで利用可能 • Amazon S3の機能がそのまま使える – 例: 古いデータはAmazon Glacierに自動で移動させる • Amazon S3のサーバサイド・クライアントサイ ドの暗号化も利用可能 – 他のアプリでクライアント暗号化したAmazon S3データも読み 出し可能 • クラスタを消してもデータは消えない 16 EMRFSのConsistent View • Amazon S3は結果整合性 – 書き込み直後の読み取りは不整 合の可能性 • EMRFSではConsistent View を提供 – Amazon DynamoDBにメタデー タを格納し整合性担保 • 結果としてオブジェクトのリ スト取得も高速に 17 Amazon S3 Amazon DynamoDB EMRFSの メタデータを格納 Amazon EMRならではの使い方 • 必要な時だけクラスタ起動 – 消せばお金はかからない – 処理が終わったら自動で消え る設定も可能 t • データは全てAmazon S3 – クラスタを消してもデータは 消えない – データを貯める段階ではクラ スタ不要 18 Amazon EMRの機能: Bootstrap Action • 全てのNode起動時に実行されるスクリプト – 実行可能ファイルであれば何でもOK • Bash, Ruby, Python, etc. – Amazon S3に置いて指定、コマンドライン引数も自由に指定 • 任意のソフトウェアをインストールしたり、設 定したりできる – AWS提供のものもいくつか存在する 19 Amazon EMRの機能: Step • クラスタが準備できたら始まる処理 – クラスタ起動時に設定することもできるし、起動しているクラスタ に後から追加することもできる – 例: 日次のETL処理を行うHiveQL実行 • Amazon S3上のjarファイルを指定して実行 – Streaming, Hive, Pig, SparkはEMRがサポート – script-runner.jarでbashスクリプトを実行させることも可能 • 最後のStepが終わったら自動でクラスタを終了させ ることもできる(Auto-terminate) 20 Amazon EMRでのジョブ実行方法 • Stepで実行 – Amazon EMRの仕組みの上で実行 – 成功/失敗等を簡単に管理できる – 現状はシリアル実行のみ • 各アプリケーション毎のインタフェースで実行 – Master Nodeにsshして、コマンド実行 – Hiveserver, spark-submit等でジョブを叩き込むなど 21 Amazon EMR主要アップデート(2014/10以降) 22 Amazon EMR主要アップデート (2014/10以降) • • • • • 23 (前出)複数のTask Node Group Release 4.0.0/4.1.0/4.2.0登場 カスタムSecurity Group Amazon S3のクライアントサイド暗号化対応 アプリケーションサポート追加(Hue, Spark) Amazon EMR Release 4.0.0登場 • アプリケーションのバージョンアップ – Apache Bigtopベースの新しいパッケージングへ • ポートやパスを標準的なものへ変更 – Amazon EMR独自の設定から、オープンソースの標準設定へ • アプリケーションの設定を直接的に変更できる様に – 設定ファイルを編集するのではなく、パラメータを直接指定できる • マネージメントコンソール、ドキュメントも刷新 – Quick Createでより簡単にクラスタ作成 – ドキュメントは、Management GuideとRelease Guideへ 24 ※従来のAMIベースのバージョンの時との差分について、ドキュメントに詳細がまとまっています http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-release-differences.html Release 4.0.0: アプリケーション更新 • サポートアプリケーションが以下に変更 – – – – – Hadoop 2.6.0 Hive 1.0.0 Pig 0.14.0 Mahout 0.10.0 Spark 1.4.1 • Apache Bigtopベースのパッケージングシステムへ – これまでよりも、速い更新が可能に 25 Release 4.0.0: ポートやパスの変更 • オープンソースの標準的な設定に変更 – 従来はカスタムのポートやパスを利用していた – 変更例: • yarn.resourcemanager.webapp.address port 9026 => 8088 • /home/hadoop/hive => /usr/lib/hive, /etc /hive/conf, /var/log/hive • 実行ユーザもコンポーネント毎に別ユーザへ – 従来は全てhadoopユーザだった – yarnユーザ、hiveユーザなどに変更 26 Release 4.0.0: アプリケーションの設定変更 • Classification + Propertiesで直接的な指定 – 従来はBootstrap Actionなどで変更していた – 以下の様な構造のデータを指定するだけで設定変更可能になった [ { "Classification": "mapred-site", "Properties": { "mapred.tasktracker.map.tasks.maximum": "2", "mapreduce.map.sort.spill.percent": "90", "mapreduce.tasktracker.reduce.tasks.maximum": "5" } } /etc/hadoop/conf/mapred-site.xml に設定値が記述される ] 27 http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html Release 4.0.0: コンソール、ドキュメント変更 • マネージメントコンソールでQuick Create可能に – ソフトウェア、ハードウェア、セキュリティの3項目だけ – 従来通りのコンソールもGo to advanced optionsのリンクから利用可能 • ドキュメントが新たにリリース – Management Guide • Amazon EMRのサービスとプラットフォームに関するドキュメント • http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide – Release Guide • インストールされているソフトウェア等のリリースに関するドキュメント • http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide 28 Release 4.1.0: アプリケーション更新 • サポートアプリケーションの変更点 – Spark 1.5.0 – Hue 3.7.1 (新規追加) • サンドボックスアプリケーションで、開発中のアプ リケーションも利用可能に – Presto 0.119 – Zeppelin 0.6 (Snapshot) – Oozie 4.0.1 29 Release 4.2.0: アプリケーション更新 • サポートアプリケーションの変更点 – Spark 1.5.2 – Ganglia 3.6.0 (新規追加) • サンドボックスアプリケーションの変更点 – Presto 0.125 – Zeppelin 0.5.5 – Oozie 4.2.0 30 カスタムSecurity Groupが利用可能に • 自身で作成したSecurity Groupを指定可能 – 例: クラスタ毎に別のSecurity Groupを設定して、分離度を上げる • Security Groupは2種類 – Managed: 必須、必要なルールが自動的に追加される • SG内、master-slave間、管理用通信(Amazonから8443 portへ) – Additional: 任意、追加のルールを設定する用途 31 https://aws.amazon.com/about-aws/whats-new/2015/01/22/customizable-security-groups-andmultiple-task-instances-now-available-for-amazon-emr/ Amazon S3クライアントサイド暗号化対応 • EMRFSの拡張として提供 – EMRFSを使っていれば透過的に暗号化・復号される • クライアントサイド暗号化 – (サーバサイド暗号化では、Amazon S3の内部で暗号化も復号も行う) – クライアントサイド暗号化では、Amazon EMRで暗号化・復号する • Amazon S3への保存前に暗号化して保存する • 鍵の提供元として、Amazon KMSまたはカスタムプロバイダを指定可能 32 https://aws.amazon.com/about-aws/whats-new/2015/03/amazon-emr-support-for-amazon-s3-clientside-encryption-now-available/ (クライアントサイドで暗号化されたオブジェクト) Amazon S3 キーベンダー (AWS KMSか、カスタムのプロバイダ) 33 クライアントサイド暗号化を有効化した EMRFSで復号して読み込み クライアントから Amazon S3に暗号化して保存 EMRFS – クライアントサイド暗号化 アプリケーションサポートの追加 • Spark – AMI Version 3.8.0以降 • Hue – AMI Version 3.3.0以降 – Release 4.1.0以降 • Release 4.0.0には含まれていないので注意 34 https://aws.amazon.com/about-aws/whats-new/2015/06/apache-spark-now-available-on-amazon-emr/ https://aws.amazon.com/about-aws/whats-new/2014/11/07/amazon-elastic-mapreduce-now-supports-hue/ 分散処理アプリケーションとしてのAmazon EMR 35 Amazon EMRにおけるアプリケーション • サポートアプリケーション – クラスタ作成時に簡単なオプションをつけるだけでインストー ル可能なもの – Release Label/AMI Version毎に使えるアプリケーション、 バージョンが異なる • カスタムインストールアプリケーション – サポートが無くても、Bootstrap ActionやStepsを組み合わせ て任意のアプリケーションをインストール可能 36 アプリケーション: Hadoop • YARN = Yet-Another-ResourceNegotiator • Hadoop2から導入されたリソース管 理の仕組み Pig Hive Other MapReduce HDFS Other Hadoop V1 – 以前は全てJobTrackerが行っていた • Resource Requestベースのスケ ジューラ – ApplicationMasterからのリクエストに 応じて、空いているリソースを ResourceManagerが割り当てる 37 Pig Map Hive Reduce YARN HDFS Hadoop V2 Other YARN: ResourceManager • マスターサーバで稼働 • スレーブ群のリソース情 報を集約 – CPU, Memory, etc. • 必要なリソースを探して 割り当てる • ジョブの管理は行わない – ApplicationMasterの仕事 38 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html YARN: NodeManager • スレーブサーバで稼働 • そのサーバのリソース情 報をRMに報告 • サーバ上のContainerの 管理を行う – 要求に答えてContainerを 起動する 39 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html YARN: Container • スレーブのリソースが切 り出されたもの • NMによって起動される • 実行方式 – DefaultContainerExecutor • プロセス – LinuxContainerExecutor • cgroups – DockerContainerExecutor • Docker 40 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html YARN: ApplicationMaster • ジョブ全体を管理する Container – 旧JobTrackerの様な存在 – ジョブ毎に1つのAM • ジョブを分散処理する Container全体の進捗管 理や監視を行う – Scheduler 41 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html Amazon EMRとYARN • MapReduce, Hive, Pig, Spark on YARN – Amazon EMRクラスタが持つ計算資源を、YARNがアプリケー ションに割り振ってくれる • マルチテナントなクラスタも簡単に作れる – MRでもHiveでもSparkでも、共通のリソースを分割して使える 42 アプリケーション: Hive • SQL likeな宣言的言語で、ビッグデータに対する処理が 行えるアプリケーション • データソースに対してスキーマを定義することで、あた かもテーブルの様に扱える – 通常はHDFSがデータソース – Amazon EMRではEMRFS(Amazon S3)が利用可能 • 他にも、Amazon Kinesis, Amazon DynamoDBへのコネクタを提供 • 処理の実際は実行エンジンによって異なる – MapReduce, Tez, Spark 43 https://hive.apache.org/ Hiveの処理例 CREATE TABLE 5:クラスタに 処理を依頼 1: テーブル定義で HDFSやAmazon S3 をソースに指定 Hiveserver HDFS Cluster 3: 定義したテーブル に対して処理を実行 SELECT FROM 2: テーブル定義 がメタデータとし て保存される 4: テーブルの メタデータを 取得 Metastore 6: 実際のデー タソースから 読み出しつつ 指定された処 理を行う Amazon DynamoDB Amazon S3 Amazon Kinesis 44 Hive Metastoreの重要性 • 他のSQL実行エンジン でも同じMetastoreを 参照可能 Metastore HDFS • MetastoreのMySQLを クラスタ外に持つこと も可能 – Amazon EMRの通常は Masterのローカル 45 Amazon S3 新しいファイルフォーマット ORC File / Parquet • 列指向ファイルフォーマット – カラム毎にデータをまとめて保存する – 特定の列を扱う処理ではファイル全体を読む必要が ない – → Optimized Row Columnar(ORC) File / Parquet • 行指向ファイルフォーマット – 1行ずつファイルに保存する – 1カラムのみ必要でも、レコード全体を読む必要があ る – → TEXTFILE, SEQUENCEFILE ORCのデータ構造 46 https://orc.apache.org/docs/spec-intro.html 列指向フォーマットを使うメリット • 特定列のみの読み書きが効率的 – ビッグデータ分析では全列を使うことは稀 – 単純な統計データならメタデータのみで完結する • 列毎には似たデータが続くので圧縮効率が良い • 行毎にグループ化されているので、1行のデー タは1つのファイルに収まっている 47 HiveでのORC File/Parquetの使い方 • テーブル定義で指定 するだけ • あとは何も意識しな くて良い CREATE TABLE t ( col1 STRING, … ) STORED AS [ORC/PARQUET]; INSERT INTO t (…); SELECT col1 FROM t; 48 HiveでAmazon Kinesisのデータを処理 • Amazon Kinesisが保持するStreamデータを、Hiveの テーブルとして扱える – Amazon Kinesisの保持期限を考慮して、データアーカイブ用途など – 注: Hiveでは速度が出ないので、いわゆるストリーム処理は厳しい • Stream内のShard毎にMapperがデータを読み出す – デフォルトはAmazon Kinesisの保持データをフルスキャン – チェックポイント(Amazon DynamoDBに記録)を使うと、前回読みだした データ以降のみ読むことも可能 3 2 1 Amazon Kinesis 49 Shard-0 Mapper Shard-1 Mapper SELECT FROM id data 1 … 2 … 3 … HiveでAmazon Kinesisのデータを処理 Hiveテーブル作成 Amazon Kinesis Streamを指定 HQLの実行(例) 通常のHQLを実行するだけ。 内部的にはAmazon Kinesis からデータを取得し処理を行う 50 アプリケーション: Spark • 高速な分散処理フレーム ワークとして話題 – メモリキャッシュ、なるべく ディスクを使わない – 繰り返し処理(機械学習等)で 効果が高い • フレームワーク上で、更に アプリケーションが展開 – SQL,ストリーム,機械学習,グ ラフ http://spark.apache.org/ 51 Spark SQL & DataFrame API • Spark SQL – DataFrame APIを操作する 1つの手段 – Hive Metastoreも利用可能 http://spark.apache.org/sql/ • DataFrame API – RDD + Schema – SQL/Java/Scala/Python/ Rで同等の処理速度を実現 • JVMのバイトコードへ変換 http://www.slideshare.net/databricks/2015-0616-spark-summit/16 52 Spark Streaming – 基本コンセプト • Discretized Stream(DStream)と呼ばれる、高 レベルの抽象表現 • Resilient Distributed Dataset(RDD)のシーケン スとして表現される – いわゆる、マイクロバッチ処理 Receiver Messages 53 DStream RDD@T1 RDD@T2 Amazon KinesisとSpark Streaming • Amazon KinesisのStreamが、Amazon EMR上の SparkにDStreamとして流れてくる – Sparkの中にAmazon Kinesis用のライブラリが同梱されている – 裏側では、Kinesis Client Libraryを利用して読み込み • 数秒〜数分のマイクロバッチで、ニア-リアルタイム処 理を実現 – 速報値ダッシュボード、異常検知など Shard-0 Amazon Kinesis 54 Shard-1 KCL thread KCL thread http://spark.apache.org/docs/latest/streaming-kinesis-integration.html DStream RDD@T1 RDD@T2 Spark Dynamic Resource Allocation • 複数Executorのメモリ上でRDDをキャッシュ – Heapを全て使えるわけではないので、サイズに注意 • Dynamic Resource Allocation = Executorの 数を動的に調整可能 – StreamingのApplicationがトラフィックに合わせてスケール – spark-shell等が使わないリソースを確保し続けることもない – 4.0.0では面倒な設定が終えてあるので、すぐに利用可能! 55 https://spark.apache.org/docs/1.4.1/job-scheduling.html まとめ 56 Amazon EMRで分散処理 分散処理したいデータがあるなら、ボタン1つで今すぐに! 57 分散処理基盤 分散処理アプリケーション • 分散処理に必要なリソー スを簡単に調達/廃棄可能 • 複雑な設定無しに分散アプ リケーションを利用可能 参考資料(英語) • Amazon EMR Management Guide http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide • Amazon EMR Release Guide http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide • Amazon EMR API Reference http://docs.aws.amazon.com/ElasticMapReduce/latest/API/ • Amazon EMR Developer Guide (2.x and 3.x 向け) http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/ • AWS CLI emr http://docs.aws.amazon.com/cli/latest/reference/emr/index.html 58 Q&A 次回Webinarのお申し込み http://aws.amazon.com/jp/event_schedule/ 59 Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/ 60 公式Twitter/Facebook AWSの最新情報をお届けします 検索 @awscloud_jp もしくは http://on.fb.me/1vR8yWm 最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを 日々更新しています! 61 ご参加ありがとうございました。 62 Appendix 63 IAM Roleの指定が必須に • 2015年6月30日以降、IAM Roleを指定しないとク ラスタが起動できなくなった • IAM Roleは2種類、デフォルトで作成される – EMR role • Amazon EMRが、Amazon EC2を起動したりするのに必要な権限 – EC2 instance profile • Amazon EC2が、Amazon S3等にアクセスするのに必要な権限 64 http://aws.typepad.com/sajp/2015/06/emr-mandatory-iam-update.html