Hadoop / Elastic MapReduceつまみ食い玉川竜司tamagawa_ryuji@twitter
本日の内容自己紹介なぜHadoop?HadoopとElastic MapReduceの紹介MapReduce分散ファイルシステムHDFSローカル環境の構築参考資料
自己紹介を少々本職:ソフトウェア開発者兼業翻訳者Hadoop(象本)7月に2nd EditionでますData Intensive Text Processing With MapReduce(予定)Silverlightで開発するデータ駆動アプリケーションセマンティックWebプログラミングプログラミングGoogle App EngineプログラミングWindows Azure
なぜHadoop?‘Big Data’:大量のデータを処理することで価値が生まれるただし、既存技術ではメリットを出す事が難しかった高度なアルゴリズム vs単純なアルゴリズムスケールしない高度なアルゴリズムから得られる結果は、単純なアルゴリズムで莫大なデータを処理して得られる結果に及ばない● ニューヨーク株式市場は、1日ごとに1テラバイトの取引データを生み出しています。● Facebookはおよそ100億枚の写真をホストしており、これは1ペタバイトの記憶領域を  占めます。● 家系図サイトのAncestry.comは、2.5ペタバイトのデータを保管しています。● The Internet Archiveはおよそ2ペタバイトのデータを保管しており、  その容量は1か月あたり20 テラバイトのペースで増加しています。● スイスのジュネーブ近郊にある大型ハドロン衝突型加速器は、  年間およそ15ペタバイトのデータを生み出しています。象本から抜粋
なぜHadoop?(2)必要なのは、スケールアップ=マシンのパワーアップではないスケールアウト=分散処理こそが必要多くの場合、スケーラビリティのネックになっているのはI/O特にディスクのランダムアクセス性能(IOPS)は、この20年でほとんど伸びていないhttp://www.youtube.com/watch?v=9eMWG3fwiEUIn pioneer days they used oxen for heavy pulling, and when one ox couldn’t budge a log, they didn’t try to grow a larger ox. We shouldn’t be trying for bigger computers, but formore systems of computers.—Grace Hopper
Hadoopの紹介MapReduce/分散ファイルシステムのオープンソース実装コアはMapReduce/HDFS安価なハードを大量に並べて、水平分散でデータ処理を行うためのツールキット大規模並列処理では避けられない、様々な障害に自動的に対処してくれる開発者は、処理のロジックに集中できる作成されたプログラムは、数千台まではほぼ台数に対してリニアにスケールする(らしい)比較的安価なマシンを並べたローカルクラスタや、Amazon EC2/S3上で利用可能(Elastic MapReduce)Hadoop上で動作する各種ツールがあり、分散処理のためのデファクトのフレームワークのようになってきた
Hadoopの構成青はMapReduceの要素赤は分散ファイルシステム(HDFS)の要素インフラは、Elastic MapReduceに面倒を見てもらえる!ジョブトラッカーは、タスクトラッカーに対してタスクを依頼します。対象となるデータのありかは、ネームノードとやりとりをして知ります。障害発生時のリカバリも管理。マスターノード分散処理をするのに必要な諸々は、Hadoopが面倒見てくれます。ハード障害対応
効率の良いネットワーク運用
ジョブの管理
タスクの管理ジョブトラッカーネームノードプログラマが書くのはこれだけ!スレーブノードスレーブノードスレーブノードスレーブノードネームノードは、HDFSのディレクトリと、ファイルを構成するブロックの場所を管理します。タスクトラッカーデータノードタスクトラッカーデータノードタスクトラッカーデータノードタスクトラッカーデータノードタスクタスクタスクタスクタスクタスクタスクタスクタスクタスクタスクタスクタスクトラッカーは、割り当てられたタスクを実行し、結果をジョブトラッカーに報告します。
Elasitc MapReduceHadoopクラスタを自動的にくみ上げて、ジョブを実行してくれます。データの入出力にはS3を利用します。簡単なオペレーションはAWSコンソールから、細かなオペレーションはコマンドラインやAPIから行えます。Javaのジョブ(一応これが基本)、Streaming(標準入出力を使ってスクリプト言語で処理)のジョブ、Pig/Hive(抽象度の高いデータ処理が可能)が使えます。公式ドキュメント(英語)には一通り目を通しましょう。http://aws.amazon.com/archives/Elastic%20MapReduce?_encoding=UTF8&jiveRedirect=1ポートを空けてやれば、標準的なモニタ機能は使えます。デバッグの機能もあります。それでは動いているところを見てみましょう…
MapReduceすべての処理を、MapとReduceで行うMapもReduceも、入出力共に、キーと値のペアの集合を扱うこの「型」に落とし込むと、分散処理にはめ込みやすいアルゴリズム的にベストとは限らない。しかし、水平分散のクラスタに簡単に落とし込める簡単に力業に持ち込むためのパターンData filesmappermappermappermapperShuffle & SortReducer
ここで宣伝MapReduceのアルゴリズムの定番教科書でます!オライリージャパンから、8月か9月出版予定。一部思いっきり数学しているところがありますが、それ以外のところだけでも十分役立ちます。MapReduceアルゴリズムの「デザインパターン」本としてご活用ください。Hadoopを念頭において書かれてます。鋭意校正中!がんばれ俺!
サンプル:Word CountFreebase is an open database of the world’s information, covering millions of topics inhundreds of categories. Drawing from large open data sets like Wikipedia, MusicBrainz,and the SEC archives, it contains structured information on many popular topics,including movies, music, people and locations – all reconciled and freely available. Thisinformation is supplemented by the efforts of a passionate global community of usersコードを書く方法:
Hadoop Streaming(標準入出力。簡単だけど遅い)
Java(これが標準)この他にも状況に応じていろいろなやり方があるので、HadoopConfefence Japan 2009の資料も参考にしてくださいHadoopによる入力(0, Freebase is an open database of the world’s information, covering millions of topics in...)(1, hundreds of categories. Drawing from large open data sets like Wikipedia, MusicBrainz,...)(2, and the SEC archives, it contains structured information on many popular topics,...)(3, including movies, music, people and locations – all reconciled and freely available. This...)(4, information is supplemented by the efforts of a passionate global community of users...)for line in sys.stdin:for word in line.split():   print word + “\t” + “1”mapタスクによる処理他のmapタスクによる処理(Freebase , 1)(is , 1)(an , 1)(open , 1)(database , 1)(MySQL, 1)(is, 1)(not, 1)(proprietary, −5)(database, 119)for aLine in sys.stdin:currentWord= aLine.split()[0]   if currentWord == prevWord:count += 1else:print "%s\t%d" % (prevWord, count)    count = 1prevWord= currentWordHadoopによるシャッフル(freebase, [1])(is, [1, 1])(an, [1])(open, [1])(database, [1, 1])reduceタスクによる処理(freebase, 1)(is, 2)(an, 1(open, 1)(database, 2)
分散ファイルシステムHDFSHadoop Distributed File System耐障害性(データブロックの複製)ディスクのシークを減らすためのデータブロック(デフォルト64MB)大量のデータをシーケンシャルアクセスすることを想定しているネットワークトポロジを意識し、効率的に分散処理を行うためのブロック配置を行う
Hadoop/HDFSのいいところデータセンター内のもっとも貴重なリソースは?ネットワーク帯域、次いでディスクの処理能力「データローカリティ」を意識したデータブロックの複製とタスク配置複製度3なら、ローカルノード、別ラック内のノード、同一ラック内の別ノードへタスクはできる限りローカルのデータノード内のデータで処理を行えるように管理されるただし、EMRではラックアウェアネスは実現されないラックAラックBノードA-1ノードB-1データノードデータノードDataBloockDataBloockDataBloockDataBloockタスクDataBloockタスクDataBloockノードA-2ノードB-2データノードデータノードDataBloockDataBloockDataBloockタスクDataBloockタスクDataBloockDataBloockノードA-3ノードB-3データノードデータノードDataBloockDataBloockDataBloockタスクDataBloockタスクDataBloockDataBloock
ローカル開発環境を用意してみたLinux(CentOS5)とCDH(Cloudera Distribution including Apache Hadoop) ver 3https://ccp.cloudera.com/display/SUPPORT/Downloads疑似分散モード(Psuedo Distribution mode)でインストールYumやaptを使って簡単にできますhttps://ccp.cloudera.com/display/CDHDOC/CDH3+Quick+Start+Guidehttps://ccp.cloudera.com/display/CDHDOC/CDH3+Installation+GuideデモンストレーションWikipediaでwordcountしょぼいサンプルですみません。ストリーミングでの実行方法は象本に載ってます

Hadoop / Elastic MapReduceつまみ食い