Slides in db tech showcase 2017
Copyright © 2017 Nautilus Technologies, Inc. All rights reserved.NAUTILUSIntroducing Retz2017/9/6db tech showcase 2017Kota Uenishi株式会社ノーチラス・テクノロジーズhttp://www.nautilus-technologies.com/mailto:[email protected]Tel: 03-6712-0636 Fax: 03-6712-0664Visit https://goo.gl/B7qhtE for online slides
View Slide
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 2はじめに■これは分散スケジューラMesosの紹介という、dbts 2016での発表の続編です■バッチジョブのよいスケジューラがない問題を解決するRetzというMesos Frameworkを開発し、OSSとして公開しました■Retzの機能と⽬的、事例などを紹介します
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 3SparkYARN■基幹業務システム向けのモデリング⾔語、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•テンプレート•実行エンジン•スモールジョブ実行エンジンApacheHadoopCDH MapR HDPAmazonEMRM3BPコンパイラ基幹業務向けバッチ開発フレームワーク Asakusa•Spark•コンパイラ
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 4コードを変更せずにエンジンを切り替えるクラウド分散環境分散処理フレームワーク商用ディストリビューションシングルノード並列環境並列処理フレームワーク&実行基盤M3BPクラウドサービスAmazon EMRAzure HDInsightデータフロー DSL / コンパイラインフラストラクチャ並列・分散処理ミドルウェア開発フレームワークリファレンス実装オンプレミスユースケースに合わせて必要な性能特性を持ったエンジンを利用する
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 5Asakusa 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ならエンジンを付け替えるだけでアプリの変更は不要
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 6スケジューラがない!■リソーススケジューラ(ジョブスケジューラ)がないとリソース利⽤率が上がらない≒常に余剰リソースを抱えることになる■Jenkins– 柔軟性が⾼くプラグインも豊富– ジョブキューとしては不⼗分■YARN (Apache Hadoop)– よくも悪くもHadoop系プロダクトがプライマリターゲット■Apache Mesos– 完成度が⾼い、⾃由度も⾼い– エコシステムも発達– ⾃分でスケジューラ作らないといけない
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 7Apache Mesosは何をしてくれるの?■リソース管理– 管理下の全てのマシンがどのような計算資源を持っているかを把握■ ⾃動認識 and ⼿動で指定– 各種計算資源の抽象化、数字化■ e.g., CPU=24, mem=128gb, disk=1024gb, gpu=4, …– 管理下のマシン(=計算資源)の死活監視■スケジューリング– アプリケーションに計算資源を割り当てる (Offer)– アプリケーションが利⽤を宣⾔(Accept)した計算資源上でタスクを起動– タスクのざっくりとした状態監視、成否の通知(Status update)
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 8タスク起動の仕組みMasterAgent ExecutorAgent ExecutorFrameworkScheduler1. Resource Offer2. Accept Offer3. Launch Task4. Fork & Exec4. Fork & Exec5. Status Update5. Status Update•Executorは daemon でもOK•Executorは ただのコマンドでもOK•Executorは Docker イメージでもOK•Framework SchedulerはMarathonで管理
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 9Mesos Framework API の基本的な使い⽅■Scheduler Interface でMesosからの通知を受け取る– Offerが来た– タスクが始まった / 終わった / 失敗した– Mesosと切れた– Agentが死んだ■Scheduler Driver でMesosにリクエストを送る– Offerを Accept / Decline する– Mesosとの接続を切るFrameworkScheduler DriverScheduler Interface callback
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 10Retz ( github.com/retz )■いわゆる「ジョブキュー」■ジョブを渡す→リソースが空いたら順番に実⾏してくれる■Mesos を使いやすくする– ⾮同期なScheduler APIを独⾃の同期APIに変換– Mesos API と UI の完全隠蔽を⽬指す– 業務⽤ジョブスケジューラのための実⽤性■機能– ジョブの登録、削除、⼀覧– マルチユーザー対応(Mesosのユーザー追加は⼤げさ…)– ジョブ優先制御、カスタムスケジューリング実装のプラグイン– GPUリソース、カスタム attributes 指定– Dockerコンテナ上での実⾏(Docker Volumesも)– 障害時の⾃動再実⾏
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 11RetzとMesosの関係■MesosはいわゆるMulti-layer scheduler■カーネルとアプリケーション(ライブラリ)の関係に似ているLinux Kernel Apache MesosUserlandProgramMesosFrameworkComputer ComputersCPU scheduling, Memory allocationEtc… MesosFramework APIPOSIX APISystem calls
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 12Retz の基本的な使い⽅■CUI / ライブラリを使ってAPIを同期的に呼び出す– ジョブ実⾏依頼– ジョブステータス確認– ジョブ強制終了– ジョブ結果取得UserprogramPOST /jobGET /job/12GET /job/12/file
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;■認可はまだない
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■ビルトインのスケジューリングアルゴリズムを増やしていきたい
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 15GPUリソース、カスタムリソース■NVIDIA GPUはMesosがネイティブ対応– CLIでは --gpu 2 などとして指定するだけ– ジョブ内では指定した本数しか⾒えなくなる■カスタムリソースはMesos AgentにAttributeとして都度定義する– Java API では利⽤可能– CLIでは未実装 (0.4.0~)– 組み込みのPlannerでは利⽤不可– カスタムPlannerで利⽤⽅法を⾃前で記述
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 16障害時の⾃動的な再実⾏■基本的にRetzが⾃動的に再実⾏– ジョブ実⾏中にMesos Agentが故障した場合– 実⾏中にMesos Master などが故障した場合– Retzが故障した場合■ Retzを再起動した時点でジョブの状態確認が⾛る■可能な限り⼆重実⾏を防ぐようにしているが、どうしても避けられないケースがあるのでアプリ側でも注意が必要■再実⾏されないケース– ジョブが終了したが⾮0を返した場合– ジョブがOOM等で終了した場合MasterFailureReschedule
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 17事例
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 18[email protected]さくらインターネット様 (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/
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 19[email protected]さくらインターネット様 (2/2)■サーバー台数– 20台以上 => 5台以下■⼀⽇のジョブ数– 最⼤で2000程度■ジョブの実⾏待ち時間– 多くが10~20分程度、中央値約8.2分■ジョブの実⾏時間– ほとんどが3分以内、中央値15.0秒
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 20Retz & Mesos @ Preferred Networks■社内⽤の実験環境■ハードウェア環境とソフトウェア・パッケージの組み合わせを指定したDockerの中で実験⽤プログラムを実⾏■Mesos の複雑なAPIを隠蔽してシンプルなジョブスケジューリングをしてくれる■耐障害性も担保されていて、タスクが失敗しても、ノードが故障しても⾃動的にRetzが再実⾏してくれる■⾃分たちの環境に合わせた独⾃のPlannerを作ってプラグインしている■Retzに多くのコントリビューションをしてくれています
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: 8mem: 16gpriority: 1timeout: 30https://github.com/retz/retz-digdag-plugin
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 22まとめ■バッチジョブスケジューラRetzの機能と事例を紹介■1台のマシンで動くジョブ:バッチ処理サーバーが m:n で沢⼭ある場合に⾼可⽤にジョブを実⾏できる■Asakusa / Spark / Digdag / Mesos の相性が⾮常によい【宣伝】ノーチラス・テクノロジーズでは• バッチ処理およびHadoopやSparkなど周辺システムのコンサルティング、受託開発、運用• Asakusa Frameworkの開発と運用の商用サポート• RetzおよびApache Mesosの商用サポートなどを行っています。お気軽にお問い合わせ下さい
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 23QUESTIONS?
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 24APPENDIX
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 25Roadmap (必要に応じて)■⾼可⽤性、耐障害性■Fair scheduling■DCOSパッケージ化
Copyright © 2017Nautilus Technologies, Inc. All rights reserved.NAUTILUS 26Retz & Mesosのプロセス構成Master AgentExecutorExecutorExecutorExecutorAgentExecutorExecutorExecutorExecutorAgentExecutorExecutorExecutorExecutor•….......FrameworkScheduler(Marathon)RetzZooKeeperZooKeeperZooKeeper