オルタナティブ・ブログ > Azureの鼓動 >

クラウド戦役をZガンダム視点でわかりやすく解説するブログ+時々書評。

MapReduceはGoogleやAmazonだけのものじゃない。AzureはF#で迎え撃つ

»

昨日AmazonがMapReduceの環境のパブリックベータを発表した。
Javaを基本としながら、RubyやPerl、PHP、C++などからもMapReduceを
実装しやすくするインタフェースを備えたHadoop環境のようだ。
サービスラインとしてはEC2やS3のオプションメニューとなっている。

クラウド上の大規模演算を考える場合、当然のことながら分散処理を前提とした
プログラミングモデルが必要となる。シングルスレッドでしか動かないように
作られたアプリケーションがそのまま分散環境で高速実行できるようになるほど
世の中甘くはないのである。分散のメリットを享受したいなら、それなりな対応が必要だ。

では、Azureはどうなのか?
先日行われたMIX09においてPHPのサポートも発表し、オープン性を戦略的に
拡張してゆく流れはあるが、すでにWindows環境で多くの実績・資産をもつ
.NETアプリケーションをクラウド側で実行できるようにするのがAzureの
もっとも基本的な価値である。

その際、C#などの既存汎用言語でもMapReduceのような処理を実装することは
不可能ではないが、AzureではF#という新しい言語で対応しようとしている。

F#ってなんだ?と唐突感を覚えたり、急造品的なイメージを持たれる方も
いるかもしれないが断じて否、そのようなものではない。
F#はAzureのためだけに開発された言語ではなく、Visual Studio 2010から
C#と並ぶ存在として組み込まれる
ことも2007年の段階で発表されている。
クラウド上での大規模演算以外でも、CPUのメニーコア化などの背景から、
分散処理に適したプログラミングモデルが必要とされていたのである。

さて、F#を使うとAzureで何ができるのか?

F# for Windows Azure サイトには、サムネイル作成やWebクローラーの
サンプルコードが掲載されており、MapReduceのF#実装の記事は探すと
それなりに見つけられる。

さらに、先ほどのF# for Windows Azure サイトでは、Azure用のF#SDKを
ダウンロードできる
他、Visual Studio2008用のF#テンプレートも入手できたりする。
新規プロジェクト作成でF#のテンプレートを選べば開発が始められる状態になる。
実際にWebクローラーをAzureにデプロイする流れはこの記事がわかりやすいかもしれない。

ただ、これらのサンプルコードを見て「とっつきにくさ」を感じた方も多いだろう。
JavaやC#などのオブジェクト指向プログラミングとF#のような関数型言語は相容れない
ものであり、気持ち悪さを脱却するためには、その違いを受け入れるところから
はじめる必要がある。

そんなのは面倒なのでC#である程度使えればよい、という割り切りもわからなくはないが、
世の中これだけクラウド上の分散処理が注目を浴びていて、CPUメーカーが
メニーコア化を宣言している昨今、ここはひとつ本腰を入れて取り組んでみては
いかがだろうか?

F#というより関数型言語のキホンを知っておきたいという方は、
弊社荒井がTechDaysでお話ししたF#入門がまとまっていると思われるので、
資料のダウンロードやストリーミングをご活用いただきたい。
TechDaysサイトでのナビゲーションはLanguagesをチェックして検索→F#入門)

MapReduceのような分散処理を前提としたプログラミングモデルは、クラウド戦役における
ニュータイプ専用のサイコミュ兵器のようなものであると考えている。
クラウド至上主義を唱えるAmazonやGoogleがキュベレイを投入するならば、
エウーゴやアナハイムエレクトロニクスを含む連邦宇宙軍としては、
バイオセンサーやサイコフレーム技術にあたるF#で対抗することになろう。
ニューガンダムにフィンファンネルを実装するチャンスは
世界中の.NET開発者に等しく提供されている。

そのうち対RX-0ユニコーンガンダム兵器ギラ・ズールに搭載されるサイコジャマーが現れ、
SEEDの世界観からサイコジャマーキャンセラーもでてくるのだろうか。
いずれにせよ戦況を一変させる不連続な変革点のひとつとなるだろう。

新しモノ好きを自認する各位はF#を是非体験してみていただきたい。

Comment(3)

コメント

いさご

数カ所訂正。F#は論理型ではなく関数型言語。
下記、弊社萩原の主張。
「クラウドのデータ操作には関数型は必須です。C#でforeachなんてやっている場合ではありません。
map、filter、foldのhigher-order functionsをまず知っておきましょう。それとtuple、list、F#ならarrayをマスターすること」

いげ太

> 確認はしていないが、無償版のVisual Studio Express Edition でも試せると思われる。
Express 版では無理です。無償の F# 開発環境ならば、Visual Studio 2008 Shell (integrated mode) か、あるいは SharpDevelop が使えます。

いさご

コメントありがとうございます!
今後訪れる方が混乱するといけないので
記載修正しておきます。

Express 版でF#を試せるかもしれないという記載をしていましたが内容齟齬があるようなので変更します。ご迷惑おかけして申し訳ありません。いげ太さんのコメントを参考になさってくださいませ。

コメントを投稿する