Azure Data Lake の裏側: マイクロソフトのビッグ データ処理の経験と Hadoop の融合

このポストは、9 月 30 日に投稿された Behind the scenes of Azure Data Lake: Bringing Microsoft’s big data experience to Hadoop の翻訳です。

 

マイクロソフトは、ビッグ データの格納および分析を行う Microsoft Azure Data Lake サービスを発表しました (英語)。このサービスは Azure HDInsight を含んでおり、開発者やデータ科学者、アナリストが複数のプラットフォームやプログラム言語であらゆるサイズや形式のデータに対してさまざまな処理や分析を実行できます (詳細については Azure Data Lake の製品ページAzure Data Lake のサインアップ ページ (英語)Azure Data Lake のブログ (英語) を参照してください)。

マイクロソフトは長年にわたってビッグ データを幅広く活用してきたデータ主導型の企業であり、現在は世界最大規模のビッグ データ サービスを運用しています。マイクロソフトの Cosmos サービスでは、それぞれが 50,000 台を超えるマシンから成る複数のクラスターでエクサバイト単位の多様なデータ (クリックストリームやテレメトリからドキュメント、マルチメディア、表形式データまで) を管理しています。マイクロソフトの開発者の大多数は、スケールアウト データ処理に Dryad (英語) を基盤とする SQL に類似した言語の Scope (英語) を使用して結合を最適化しています。Scope では、C# コードのパーティションを削減できるように GROUP BY 演算子を強化して、MapReduce 方式のプログラミングをネイティブにサポートしています。洗練された Visual Studio の開発者ツールにも使用されており、プログラマの生産性向上に大きく役立っています。詳細については、こちらのビデオ (英語) をご覧ください。

マイクロソフトの自社環境では、毎日数十万個のジョブと、さらに多くのインタラクティブ クエリが同一の共有環境で実行され、数百ペタバイトの I/O が日々発生しています。マイクロソフト社内の顧客は、皆様もよくご存知の非常に大規模な自社サービス (Bing、Office 365、Skype、Windows、Xbox Live など) から、社内の多数の中小規模のグループまで多岐にわたります。

個人的な話をしますと、私は 3 年前に Yahoo! からマイクロソフトに移籍してきました。前職では Hadoop や多数のオープン ソース ツールに深くかかわっていて、このエコシステムの力をマイクロソフトのビッグ データに対する取り組みに活用したいと考えていました。マイクロソフトへの入社後、スタッフが Cosmos や Scope を使用しているようすを見て、エンジニアやアナリストの生産性が非常に高いことに衝撃を受けました。ツールの使用方法が簡単なことに加えて、スケーラブルな環境により大規模なデータセットを多数のユーザーが操作できるためにデータの共有が進んでいることが、この生産性や先進性を実現するうえで中心的な役割を果たしていました。それ以来、私たちはマイクロソフトの社内エコシステムの生産性と Hadoop エコシステムのオープン性や柔軟性を融合させることを目標としてきました。これは興味深い取り組みであり、現実のユーザーがビッグ データのプラットフォームやサービスを使用する際に何を必要としているのかを学ぶ良い機会でした。これらすべてのプラットフォームやサービスを開発、運用し、さらに使用した経験は新サービスの Azure Data Lake に活かされています。

マイクロソフトの近年の発展の中では、オープン ソース ソフトウェア、特に Apache Hadoop への取り組みが重要なもので、社内では多数のグループが Hive、HBase、Kafka、Storm、Spark などの Hadoop を使用し、その基盤には Apache YARN (英語) が使用されています。

社外には HDInsight で管理されている Hadoop サービスを提供しています。これは Azure サービスの中でも最も広く使用され、急速に成長しているサービスの 1 つです。Hadoop エコシステムのメリットは、共有環境で実行されているさまざまな分析ツールから HDFS を使用してすべてのデータにアクセスできるという点にあります。ストレージおよびリソース管理を標準化するために広く HDFS と YARN が採用されていることが、Hadoop の拡張性に大きく貢献しています。これらのコンポーネントへのインターフェイスを接続先の「ソケット」として使用することで、さまざまな分析エンジンが YARN フレームワークにおける「アプリケーション マスター (AM)」として構築され、現在では Azure Data Lake の一部を構成しています。

Azure Data Lake は Hadoop エコシステムの一部として構築されていて、インターフェイスには主に HDFS と YARN が使用されています。Azure Data Lake Store は Azure に最適化されていますが、HDFS にアクセスするすべての分析ツールをサポートします。Azure Data Lake はリソース管理に Apache YARN を使用するため、YARN ベースの分析エンジンとサイドバイサイドで実行できます。Azure HDInsight によって管理されている Hadoop サービスでは、Hive、HBase、Storm、Spark などの最も広く使用されているオープン ソース エンジンが既にサポートされています。また、Azure Data Lake Analytics サービスの一環として、U-SQL (英語) という新しいクエリ言語が導入されます。これは T-SQL と類似した言語で、SQL の GROUP BY 構造を一般化することで MapReduce 形式のユーザー コードの実行を新たにサポートします。U-SQL は、Hadoop エコシステムの他の分析エンジンと同様に YARN で AM としてネイティブに実行されます。このため、Azure Data Lake に格納されているデータに対して、U-SQL を Hive、Spark、Storm などと並列して実行できます。Azure Data Lake Store にはあらゆるデータを安全に格納することが可能で、Hadoop エコシステムの一部として実行され、HDFS および YARN に接続されているツールであれば、アプリケーションに応じて OSS やマイクロソフトを含むベンダー製の分析ツールを併用することができます。

マイクロソフトのビッグ データ チームのメンバーは Apache YARN プロジェクトの開始当初から YARN の開発に貢献しており、開発した複数のコードが Apache YARN のリリースで採用されています。社内で YARN のデプロイが進む中で、自社環境における大規模なスケーリングや共有への対応など、増大する社内のニーズを満たすために YARN を継続的に改良しています。このような経験から得た知識は Hadoop コミュニティにフィードバックを行うほか、マイクロソフトのシナリオをきっかけとして、OSS の精神に従ってコミュニティと協力し、YARN に関連する複数の Apache プロジェクトを立ち上げたり、プロジェクトに貢献したりしています (その一部については後述します)。

初期の YARN への貢献の 1 つとして、作業保存の優先のサポートがあります (YARN-45 を参照)。これは、大規模な環境でよく見られる、長期的に実行されるジョブで特に重要です。以前は、YARN のキャパシティ スケジューラでクラスター共有の不変条件を保証する場合、同時に高使用率を維持することができませんでした。このため、スケジューラではリソースを十分に使用することができず、使用率に悪影響を与えていました。この問題は、スケジューラで優先機能をサポートすることにより解決されました。この機能は Hadoop 2.1 リリースから YARN に組み込まれ、現在では YARN の機能として広くデプロイされています。

Rayon (YARN-1051 を参照) は、運用環境のクラスターを実験環境と共有する目的で開発されたリソース予約コンポーネントで、Hadoop 2.6 リリースに組み込まれています。ワークロードの統合が一般化するにつれて、YARN のリソース マネージャーで、ベストエフォート型のジョブとクラスターを共有する運用環境ジョブへの割り当てを保証する必要が生じました。Rayon では、ユーザーおよびオペレーターが運用環境ジョブのリソースを予約できるため、パフォーマンスが予測可能になります。

Mercury (YARN-2877 を参照) および Tetris (YARN-2745 を参照) では、YARN スケジューラが強化されています。Mercury では、低レイテンシの割り当てによって、通常はアイドル状態のリソースが使用されることにより、クラスターのスループットを向上させます。これは、Scope ジョブのスケジュール設定を部分的に反映したものです。Tetris では、ビンパッキング アルゴリズムを使用してタスクをコンパクトにマシンに割り当てることにより、使用率を向上させます。マイクロソフトは、開発したコードが Apache YARN に採用されるように、ディスカッションやコード レビューなどを通じてコミュニティに積極的に協力しています。

YARN の大規模な開発に基づいて、マイクロソフトは Java や C# のアプリケーションを YARN やその他のリソース マネージャーで簡単に開発できるように REEF の着想と策定を行いました。REEF は Apache によって具現化され、さまざまな教育機関や企業から多数の貢献を得ています。

マイクロソフトでは非常に大規模なクラスター (前述のとおり、Cosmos クラスターのノード数は 50,000 台を超える場合があり、社外の Hadoop クラスターよりも 1 桁大きな規模となっています) を使用しているため、スケールアウト リソース管理の取り組みにも着手しました (YARN-2915 を参照)。Apache YARN は、運用環境の設定にデプロイされ、最大 6,000 台のノードから成るクラスターを管理します。YARN をデータセンター規模のクラスターにスケーリングし、数十万台のノードを管理するために、マイクロソフトはフェデレーション方式のアプローチを進めています。つまり、個々のサブクラスターの規模を約 6,000 台のノードにすれば、コミュニティの取り組みによって構築された堅牢な YARN クラスターを活用することができます。そして、これらのサブクラスターを組み合わせることにより、さらに大規模な YARN クラスターを構築します。標準的な YARN では、フェデレーションによってクラスター全体のコンピューターを API との互換性がある 1 つのシステムであるかのように扱うことができるため、個々のジョブをフェデレーション全体に分散させることが可能です。マイクロソフトではフェデレーションの実装作業を Apache の独立したブランチで進めています。すべてのディスカッションおよびコード レビューはこのブランチで行われるため、OSS コミュニティでオープンに取り組みを進めることができます。

マイクロソフトは自社の取り組みを学界および産業界のさまざまなカンファレンスにおいて論文やプレゼンテーションとして広く公開しています。また、マイクロソフトのビッグ データ チームのメンバーは YARN に関する初の学術論文「Apache Hadoop YARN: Yet Another Resource Negotiator (英語)」の共著者となりました。この論文は、ACM SoCC 2013 (英語) カンファレンスで最優秀論文賞を受賞しています。

マイクロソフトの Hadoop への貢献は YARN のみにとどまらず、他にも主に次のような取り組みに参加しています。

  • Azure および Windows での Hadoop の利用 : Azure の中でも急速に成長しているサービスの 1 つである Azure HDInsight は、マイクロソフトと Hortonworks によって共同で開発されました。マイクロソフトは、Hadoop サービスを Azure および Windows で実行できるようにするために多数の JIRA (一覧はこちらのページ (英語) を参照) に貢献しました。その中には、Hadoop アプリケーションが Microsoft Azure Storage に格納されているデータにアクセスできるようにするための WASB 用ドライバー (JIRA はこちらのページ (英語) を参照) も含まれています。
  • Hive  ORC:  マイクロソフトは Hive でのベクトル化のサポート (英語) を提案、設計し、Hortonworks と共同でその開発を行いました。さらに、ORC (最適化行多桁式) 形式の設計についてもコミュニティに協力しました。
  • WebHDFS での OAuth2 のサポート : クラウド ベースのビッグ データ ストアを WebHDFS からアクセス可能にするという目標に従い、こちらのページ (英語) で詳述されている変更の一環として、OAuth2 のサポートを追加しました。この機能は Apache Hadoop リリース 2.8 で提供が開始される予定です。
  • Jupyter Spark カーネル : Spark クラスターから Jupyter iPython ノートブックを分離するという提案 (英語) について Jupyter コミュニティ (英語) と共同で取り組みました。REST エンドポイントからリモートで Spark を実行することにより、Jupyter ノートブックですべての言語 (Scala、Python、R) がサポートされました。Spark はこの提案により提供された最初のバックエンドで、他のビッグ データ バックエンドに簡単に拡張することができます。

ご説明させていただいたとおり、Azure Data Lake は、Cosmos、Scope、Hive、Spark、iPython ノートブックなど、ビッグ データのプラットフォームやサービスを構築および運用してきたマイクロソフトの経験に基づいて開発されています。オープンなインターフェイスを持つ分析ツールをお客様に自由にお選びいただけるように、マイクロソフトでは Azure Data Lake を HDFS および YARN を使用した Hadoop エコシステムの一部として設計、構築しています。この機会をお借りして、これらのすばらしいソフトウェア システムの開発に携わったマイクロソフトとオープン ソース コミュニティのすべての方々に感謝の意を表します。また、規模と多様性が増大し続けているマイクロソフトのデータ コレクションを最大限に活用するために皆様にご協力いただいていることをたいへん光栄に思っています。

ぜひ Azure Data Lake サービスをお試しのうえ、ご意見やご感想をお寄せください。

Raghu