asakusa framework 歴史探訪 & ここ最近の新機能

28
NAUTILUS 1 Akira, KAWAGUCHI Nautilus Technologies, Inc. Asakusa Framework 歴史探訪 & ここ最近の新機能 2014/7/11 Asakusa Framework 勉強会 2014夏

Upload: apirakun

Post on 18-Jul-2015

1.292 views

Category:

Engineering


11 download

TRANSCRIPT

Page 1: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 1

Akira,  KAWAGUCHINautilus  Technologies,  Inc.

Asakusa Framework 歴史探訪 & ここ最近の新機能

2014/7/11  Asakusa  Framework  勉強会  2014夏

Page 2: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 2

n 川⼝口  章– ノーチラス・テクノロジーズ 所属

– Twitter: @apirakun

n Asakusa Framework – 開発当初から参画

n 開発環境, テストツール系の開発

n ビルド, テスト, ドキュメント整備

– リリースマネージャーを担当

⾃自⼰己紹介

Page 3: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 3

今⽇日のテーマ

n 歴史探訪 – Asakusa Framework の進化の歴史を辿る

– 各機能が誕生した背景や位置づけを紹介

n ここ最近の新機能 – Version 0.6.xで追加された主な機能を紹介

– Version 0.7.0で予定されている追加機能を紹介

Page 4: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 4

Asakusa Framework 歴史探訪

Asakusa Framework リリースの軌跡を辿る

Page 5: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 5

リリースサイクル

n おおよそ 2-3ヶ月毎にリリース – 2011/3: 初版 (Version 0.1.0) リリース

– 2014/5: 最新版 (Version 0.6.2)リリース n これまでに 計16回のリリース – 加えてJinrikisha, shafuなどの周辺プロダクトのリリース

Page 6: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 6

Asakusa Frameworkの誕生

n  分散バッチ処理用フレームワーク – 複雑なデータ構造/データフロー向けの機能セット

– 外部データ連携、バッチ実行処理と統合

n  Asakusa DSL –  3層のDSL (演算子, データフロー, バッチ)

n  DSL仕様は当初からほぼ変わらず現在に至る

n  DSLコンパイラ –  Hadoop用の実行モジュール(MapReduce Application)

– 外部データ連係、バッチ実行モジュールの定義情報

Version 0.1.0 <2011/03>

Page 7: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 7

Asakusa Frameworkの誕生 Version 0.1.0 <2011/03>

n  ThunderGate – 外部システムとのデータ連携

–  MySQL向け最適化/差分更新/排他制御/エラーリカバリ

n  バッチ実行管理

– 試験的なスクリプト (experimental.sh)

–  DSLコンパイラの拡張で外部ツールと連携 »  MonkeyMagic

n  TestDriver –  DSL単位/データ指向の自動テスト機構

n 現在は当初のコンセプトを維持しつつ、多くの拡張が追加

Page 8: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 8

DMDL

n データモデルの作成に関する諸問題 – 当初はDDLからモデルを生成する機能を提供

n DDLでのモデル定義は生産性やメンテナンス性に問題 n モデル生成機構がThunderGateと密結合

n DMDLの誕生 – データモデルクラスを定義するための言語

n Hadoop(MapReduce)の実装を隠蔽 n シンプルな記述/定型的な処理を自動生成 n 外部システム連携モジュール向けのプラグイン機構に対応したコンパイラ

Version 0.2.0 <2011/06>

Page 9: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 9

WindGate

n ポータビリティに関する諸問題 – ThunderGateは前提となる構成を強く規定

n MySQLのみに対応、テーブル構造を規定 n DBサーバとHadoopクラスタをSSH接続で連携 n 既存環境へのインテグレーションに多くの課題

n WindGateの誕生 – JDBCインターフェース/標準SQLのみを使用 – テーブル, カラム構造を規定しない – ローカルファイル(CSV)にも対応

Version 0.2.2 <2011/09>

Page 10: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 10

YAESS

n バッチ実行に関する諸問題 – 試験用スクリプトの機能不足

n 排他制御、ロギング、配置構成, ...

n DSLコンパイラの最適化を活かせない (並列ジョブ実行)

n ジョブ実行管理ツール (統合運用管理システム) との連携

n  YAESSの誕生 – YAESSプロファイル: 汎用的な実行環境定義の機構

– 並列ジョブ実行: ParallelJobScheduler

– 外部連携用のワークフロー記述やCLIオプション

Version 0.2.3 <2011/11>

Page 11: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 11

Direct I/O

n  多様なHadoop環境/アーキテクチャへの適応 – クラウド環境の利用 (Amazon EMR/S3) –  Hadoopエコシステムの利用 (Sqoop/ベンダ製ツール) –  Hadoopファイルシステムの別実装 (NFS/MapRFS) – クラスタ上のデータを使い回す(キャッシュ)

n  Direct I/Oの誕生 –  Hadoopファイルシステムに対して直接入出力

n 高速な入出力: 分散入出力, チューニングされたCSVパーサ n 柔軟な入出力: フィルター, ソート, キャッシュ設定 n データソース: 複数データソース, クラウドストレージ対応

Version 0.2.5 <2012/01>

Page 12: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 12

Jinrikisha (人力車)

n 開発環境に関する諸問題 – 環境構築が煩雑

n 依存プロダクトのインストールや設定

n Linux環境に精通していないユーザ

n 手軽にAsaksuaの開発が試せる環境がほしい

n  Jinrikishaの誕生 – シンプルな手順で多くのセットアップ作業を自動化

–  Linuxに加え, 試験的にMacOSXに対応

Jinrikisha Version 0.1.0 <2012/02>

Page 13: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 13

マルチクラスタ

n  スモールジョブ実行に関する諸問題 –  Asakusaは複雑なデータフローを現実的に実装可能

n 非常に多くのHadoopジョブが多段で構成される n 小さなデータを扱うジョブ(スモールジョブ)も多く含まれる n スモールジョブの分散オーバーヘッドが及ぼす性能問題が顕著に

n  YAESSマルチクラスタの誕生 – 小さいジョブを非分散モード(スタンドアロン)で動作 – 大きいジョブ/小さいジョブの実行環境を振り分け – スタンドアロンモード上の実行制御 (JobQueue)

Version 0.2.6 <2012/03>

Page 14: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 14

安定版

n 安定性とメンテナンス性の向上に注力 – DSLコンパイラのチューニング – 網羅的なテスト実施

n 地味だが重要な機能の拡充 – YAESS DryRun – YAESS ログ整備 – アプリケーションのサブモジュール機構

n ドキュメントの拡充

Version 0.4.0 <2012/08>

Page 15: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 15

展開の時代

n  対応プラットフォーム –  Hadoop2系の対応を開始, Gradle対応, Java7対応, ...

n  Node0 DBR – クラウド環境上のAsakusaプラットフォームサービス

n  ユーザフィードバックによる改善 – コンパイラ, バッチ実行エラーのメッセージ改善 – テストデータ定義シートのExcel2007形式サポート

n  周辺ツール –  DMDL Editor

Version 0.5.X <2013/05~2013/12>

Page 16: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 16

Asakusa Framework ここ最近の新機能

Version 0.6 系で追加された主な機能を紹介

Page 17: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 17

Gradle Plugin

n ビルドツールに「Gradle」を利用可能 – アプリケーション側で機能拡張を容易に

n シンプルで高機能なDSL, 依存性管理, プラグイン機構

– Framework側で機能拡張を加速 n 今後のビルドツールに関する機能追加はGradle中心

n Shafu – Gradleプロジェクト向けのEclipse Plugin

n Eclipseとコンソール間のいったりきたりが不要になる n ビルド後のAuto Refreshなど細かい点にも配慮 n Asakusa以外のプロジェクトでも使える

Version 0.6.0 <2014/02>

Page 18: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 18

エミュレーションモード

n TestDriverでHadoopをインプロセスで実行 – データフローに対するテスト時のデバッグ

n TestDriverで演算子のブレークポイントを利用可能

– カバレッジツールとの連携 n Gradleを利用する場合はJacoco Pluginがオススメ

– テストが高速に実行 n Hadoop実行のオーバーヘッドが削減

n メモリを多く消費するのでメモリ不足エラーに注意

Version 0.6.1 <2014/03>

Page 19: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 19

スモールジョブ最適化

n  タスク数を抑制するチューニングパラメータ –  com.asakusafw.input.combine.tiny.limit

n 特定Mapperの入力データサイズがこの設定値(Byte)を超える場合、そのMapperに対する入力スプリットを1つにまとめる

–  com.asakusafw.reducer.tiny.limit n 入力データサイズがこの設定値(byte)以下となる場合に、そのジョブのReduceタスク数を1に設定する

n  YARN (MRv2) の Uberモード –  データサイズやタスク数などのパラメータに応じて、タスクを自動的にシングルJVM上での実行に切り替えるスモールジョブ用の最適化機構

–  上記のパラメータを設定することで、Uberモードの発動条件に適合させることが可能

Version 0.6.2 <2014/05>

Page 20: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 20

その他0.6系追加機能

n  TestDriver –  Javaオブジェクトによるテストデータ指定

n  Excelを使わなくもテスト可能 n アプリケーション側でのテストフレームワーク実装

n  YAESS – ログの可視化ツール

n  CSVの出力=>Excelで表示 n 実行時間の傾向を簡易的に分析

n  Direct I/O – 入力データが無くても処理を続行するオプション

n  YARN (MRv2) 上での安定性向上

Version 0.6.X <2014/02~2014/05>

Page 21: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 21

Asakusa Framework 直近のリリース予定機能

Version 0.7.0で予定されている追加機能を紹介

Page 22: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 22

SQL-on-Hadoop連携

n  SQL-on-Hadoop (Hive, Impala, Presto, Drill, ...) –  Hadoop上のデータをSQLで操作するクエリエンジン – パフォーマンス

n  MapReduceを使わない機構(インメモリ, ネイティブ実装, ...) n カラムナストレージフォーマットの対応

– ポータビリティ n 標準SQLのクエリ (プロダクトにより対応レベルは異なる) n  ODBC/JDBCアダプタ

– 主にインタラクティブなクエリ操作向け n バッチ処理のような複雑なデータ編集処理には向いていない

n  Asakusa Frameworkのアプローチ –  SQL-on-Hadoopとカラムナフォーマットによるデータ連携

Version 0.7.0 <2014 Summer>

Page 23: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 23

Direct I/O Hive (ORC/Parquet) Version 0.7.0 <2014 Summer>

n  Direct I/Oでカラムナ形式のファイル入出力

–  ORCFile

–  Parquet

n  DMDLでHiveメタストア登録用のDDL生成

–  Gradle Pluginの追加タスクとして提供

n  DMDLと互換性の無いデータ型に対する変換機構

–  Parquetで未対応のDECIMALやDATEを文字列として扱う

n  JinrikishaにHiveを同梱 – 手軽にSQL on Hadoop連携を試用

Page 24: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 24

SQL-on-Hadoop連携図

Asakusa Batchapp

ORCFile Parquet

Hadoop SQL Engine (Hive, Impala, Presto, Drill, ...)

MetaStore

Asakusa DSL

DDL

SQL Client (CLI, Hue, ...)

HDFS

Direct I/O

Version 0.7.0 <2014 Summer>

Page 25: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 25

Hadoop2系 正式対応

n Hadoop1系/Hadoop2系の両方をGA扱い

n バージョン体系の変更 – 従来 (0.6.2 以前)

n Hadoop1系: 0.6.2

n Hadoop2系: 0.6.2-hadoop2 (experimental)

– 0.7.0 以降 n Hadoop1系: 0.7.0-hadoop1 n Hadoop2系: 0.7.0-hadoop2

Version 0.7.0 <2014 Summer>

Page 26: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 26

テスト機能の強化

n TestDriverの追加機能いろいろ – Excelシートの「数式」に対応

n テストデータの定義に数式が使えるようになる – 従来まではエラー扱いとしていた

– 検証ルールの追加 n 範囲指定、以上/以下などのルールで検証

– 検証エラー時のメッセージを見やすく n メッセージに原因特定に有用な多くの情報を出力

Version 0.7.0 <2014 Summer>

Page 27: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 27

その他0.7系追加機能

n  Version 0.7.0で予定されている追加機能 – CoGroup演算子で外部バッファ利用時の性能向上

n  InputBuffer.ESCAPE 指定時の動作を改善

– ランタイムライブラリファイルのキャッシュ n ライブラリサイズや数が大きい場合に有効

– Gradle PluginのIntelliJ IDEA対応 n  ideaタスクの拡張 (Asakusa向けの追加設定を自動生成)

– Direct I/O CSVの自動トリム n 文字列とBOOLEAN以外のデータ型は入力時に自動でトリム

Version 0.7.0 <2014 Summer>

Page 28: Asakusa Framework 歴史探訪 & ここ最近の新機能

NAUTILUS 28

Asakusa Framework Links

n Document – http://asakusafw.s3.amazonaws.com/

documents/latest/release/ja/html/index.html

n Community Web Site – http://www.asakusafw.com

n GitHub – http://github.com/asakusafw/asakusafw