Slide 1

Slide 1 text

Copyright © 2017 Nautilus Technologies, Inc. All rights reserved. NAUTILUS Introducing Retz 2017/9/6 db tech showcase 2017 Kota Uenishi 株式会社ノーチラス・テクノロジーズ http://www.nautilus-technologies.com/ mailto:[email protected] Tel: 03-6712-0636 Fax: 03-6712-0664 Visit https://goo.gl/B7qhtE for online slides

Slide 2

Slide 2 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 2 はじめに ■これは分散スケジューラMesosの紹介という、dbts 2016での発表 の続編です ■バッチジョブのよいスケジューラがない問題を解決するRetzという Mesos Frameworkを開発し、OSSとして公開しました ■Retzの機能と⽬的、事例などを紹介します

Slide 3

Slide 3 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 3 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 4

Slide 4 text

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

Slide 5

Slide 5 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 5 Asakusa on M3BP開発の背景 ■単体コンピュータの性能が上がってきた – NUMA時代: RAMは 512GB ~ 2TB – 2ソケット、22コア、HTT が当たり前に ■ e.g. Xeon E7-8894 v4 は 24コア(48 w/ HTT) – データが全てメモリに乗る規模なら、マルチコアを使いこなせばスケー ルアップでバッチ処理の性能向上が簡単にできる時代に – バスの通信はDC内のネットワーク通信よりも1000倍速い ■重要なバッチ処理のうち、少なくない割合がビッグデータではない ■個別対応ではなくフレームワークでの対応が望ましい – アプリケーションを書き換えるのは難しい – Spark local modeはJVM – バスがネックになるレベルだと JVMはGC と reference hellが… – Asakusaならエンジンを付け替えるだけでアプリの変更は不要

Slide 6

Slide 6 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 6 スケジューラがない! ■リソーススケジューラ(ジョブスケジューラ)がないとリソース利 ⽤率が上がらない≒常に余剰リソースを抱えることになる ■Jenkins – 柔軟性が⾼くプラグインも豊富 – ジョブキューとしては不⼗分 ■YARN (Apache Hadoop) – よくも悪くもHadoop系プロダクトがプライマリターゲット ■Apache Mesos – 完成度が⾼い、⾃由度も⾼い – エコシステムも発達 – ⾃分でスケジューラ作らないといけない

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 8 タスク起動の仕組み 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 9

Slide 9 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 9 Mesos Framework API の基本的な使い⽅ ■Scheduler Interface でMesosからの通知を受け取る – Offerが来た – タスクが始まった / 終わった / 失敗した – Mesosと切れた – Agentが死んだ ■Scheduler Driver でMesosにリクエストを送る – Offerを Accept / Decline する – Mesosとの接続を切る Framework Scheduler Driver Scheduler Interface callback

Slide 10

Slide 10 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 10 Retz ( github.com/retz ) ■いわゆる「ジョブキュー」 ■ジョブを渡す→リソースが空い たら順番に実⾏してくれる ■Mesos を使いやすくする – ⾮同期なScheduler APIを独⾃の同期APIに変換 – Mesos API と UI の完全隠蔽を⽬指す – 業務⽤ジョブスケジューラのための実⽤性 ■機能 – ジョブの登録、削除、⼀覧 – マルチユーザー対応(Mesosのユーザー追加は⼤げさ…) – ジョブ優先制御、カスタムスケジューリング実装のプラグイン – GPUリソース、カスタム attributes 指定 – Dockerコンテナ上での実⾏(Docker Volumesも) – 障害時の⾃動再実⾏

Slide 11

Slide 11 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 11 RetzとMesosの関係 ■MesosはいわゆるMulti-layer scheduler ■カーネルとアプリケーション(ライブラリ)の関係に似ている Linux Kernel Apache Mesos Userland Program Mesos Framework Computer Computers CPU scheduling, Memory allocation Etc… Mesos Framework API POSIX API System calls

Slide 12

Slide 12 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 12 Retz の基本的な使い⽅ ■CUI / ライブラリを使ってAPIを同期的に呼び出す – ジョブ実⾏依頼 – ジョブステータス確認 – ジョブ強制終了 – ジョブ結果取得 User program POST /job GET /job/12 GET /job/12/file

Slide 13

Slide 13 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 13 マルチユーザー ■Retzに対するアクセス権(クラスタのリソース使⽤権)を正しく管 理することが⽬的 ■User Name / Access Secret のペアでユーザーを管理 ■他⼈のジョブの内容や結果などは⾒せない ■リソース分離をする ■AWSっぽいAPI 認証 – HTTP Authorizationヘッダを利⽤ – Authorization: Retz-auth-v1 AccessKey:Signature – Signature = Base64( HMAC-SHA1( YourAccessSecret, UTF- 8-Encoding-Of( StringToSign ) ) ); – StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Date + "\n" + Resource; ■認可はまだない

Slide 14

Slide 14 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 14 カスタマイズ可能なスケジューリング ■デフォルトはFIFO – retz.planner.name = fifo ■優先制御も可能 – ジョブに優先度を指定するフィールドがある – retz.planner.name = priority ■複雑なスケジューリングアルゴリズムをプラグイン可能 – 実装例: Github.com/retz/retz-random-planner – retz.planner.name = com.example.your.own.MyPlanner – retz.classpath = /opt/path/to/your/classes ■ビルトインのスケジューリングアルゴリズムを増やしていきたい

Slide 15

Slide 15 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 15 GPUリソース、カスタムリソース ■NVIDIA GPUはMesosがネイティブ対応 – CLIでは --gpu 2 などとして指定するだけ – ジョブ内では指定した本数しか⾒えなくなる ■カスタムリソースはMesos AgentにAttributeとして都度定義する – Java API では利⽤可能 – CLIでは未実装 (0.4.0~) – 組み込みのPlannerでは利⽤不可 – カスタムPlannerで利⽤⽅法を⾃前で記述

Slide 16

Slide 16 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 16 障害時の⾃動的な再実⾏ ■基本的にRetzが⾃動的に再実⾏ – ジョブ実⾏中にMesos Agentが故障した場合 – 実⾏中にMesos Master などが故障した場合 – Retzが故障した場合 ■ Retzを再起動した時点でジョブの状態確認が⾛る ■可能な限り⼆重実⾏を防ぐようにしているが、どうしても避けられ ないケースがあるのでアプリ側でも注意が必要 ■再実⾏されないケース – ジョブが終了したが⾮0を返した場合 – ジョブがOOM等で終了した場合 Master Failure Reschedule

Slide 17

Slide 17 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 17 事例

Slide 18

Slide 18 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 18 Retz@さくらインターネット様 (1/2) ■データセンターの原価計算システム [1] – ⽣データ 500GB / day – ⽇次で数百ジョブ、⽉次で数百ジョブ ■ Asakusa on Spark から Asakusa on M3BP に移⾏ – 全てのジョブがインメモリで処理できる程度にコンピュータの性能が向 上してきた – YARNのようなスケジューラーがないのでMesos – いざというときもMesos上でSparkを⾛らせることができる – Sparkだと数⼗分かかるジョブもあった •MapR FS •YARN (Apache Hadoop) •Asakusa on Spark •Jenkins •MapR FS •Retz / Apache Mesos •Asakusa on M3BP •Digdag [1] http://knowledge.sakura.ad.jp/event/3766/

Slide 19

Slide 19 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 19 Retz@さくらインターネット様 (2/2) ■サーバー台数 – 20台以上 => 5台以下 ■⼀⽇のジョブ数 – 最⼤で2000程度 ■ジョブの実⾏待ち時間 – 多くが10~20分程度、中央値約8.2分 ■ジョブの実⾏時間 – ほとんどが3分以内、中央値15.0秒

Slide 20

Slide 20 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 20 Retz & Mesos @ Preferred Networks ■社内⽤の実験環境 ■ハードウェア環境とソフトウェア・パッケージの組み合わせを指定 したDockerの中で実験⽤プログラムを実⾏ ■Mesos の複雑なAPIを隠蔽してシンプルなジョブスケジューリング をしてくれる ■耐障害性も担保されていて、タスクが失敗しても、ノードが故障し ても⾃動的にRetzが再実⾏してくれる ■⾃分たちの環境に合わせた独⾃のPlannerを作ってプラグインして いる ■Retzに多くのコントリビューションをしてくれています

Slide 21

Slide 21 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 21 最後にひとつ: Retz Digdag Plugin ■DigdagのワークフローをRetz経由でMesos上で実⾏する – RetzのJavaクライアントでプログラミングしなくてよい – RetzのCLIを覚える必要がない – 結局ワークフローにして運⽤するので ■こんな感じでワークフローに組み込める +simple_app: retz_run>: /opt/app/simple-app.sh +heavy_batch: retz_run>: /opt/app/heavy-batch.sh ${session_date} cpu: 8 mem: 16g priority: 1 timeout: 30 https://github.com/retz/retz-digdag-plugin

Slide 22

Slide 22 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 22 まとめ ■バッチジョブスケジューラRetzの機能と事例を紹介 ■1台のマシンで動くジョブ:バッチ処理サーバーが m:n で沢⼭ある 場合に⾼可⽤にジョブを実⾏できる ■Asakusa / Spark / Digdag / Mesos の相性が⾮常によい 【宣伝】ノーチラス・テクノロジーズでは • バッチ処理およびHadoopやSparkなど周辺システムのコンサルティ ング、受託開発、運用 • Asakusa Frameworkの開発と運用の商用サポート • RetzおよびApache Mesosの商用サポート などを行っています。お気軽にお問い合わせ下さい

Slide 23

Slide 23 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 23 QUESTIONS?

Slide 24

Slide 24 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 24 APPENDIX

Slide 25

Slide 25 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 25 Roadmap (必要に応じて) ■⾼可⽤性、耐障害性 ■Fair scheduling ■DCOSパッケージ化

Slide 26

Slide 26 text

Copyright © 2017Nautilus Technologies, Inc. All rights reserved. NAUTILUS 26 Retz & Mesosのプロセス構成 Master Agent Executor Executor Executor Executor Agent Executor Executor Executor Executor Agent Executor Executor Executor Executor •…....... Framework Scheduler (Marathon) Retz ZooKeeper ZooKeeper ZooKeeper