並列分散処理・プログラミングモデルのあれこれ
以下のURLを読んでいて気になった論文をピックアップ
MapReduce: Simplified Data Processing on Large Clusters
Hive - A Warehousing Solution Over a Map-Reduce Framework
- http://www.vldb.org/pvldb/2/vldb09-938.pdf
- Facebook
2009年のHive[12]では、操作言語としてSQLライクなHiveQLが提供されています。HiveもHadoop上に構築され、HiveQLによる操作は、Hiveコンパイラにより複数のMapReduce処理に展開されます。HiveQLはパース後に論理演算ツリーに変換され、最終的には物理的な処理モデルである複数のMapReduceから構成される有向非循環グラフとして展開されます。
Large-scale Incremental Processing Using Distributed Transactions and Notifications
Presto
- Facebook
prestodb.io
2013年のPresto[32]では、リアルタイムの大規模データ分析はMapReduceベースのHive[12]から刷新されました。Prestoは標準SQLへの準拠を目指して抽象化されたシステムで、F1と同様にSQLの最適化は有向非循環グラフのパイプラインに展開され実行されます。 2013年のPresto[32]の場合には、参照透過性は保ちつつも、従来はファイルに出力してた中間結果のデータをメモリ上に保持することにより、タスク間のデータの引き渡しをインメモリで実行することで処理の高速化を実現しています。
Pig Latin: A Not-So-Foreign Language for Data Processing
- Yahoo! Research
- http://infolab.stanford.edu/~olston/publications/sigmod08.pdf
2008年のPig[23]では、プログラム開発経験者向けの操作言語としてデータベースのSQLとMapReduce処理との中間的な専用のDSLが提供されてます。Pigは、MapReduceのOSS実装であるHadoop[6]上に構築され、DSLによる記述は実行時にMapReduceに展開されます。プログラム開発経験者向けの性格もあり、DSLはMapReduceに対してある程度直接的な記述となります。
Apache Hadoop YARN: Yet Another Resource Negotiator
- Apache Hadoop
- https://54e57bc8-a-62cb3a1a-s-sites.googlegroups.com/site/2013socc/home/program/a5-vavilapalli.pdf
2013年のYARN[7]は、直接的にはクラスタのリソースを管理するためのフレームワークです。YARNでは、MapReduceのような特定の処理モデルは規定されず、任意のアプリケーション実行のリソース管理に注力する方式を取ります。プログラミング的には、アプリケーションがYARNにリソース要求しながら処理を進めていく方式をとります。
Large-scale cluster management at Google with Borg
- http://research.google.com/pubs/pub43438.html
- 日本語解説記事 https://www.infoq.com/jp/news/2015/04/google-borg
10年間のシステム運用でGoogleが学んだ教訓のいくつかが,Kubernetesの設計に適用されている。具体的には,同一サービスに属するジョブに対するオーケストレーション機能,マシン毎に複数のIPアドレスの割り当て,シンプルなジョブ構成機構の利用,Allocと同等なPodの利用,ロードバランシング,デバッグデータをユーザに提供する深いイントロスペクションといったものだ。Borgで開発を行っていた技術者の多くは,現在はKubernetesに移行している。