Dec 31, 2014

2014年のまとめ

2014年のまとめ.

  • CROSS 2014 に個人で分散処理セッションでパネルディスカッション参加.@draftcode さんに会えた(CROSS のとき質問してもらったのだが,後日なべ会で再会した).
  • 筑波大学にて特別講義.
  • 日本OSS奨励賞受賞.
  • DEIM に初参加(DB 学会自体が初参加).
  • Hadoop 2 について日経SYSTEMS に寄稿(現在 ITPro から閲覧可能).
  • 情報処理学会 OS研究会の運営委員に就任.
  • SWOPP 2014 に座長として参加.
  • Hadoop Summit 2014,Hadoop World・Strata Conference 2014 に参加.ほとんどの Hadoop 開発者には覚えられてて良かった.オフラインであーだこーだ話すのは楽しい.
  • ビッグデータ処理基盤勉強会に参加.
  • Apache Hadoop の Committer 就任.

来年も宜しくお願いします.


Aug 1, 2014

Coordination Service(ZooKeeper,etcd ,consul) の比較

概要


最近,consul,etcd,ZooKeeper といった,いわゆる Coordination Service(この名前は ZooKeeper の論文から拝借した)の実装が頻繁に行われている.本記事では,開発が盛んな背景を踏まえた上で,オープンソース実装の Coordination Service の比較を行う.

Chubby から現在まで


Paxos が Google の手によって Chubby という形で実用化された後,故障検出+分散合意アルゴリズムを用いた高可用KVSという組み合わせによる Coordination Service のオープンソース実装がいくつが出てきた.そのはしりが ZooKeeper である.ZooKeeper は Hadoop ファミリではデファクトスタンダードの Coordination Service であり,Hadoop を初めとして HBase,Mesos,Flume などのプロジェクトや,多くの企業で実際に使われている.その後,しばらく新しい Coordination Service のオープンソース実装はでてきていなかった.それが,2013年に Raft という分散合意アルゴリズムが公開されて以降,一気に情勢が変わった.consuletcd などが公開されたのである.Raft は,ざっくばらんに言うと実装が簡単な Paxos である.実装がどれくらい容易であるかは,実装数を見れば明らかであろう

ZooKeeper と etcd と consul


複数の実装が出てくることで競争が発生しソフトウェアが成熟してくれるのは喜ばしいことである.しかしながら,利用する側から見ると,どういった観点で何を利用したら良いのかが自明ではない.そこで本節では,分散処理基盤の開発者という視点で比較を行う.

ZooKeeper は,以下の特徴を持つ Coordination Service である.まず,Paxos ベースの分散合意アルゴリズムである Zab  を利用しており,サーバ側の台数の増加に対し,読み込みがスケールする形で設計されている.また,Chubby の持っているファイルシステムのような API を拡張し,その API の上で様々な分散コンポーネントが構成可能である.特に,ephemeral node(クライアントが故障した際に消滅するznode) や sequential node(連番生成機能を行うためのznode),watcher(特定のznodeおよびその子のznodeに対する変更を通知する仕組み),multi(複数のznodeをアトミックに操作する仕組み) を用いることで幅広いアプリケーションを構築可能となっている.サーバ側で起きた全てのイベント(ephemeral node の消滅,増加およびその他 znode への書き込み)はどのクライアントから見て同じ順番で通知されることが保証されているため,妙なコーナーケースについて考える必要がない.
Server-Client は jute というシリアライゼーション形式と TCP コネクションに基づいた RPC で行われているため,実装コストが他の実装に比べて高いという欠点がある(この問題を解消するため,4.0.0 リリースに向けて protobuf などで置き換えようというチケットがある).

etcd, consul は,Paxos ベースの分散合意アルゴリズムである Raft を利用しており,台数を増やしても書き込みも読み込みもスケールしない.また,ZooKeeper の API を踏襲しつつも,クライアントの実装コストを減らすために RESTful API が提供されている.これにより,クライアントの実装コストを大幅に削減できている.etcd, consul は両方とも,ephemeral node がないので,定期的にポーリングしてメンバシップの変更があったかどうかを自分で検出する必要がある(etcd も consul も,ephemeral node は fat client の原因になるので入れたくないと述べている.etcd のgithub issueconsul のHP参照.).このため,分散ロックなどの複雑な機能をバグなく作成する用途では,ZooKeeper の方が優れているように思う.もしくは,etcd,consul 版の Curator (ZooKeeper で使いたくなるような機能をまとめたライブラリ.当初は Netflix が作成し現在は Apache プロジェクト化) が出てきて,利用されるようになる可能性はある.

これに加え,consul にはいくつか大きな特徴がある.死活監視機能と DNS インタフェースである.まず死活監視機能だが,gossip protocol によるクライアントの死活監視機能とRaftベースの高可用KVSにregistrationすることによる死活監視機能の2つがあるという点である.gossip protocol によるクライアントの死活監視は一貫性が弱く,クライアント数の増加に対してスケーラブルである.この情報にアクセスするには, agent endpoint と利用する.一方で,高可用KVSによる死活監視機能は一貫性が強く,クライアントの増加に対しては gossip protocol による死活監視と比較してスケーラブルではない.この情報にアクセスするには catalog endpoint にアクセスをする.consul では,この2つを使い分けることで,強い一貫性を必要とする分散システムの構築(分散ロックなど)と,スケーラビリティを必要とする分散システムの構築(Web サービスのデプロイなど)の両方に対応しようとしているようにみえる.DNS インタフェースについては,register したノードに対して dig や nslookup でアクセスできるというものである.Chubby の論文の中でも,DNSライクに利用することについて触れられているので,この使い方は Coordination Service としては王道なように思える.

まとめ


本記事では,Chubby から ZooKeeper,そして Raft ベースの Coordination Service の流れをまとめて説明した上で,機能の比較を行った.ZooKeeper,etcd/consul の大きな違いは API(RESTful API が提供されているか否か)と ephemeral node の有無である.さらに,consul には,従来の Coordination Service の機能に加え,gossip protocol を用いた弱い一貫性のクライアント死活監視と,DNS インタフェースが用意されている.これらの特性の違いから, Coordination Service はAPIやスケーラビリティによって使い分けることが必要であるため,用途をよく理解した上でどれか1つを選択する必要がある.

知っている情報を,ソースを明らかにした上で述べたつもりですが,もし誤っている箇所などありましたら,ご指摘お願いします.

Mar 25, 2014

日経 SYSTEMS 4月号のテクノロジー最前線と技術評論社改訂版Linux エンジニア養成読本に寄稿しました

2014年3月26日発売の日経 SYSTEMS 4月号と,2014年3月18日技術評論社 改訂新版 Linux エンジニア養成読本に寄稿をしました.以下,それぞれの寄稿の概要について述べます.



日経 SYSTEM 2014年4月号に寄稿した Hadoop の記事について


テクノロジー最前線 分散処理フレームワーク "Hadoop 2" では,MapReduce の経緯と技術範囲を振り返った後で,Hadoop 1系と Hadoop 2系の違いについて述べています.共著のNTT DATA の皆様方と,Hadoop・MapReduce をご存知ない方でも読めるように推敲を重ねたつもりですので,Hadoop を知らない方はチェックして頂ければと思います.表紙に本寄稿の内容が掲載されれているのを見て,うれしくなったのは秘密です(笑)

技術評論社 改訂新版 Linux エンジニア養成読本 について


この本は,3年前に技術評論社から出版された Linux エンジニア養成読本の改訂版で 2014年3月18日に出版されました.過去に掲載された Software Design のLinux関連の記事を集めた総集編です.2009年12月号のSoftware Designの特集 に寄稿したLinux カーネルのメモリ管理の記事が再掲載されました.Linux に関する基本的な事項が網羅的に掲載されている本だと思いますので,春だし Linux を学ぼう!って方には丁度良いのではないかなと思います.




まとめ


日経SYSTEMS4月号のテクノロジー最前線と改訂版Linuxエンジニア養成読本のLinuxカーネルの特集に寄稿をしました.いずれも2014年3月に発売されたもので,書店で見かける機会もあると思いますので,是非手に取ってみてください.ちょっとでも,みなさまの技術に関する疑問が解消できたら幸いです.宜しくお願い致します.

Feb 21, 2014

日本 OSS 奨励賞を受賞しました

日本OSS推進フォーラムより,第9回日本 OSS 奨励賞を頂きました.ありがとうございます.受賞理由は以下の通りです:
Hadoop開発コミュニティにおいて、リソース制御機構YARNの高信頼性を実現する新機能の開発等に貢献するとともに、品質強化に向けた取り組みにも貢献している。若手研究者として論文をまとめる一方で、その知見をもとに、積極的にOSS開発に参画・継続している。
受賞者の中には見慣れた名前の方もおり,大変恐縮です.特に @tagomoris 先生,おめでとうございます!同時受賞できるとはびっくりしました.

ここ1年の活動内容


良い機会なので,ここ1年の活動内容について振り返っておきたいと思います.
  • Apache Hadoop プロジェクトに合計で100件以上のパッチを投稿.
    • マージ件数は14件.
    • 恐らく日本人としての投稿・マージ LOC 数はトップ.
  • 筑波大学川島先生のお誘いで "情報システム特別講義" の非常勤講師を担当.
  • MapReduce 最適化技術の実装方法に関する論文で,情報処理学会より2013年度コンピュータサイエンス領域賞を受賞.
  • CROSS 2014 にて 分散システムCROSS に登壇.
  • Hadoop 徹底入門第二版 YARN の章を執筆.
Hadoop徹底入門 第2版 オープンソース分散処理環境の構築
太田 一樹 岩崎 正剛 猿田 浩輔 下垣 徹 藤井 達朗 山下 真一
翔泳社
売り上げランキング: 13,773

まだコミッタとして活動できている訳では無く,一貢献者として今回賞を頂けたのは,タイミング・運・環境が大きいかなと思っています.それでも,OSS 開発者と研究者という2つの側面で評価して頂いたのは,私が目指すところと合致しているので,大変うれしく思っております.

今後


奨励賞とのことで,つまるところ周りから "早くコミッタになるんだ!"というメッセージを頂いたのだと受け取りました.それを実現出来るよう.今年は最短距離を走り抜けたいと考えています.目下は Hadoop コミッタを目指します.実現のため,今年中に累積マージ件数を50件(あと35件!)を目指します.

コミッタになれた際には,魅力的な新機能はもちろん,ドキュメント・ログ・メトリックスといった運用上で必要な機能の開発速度を上げていきたいです.また,技術的に色々と挑戦しやすい分野ではあるので,オープンソース活動だけでなく,研究の方もがんばっていきたいです.

活動を通じて得た知識は,雑誌の記事や勉強会で共有し,Hadoop というプロダクトに還元して行けたらなと考えています.

謝辞


受賞に当たりましては,普段から議論頂いている方,職場の方,ご推薦頂いた方,友人に大変感謝しております.

特に,@shiumachi さんはコミュニティ活動をはじめた初期の段階で,Hadoop Hakathon を開催し,Hadoop コミュニティに疎い私に様々な情報を共有してくださいました.あの会がなかったらこのような賞を受賞できなかったでしょう.@tamtam180 さん,@tagomoris さん,@repeatedly は Hive T シャツを開発し,私のコミュニティ活動のモチベーションを大きく上げてくれました.

英語の文章ではないので詳細は省きますが,Hadoop コミュニティの皆様には,いつも容赦ないレビュー・コメントして頂いており,大変勉強になっています.

@tagomoris さん, @frsyuki さん,@repeatedly,@choplin さん,@nobu_k さん@okachimachiorz さん,@monizuka さん,@muga_nishizawa さん,@taroleo さん,@maropu さん,@kuenishi さん,@komamitsu_tw さん,@nobu_k さん,@hayamiz さん,@Guutara さん,@myui さん, @h_kaw さんにはいつも勉強会,議論におつきあい頂いており,大変感謝しております.今後とも宜しくお願い致します.改めて思いましたが,議論にお付き合い頂いている面子が豪華で恐縮です.

あと,色々迷ったりしたときに,"がんばれー" と,応援してくれた友人には大変感謝しています.ありがとうございます.

ここに書けなかった人,特に職場の方にはものすごく多種多様な迷惑をお掛けしていますが,嫌な顔せずサポートして頂いてものすごく助かっております.ありがとうございます.あと,いつもりんごありがとうございます,美味しいです.

最後に,私の生活力が低いことに起因し,今後も周りの方々には色々とご迷惑をおかけすることも多数あるかと思いますが,これからも宜しくお願い致します.