Slide 1

Slide 1 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS Mesos Framework の作り⽅ Mesos勉強会 2016/8/4 株式会社ノーチラス・テクノロジーズ http://www.nautilus-technologies.com/ mailto:[email protected] Tel: 03-6712-0636 Fax: 03-6712-0664

Slide 2

Slide 2 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 2 ノーチラス・テクノロジーズ ■会社紹介をなんか書く ■Asakusa Frameworkという業務バッチ向けのDSLコンパイラを OSSで開発・提供しています ■他にもいろいろ開発・提供しようとしています ■コンパイラに詳しい⼈、データベースに詳しい⼈、分散システムに 詳しい⼈、業務に詳しい⼈、Javaに詳しい⼈などがいます

Slide 3

Slide 3 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 3 Apache Mesos: distributed systems kernel Mesosって何? 分散システムのカーネルだよ! Mesos は Linux カーネルと同じ原則で設計、開発されています。違うのは抽象化されているレベルだけです。 Mesos カーネルはあらゆるマシン上で動作し、 Hadoop, Spark, Kafka, Elastic Search といったアプリケーションに APIを通じて、データセンタ丸ごと、クラウド環境まるごとの上にリソース管理とスケジューリングを提供します。

Slide 4

Slide 4 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 4 カーネルだけでは何もできないよね! ■⽤途に応じて好きなアプリケーションを作っていいんです ■他の⼈が作ったライブラリ(フレームワーク)を使うもよし Linux Apache Mesos Userland Program Mesos Framework POSIX API Mesos API Computer Computers CPU scheduling, Memory allocation Etc…

Slide 5

Slide 5 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 5 Apache Mesosは何をしてくれるの? ■リソース管理 – 管理下の全てのマシンがどのような計算資源を持っているかを把握 ■ ⾃動認識 and ⼿動で指定 – 各種計算資源の抽象化、数字化 ■ e.g., CPU=24, mem=128gb, disk=1024gb, gpu=4, … – 管理下のマシン(=計算資源)の死活監視 ■スケジューリング – アプリケーションに計算資源を割り当てる (Offer) – アプリケーションが利⽤を宣⾔(Accept)した計算資源上でタスクを起動 – タスクのざっくりとした状態監視、成否の通知(Status update)

Slide 6

Slide 6 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 6 Mesosのプロセス構成 Master Agent Executor Executor Executor Executor Agent Executor Executor Executor Executor Agent Executor Executor Executor Executor •…....... Framework Scheduler C Framework Scheduler B Framework Scheduler A

Slide 7

Slide 7 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 7 タスク起動の仕組み Master Agent Executor Agent Executor Framework Scheduler 1. Resource Offer 2. Accept Offer 3. Launch Task 4. Fork & Exec 4. Fork & Exec 5. Status Update 5. Status Update •Executorは daemon でもOK •Executorは ただのコマンドでもOK •Executorは Docker イメージでもOK •Framework SchedulerはMarathonで管理

Slide 8

Slide 8 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 8 Mesos API Master Agent Executor Agent Executor Framework Scheduler 1. Resource Offer 2. Accept Offer 3. Launch Task 4. Fork & Exec 4. Fork & Exec 5. Status Update 5. Status Update Scheduler Driver API Executor Driver API Executor API Scheduler API

Slide 9

Slide 9 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 9

Slide 10

Slide 10 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 10 Spark YARN ■基幹業務システム向けのモデリング⾔語、DSLとコンパイラなどの 開発環境 ■基幹バッチ処理に必要なテスト・実⾏環境・運⽤環境 ■各種データベース、データ形式のドライバも同梱 ■各種分散処理システム、DAGエンジンに(順次)対応 n MapReduce, Spark 向けコードをAsakusaのコンパイラが⾃動⽣成・最適化 •データモデル定義 •外部システム連携 •Asakusa DSL •Operator DSL •自動テスト •バッチ実行ツール •Flow DSL •Batch DSL • MapReduce •コンパイラ •DMDL •DMDL •コンパイラ •TestDriver •ThunderGate •WindGate •Direct I/O •YAESS •EXCEL •テンプレート •実行エンジン •スモールジョブ 実行エンジン Apache Hadoop CDH MapR HDP Amazon EMR M3BP コンパイラ Asakusa: 基幹業務向けバッチ開発フレームワーク •Spark •コンパイラ

Slide 11

Slide 11 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 11 コードを変更せずにエンジンをを切り替える クラウド 分散環境 分散処理フレームワーク 商用ディストリビューション シングルノード 並列環境 並列処理 フレームワーク &実行基盤 M3BP クラウドサービス Amazon EMR Azure HDInsight データフロー DSL / コンパイラ インフラ ストラクチャ 並列・分散処理 ミドルウェア 開発 フレームワーク リファレンス実装 オンプレミス ユースケースに合わせて必要な性能特性を持ったエンジンを利用する

Slide 12

Slide 12 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 12

Slide 13

Slide 13 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 13 スケジューラがない! ■リソーススケジューラ(ジョブスケジューラ)がないとリソース利 ⽤率が上がらない≒常に余剰リソースを抱えることになる ■Jenkins – お、おぅ… ■YARN – よくも悪くもHadoop系プロダクトがプライマリターゲット ■Mesos – 完成度が⾼い、⾃由度も⾼い – エコシステムも発達 – ⾃分でスケジューラ作らないといけない

Slide 14

Slide 14 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 14 Frameworkを作ろう! ■Frameworkを作らないとMesosを使いきったとはいえない ■Scheduler クラスを継承してコールバックを実装 ■Scheduler driverを叩いて命令を伝える ■Executor クラスを継承してコールバックを実装 ■Executor driverを叩いて命令を伝える ■うごかす

Slide 15

Slide 15 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 15 Frameworkできたよ! ■Retz (れつ) ■ロゴは仮です(15分で作った) ■いわゆる「ジョブキュー」 ■ジョブを渡す→リソースが空いたら順番に実⾏してくれる

Slide 16

Slide 16 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 16 RetzScheduler.java import org.apache.mesos.Scheduler; import org.apache.mesos.SchedulerDriver; class RetzScheduler implements Scheduler { .. @Override public void resourceOffers( SchedulerDriver driver, List offers) { .. // ジョブをノードに割り当てる .. driver.acceptOffers(offerIds, operations, filters); } .. } Mesos Scheduler Driver RetzScheduler Resource offer as Callback Driver call Assigned jobs as tasks JobQueue Fetch jobs

Slide 17

Slide 17 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 17 Protos.Offer ■どこかの1台のMesos Agentが提供可能なリソース⼀覧 ■Slave – Slave IDなど ■Resources – CPU, メモリ, ディスク, ポート番号などAgentで設定したリソースがリ ストになっている – “ public int getCPU() “ などという⽢いメソッドはない ■IDEの補完で雰囲気を掴もう! ■データ構造は公式ドキュメントにJSONで掲載(Scheduler API, Executor API, Operator API)のところ

Slide 18

Slide 18 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 18 スケジューラーの起動と停⽌ ■Driverを new, stop するだけ import org.apache.mesos.MesosSchedulerDriver; import org.apache.mesos.Protos; .. .. Protos.FrameworkInfo fw = buildFrameworkInfo(conf); RetzScheduler scheduler = new RetzScheduler(conf, fw); MesosSchedulerDriver driver = new MesosSchedulerDriver(scheduler, fw, “mesos-master:5050”); driver.start(); driver.join(); .. // ⽌めたいときは driver.stop()

Slide 19

Slide 19 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 19 RetzExecutor.java import org.apache.mesos.Executor; import org.apache.mesos.ExecutorDriver; class RetzExecutor implements Executor{ .. @Override public void launchTask( ExecutorDriver driver, Protos.TaskInfo task) { driver.sendStatusUpdate(taskStartStatus); .. // タスクを同期的に実⾏ driver.sendStatusUpdate(taskEndStatus); } .. } Mesos Executor Driver Executor Job Info as Callback Report task status LocalProcessManager Fork/exec jobs

Slide 20

Slide 20 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 20 やりたいこと ■Mesos v1 API に対応(先週やっとリリースされてん…) ■NUMA awareness ■GPU対応? ■High Availability ■DC/OS対応 ■ジョブの実⾏結果保存

Slide 21

Slide 21 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 21 QUESTIONS?

Slide 22

Slide 22 text

Copyright © 2016 Nautilus Technologies, Inc. All rights reserved. NAUTILUS 22 内容 (30min) 1. 会社紹介 2. Mesosは スケジューラとリソース管理を分離 (Resource Offer) 1. Scheduler is 何 / リソース管理 is 何 3. ⽤途に合わせてスケジューラを個別に作る 4. Asakusa Frameworkのスケジューラの歴史 … エンジンに依存し ていた 1. MapReduce … JobTracker 2. Spark … YARN 3. M3BP … ??? ■ Retz: 作りたくないけど作るしかないか… – NUMA awareness / mesos-execute ではダメなのか? ■ 極めて簡単なジョブキューです ■ Roadmap: YARN / 各種コンテナ / GPGPU /