【レポート】 ETL をサーバーレスで実現する新サービス AWS Glue のご紹介/AWS Solution Days 2017 ~AWS DB Day~ #AWSDBDay

2017.07.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

main_solutionday2017_DB

2017年07月05日(水)に、大崎ブライトコアホールにて『AWS Solution Days 2017』なるイベントが開催されました。

イベントのコンセプトは以下(イベント紹介サイトより抜粋)。当エントリでは『ETL をサーバーレスで実現する新サービス AWS Glue のご紹介』セッションの模様をレポートします。

本イベントは、「データベース移行」と「データレイク(ビッグデータ活用)」の2つをテーマとして、AWSのデータベースサービスにまつわる最新の技術情報とユーザー活用事例をIT技術者の皆様にお届けします。

ちなみに当イベントはプレス参戦となりました。一部写真を交えた形でお送り致します。

aws-solution-days-2017-press

目次

 

セッションレポート

登壇者及びセッションの内容詳細は以下の通りです。

登壇者名:
下佐粉 昭(アマゾン ウェブ サービス ジャパン 株式会社 ソリューションアーキテクト)
セッション概要:
AWS では、データレイクの Amazon S3、DWH サービスである Amazon Redshift、Hadoop/Spark 基盤である Amazon Elastic MapReduce、BI サービスである Amazon QuickSight 等の多様なサービスでビッグデータ分析のための環境をご用意しております。

このファミリーに新しく加わるのが AWS Glue で、各種データソース (DB) からデータを取り出し (Extract)、変形し (Transform)、別のデータソースに投入する (Load) を行う ETL 処理をサーバーレスで実現する新サービス (現在 preview 中) です。このセッションでは AWS Glue の概要、特長やその機能についてご説明します。

aws-solution-days-2017-glue_01

 

はじめに

AWS Glueは現在(2017年07月05日現在)プレビュー中のリリース状況であるため、下記の形で断り書きが伝えられていました。

aws-solution-days-2017-glue_02

 

データレイクを中心とした大規模データ分析基盤

クラウド上での大規模データ分析

  • (1).データをデータレイクに集め、多様な分析に繋げる
  • (2).分析はスケールアウト可能なインフラの上で実現

作業としては大きく4つのフェーズに分類出来る。

  • 収集:データを収集、データレイクへ格納
  • 保存:全期間保存、共通APIでアクセス
  • 分析:スケールアウト可能な技術で展開
  • 可視化

データレイクとは?特徴は以下の様なものが挙げられる。

  • 多様なデータを一元的に保存
  • データを失わない
  • サイズ制限からの開放
  • 決められた方法(API)ですぐにアクセスできる

データレイクの実現にはAmazon S3を用いる。サイジング不要で高い耐久性、そして安価(10TB保存しても月約2.1万円)。

aws-solution-days-2017-glue_03

データレイク構築には「スケールアウト」(システムを構成するサーバーの台数を増やすことで、システムの処理能力を高めること)が鍵。

スケールアップもスケールアウトもクラウドでは容易だが、スケールアップにはCPUやメモリに限界もある。スケールアウト可能なテクノロジーを採用する事で、"規模の増加"にも耐えうる設計が行える。

スケールアウトが高価、という風に誤解しがちな部分もあるが実はそうでも無い。ノードを増やしても利用時間が短くなれば結果としてコストは同じ。

ユーザー操作でスケールアウト可能なAmazon Redshift、Amazon EMR、自動的にスケールアウトするAmazon Athenaといったサービスを活用する事で、スケールアウト可能なインフラ環境を備えたデータレイクを作成する事が可能。「収集」及び「プリプロセス」の部分が現時点では空きの状態となっているが、この部分にAWS Glueがハマる形となる。

aws-solution-days-2017-glue_05

 

クラウド上のETL - AWS Glue

「収集」及び「プリプロセス」の部分にAWS Glueが収まる事により、ビッグデータ分析基盤をサーバレスで実現する事が可能となる。

aws-solution-days-2017-glue_06

内部的にはSparkを採用しているという事で仕組み的にはAmazon EMRと近しい部分があるが、両者の比較をするとこのような形となる。

aws-solution-days-2017-glue_07

 

AWS Glueの機能

AWS Glueの全体像は以下のようなものとなる。

  • データソースをクローラでクローリングし、メタデータを取得
    • クローラ:ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラム。
    • クローラ - Wikipedia
  • メタデータはデータカタログで管理
    • メタデータ:データについてのデータという意味で、あるデータが付随して持つそのデータ自身についての付加的なデータを指す。例)データの作成日時や作成者、データ形式、タイトル、注釈など
    • メタデータ - Wikipedia
  • メタデータを元にジョブを作成(ジョブ作成にはPySparkを用いる)
  • ジョブはサーバレスな環境で実行される

aws-solution-days-2017-glue_08

そして、AWS Glueは、以下の3つの要素によって構成される。

データカタログ
Hiveメタストア互換のデータソース用メタデータリポジトリ
テーブルやデータ型、パーティションフォーマットを推測する為にソースをクロールする
ジョブオーサリング
ETL処理のためのPythonコード(PySpark)を生成
任意のIDEでコードを作成可能
オーケストレーション
オートスケール:複数インスタンスでジョブを実行
サーバレス:利用したリソース分だけの支払いとなる

 

Glueデータカタログ

aws-solution-days-2017-glue_09

  • Glue データカタログ
    • テーブルのメタデータをHiveメタストアで管理
    • 主な管理メタデータ
      • 列:プロパティ・型
      • データロケーション(URI)
      • 接続情報
      • 更新情報
    • クローラーによる自動チェックと登録を実施
  • クローラーによるデータカタログの自動更新
    • 自動的にスキーマを推測
      • 情報を分類(Classifier)しスキーマとして抽出
      • Grokフィルタでカスタマイズ可能
    • クローラーのスケジュール実行で新しいデータやスキーマ変更を検知
    • クローラーの手動実行も可能
    • ログはCloudWatch Logsに出力される
  • クローラーの対応データソース
    • Amazon RDS(Aurora, MySQL, MariaDB, PostgreSQL)
    • Amazon Redshift
    • EC2上のRDB(JDBC接続)
    • S3上のファイル(CSV, Avro, JSON等)
  • Classifier
    • 多様な種類を提供
    • 圧縮ファイルにも対応:zip, bzip2, gzip, lz4, Snappy(標準Snappy)
    • カスタムClassifierの作成も可能

aws-solution-days-2017-glue_13

 

ジョブオーサリング

aws-solution-days-2017-glue_10

  • 自動的なジョブコード生成
    • データソースとターゲットを指定し、ETLジョブを定義
    • GUIで定義を決定→PySparkのコードが出力される(基本的な処理のみならばコード編集は不要)
  • 柔軟な処理を提供するGlue ETLスクリプト
    • 人間が読める、編集しやすいコードを出力
    • PySparkのライブラリを活用
    • 任意のエディタで編集可能
    • 生成コードはETL図に連動したアノテーションが付与される

aws-solution-days-2017-glue_14

  • PySpark extensionと外部ライブラリ
    • 変換に用いた処理をPySparkのextensionとして用意(済のものがあるらしい)
    • 多彩な出力フォーマットに対応しており、プログラム不要
    • PySparkコード+ライブラリで柔軟な処理が実現可能に

 

オーケストレーション&リソース管理

aws-solution-days-2017-glue_11

  • ジョブの定義と実行
    • 作成したETLスクリプトを読み込んで実行(IAM Roleで権限設定)
    • ジョブの実行開始方法はAPIコール(手動),トリガーが用意されているとの事
    • リトライ制限の指定や、パラメータを渡す事が可能
    • 実行ログ・エラーログはCloudWatch Logsに出力
  • トリガー:ジョブ実行のタイミングを指定
    • 先行ジョブ完了時
    • スケジュール
    • オンデマンド
  • サーバレスのジョブ実行環境:以下の様な仕組みで実現

aws-solution-days-2017-glue_15

  • ジョブ実行時のVPC内へのアクセス
    • GlueはVPC外部のサービスだが、VPC内に存在する様に見える。
    • S3アクセスする場合はVPC Endpointの設定が必須となる

aws-solution-days-2017-glue_16

 

まとめ

という訳で、AWS上でサーバレスなETLを実現するサービス、AWS Glueに関する解説セッションのご紹介でした。現在プレビュー版という事でまだ一般公開・利用は出来ていない状況ですが、内容を見てみる限りだと非常に便利そうですね。PySparkも知識を身に付けておくとフル活用出来そうです。下記公式サイトよりプレビュー版利用申請が可能となっておりますので、気になる方は一般公開利用に先立ってAWS Glueをお試し活用してみてください。