asakusa framework 歴史探訪 & ここ最近の新機能
TRANSCRIPT
NAUTILUS 1
Akira, KAWAGUCHINautilus Technologies, Inc.
Asakusa Framework 歴史探訪 & ここ最近の新機能
2014/7/11 Asakusa Framework 勉強会 2014夏
NAUTILUS 2
n 川⼝口 章– ノーチラス・テクノロジーズ 所属
– Twitter: @apirakun
n Asakusa Framework – 開発当初から参画
n 開発環境, テストツール系の開発
n ビルド, テスト, ドキュメント整備
– リリースマネージャーを担当
⾃自⼰己紹介
NAUTILUS 3
今⽇日のテーマ
n 歴史探訪 – Asakusa Framework の進化の歴史を辿る
– 各機能が誕生した背景や位置づけを紹介
n ここ最近の新機能 – Version 0.6.xで追加された主な機能を紹介
– Version 0.7.0で予定されている追加機能を紹介
NAUTILUS 4
Asakusa Framework 歴史探訪
Asakusa Framework リリースの軌跡を辿る
NAUTILUS 5
リリースサイクル
n おおよそ 2-3ヶ月毎にリリース – 2011/3: 初版 (Version 0.1.0) リリース
– 2014/5: 最新版 (Version 0.6.2)リリース n これまでに 計16回のリリース – 加えてJinrikisha, shafuなどの周辺プロダクトのリリース
NAUTILUS 6
Asakusa Frameworkの誕生
n 分散バッチ処理用フレームワーク – 複雑なデータ構造/データフロー向けの機能セット
– 外部データ連携、バッチ実行処理と統合
n Asakusa DSL – 3層のDSL (演算子, データフロー, バッチ)
n DSL仕様は当初からほぼ変わらず現在に至る
n DSLコンパイラ – Hadoop用の実行モジュール(MapReduce Application)
– 外部データ連係、バッチ実行モジュールの定義情報
Version 0.1.0 <2011/03>
NAUTILUS 7
Asakusa Frameworkの誕生 Version 0.1.0 <2011/03>
n ThunderGate – 外部システムとのデータ連携
– MySQL向け最適化/差分更新/排他制御/エラーリカバリ
n バッチ実行管理
– 試験的なスクリプト (experimental.sh)
– DSLコンパイラの拡張で外部ツールと連携 » MonkeyMagic
n TestDriver – DSL単位/データ指向の自動テスト機構
n 現在は当初のコンセプトを維持しつつ、多くの拡張が追加
NAUTILUS 8
DMDL
n データモデルの作成に関する諸問題 – 当初はDDLからモデルを生成する機能を提供
n DDLでのモデル定義は生産性やメンテナンス性に問題 n モデル生成機構がThunderGateと密結合
n DMDLの誕生 – データモデルクラスを定義するための言語
n Hadoop(MapReduce)の実装を隠蔽 n シンプルな記述/定型的な処理を自動生成 n 外部システム連携モジュール向けのプラグイン機構に対応したコンパイラ
Version 0.2.0 <2011/06>
NAUTILUS 9
WindGate
n ポータビリティに関する諸問題 – ThunderGateは前提となる構成を強く規定
n MySQLのみに対応、テーブル構造を規定 n DBサーバとHadoopクラスタをSSH接続で連携 n 既存環境へのインテグレーションに多くの課題
n WindGateの誕生 – JDBCインターフェース/標準SQLのみを使用 – テーブル, カラム構造を規定しない – ローカルファイル(CSV)にも対応
Version 0.2.2 <2011/09>
NAUTILUS 10
YAESS
n バッチ実行に関する諸問題 – 試験用スクリプトの機能不足
n 排他制御、ロギング、配置構成, ...
n DSLコンパイラの最適化を活かせない (並列ジョブ実行)
n ジョブ実行管理ツール (統合運用管理システム) との連携
n YAESSの誕生 – YAESSプロファイル: 汎用的な実行環境定義の機構
– 並列ジョブ実行: ParallelJobScheduler
– 外部連携用のワークフロー記述やCLIオプション
Version 0.2.3 <2011/11>
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>
NAUTILUS 12
Jinrikisha (人力車)
n 開発環境に関する諸問題 – 環境構築が煩雑
n 依存プロダクトのインストールや設定
n Linux環境に精通していないユーザ
n 手軽にAsaksuaの開発が試せる環境がほしい
n Jinrikishaの誕生 – シンプルな手順で多くのセットアップ作業を自動化
– Linuxに加え, 試験的にMacOSXに対応
Jinrikisha Version 0.1.0 <2012/02>
NAUTILUS 13
マルチクラスタ
n スモールジョブ実行に関する諸問題 – Asakusaは複雑なデータフローを現実的に実装可能
n 非常に多くのHadoopジョブが多段で構成される n 小さなデータを扱うジョブ(スモールジョブ)も多く含まれる n スモールジョブの分散オーバーヘッドが及ぼす性能問題が顕著に
n YAESSマルチクラスタの誕生 – 小さいジョブを非分散モード(スタンドアロン)で動作 – 大きいジョブ/小さいジョブの実行環境を振り分け – スタンドアロンモード上の実行制御 (JobQueue)
Version 0.2.6 <2012/03>
NAUTILUS 14
安定版
n 安定性とメンテナンス性の向上に注力 – DSLコンパイラのチューニング – 網羅的なテスト実施
n 地味だが重要な機能の拡充 – YAESS DryRun – YAESS ログ整備 – アプリケーションのサブモジュール機構
n ドキュメントの拡充
Version 0.4.0 <2012/08>
NAUTILUS 15
展開の時代
n 対応プラットフォーム – Hadoop2系の対応を開始, Gradle対応, Java7対応, ...
n Node0 DBR – クラウド環境上のAsakusaプラットフォームサービス
n ユーザフィードバックによる改善 – コンパイラ, バッチ実行エラーのメッセージ改善 – テストデータ定義シートのExcel2007形式サポート
n 周辺ツール – DMDL Editor
Version 0.5.X <2013/05~2013/12>
NAUTILUS 16
Asakusa Framework ここ最近の新機能
Version 0.6 系で追加された主な機能を紹介
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>
NAUTILUS 18
エミュレーションモード
n TestDriverでHadoopをインプロセスで実行 – データフローに対するテスト時のデバッグ
n TestDriverで演算子のブレークポイントを利用可能
– カバレッジツールとの連携 n Gradleを利用する場合はJacoco Pluginがオススメ
– テストが高速に実行 n Hadoop実行のオーバーヘッドが削減
n メモリを多く消費するのでメモリ不足エラーに注意
Version 0.6.1 <2014/03>
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>
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>
NAUTILUS 21
Asakusa Framework 直近のリリース予定機能
Version 0.7.0で予定されている追加機能を紹介
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>
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連携を試用
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>
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>
NAUTILUS 26
テスト機能の強化
n TestDriverの追加機能いろいろ – Excelシートの「数式」に対応
n テストデータの定義に数式が使えるようになる – 従来まではエラー扱いとしていた
– 検証ルールの追加 n 範囲指定、以上/以下などのルールで検証
– 検証エラー時のメッセージを見やすく n メッセージに原因特定に有用な多くの情報を出力
Version 0.7.0 <2014 Summer>
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>
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