MapReduce 初心者が
Hadoop をさわってみた
~もちろん C++ から~
プログラミング生放送勉強会 第4回 @名古屋
2010/06/26(土) You&I
Agenda
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
0.自己紹介
• H/N You&I (読み:ユー アンド アイ)
• 出身 生まれも育ちも名古屋市
• 年齢 30代前半
• 本職 商学部出身の職業プログラマ
• 言語 C++, VisualBasic 6.0, 日本語COBOL
• 日記 ...
0.余談
名古屋近郊の勉強会を検索するには、以下のカ
レンダーが便利。
• DSTokaiカレンダー
• ATNDカレンダー検索
• IT勉強会カレンダー検索
1.Hadoopとは
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
1.Hadoopとは(1/5)
• Apache Hadoop プロジェクト
http://hadoop.apache.org/
• Hadoopは幾つかのサブプロジェクトで構成
詳細は後ほど3章で説明します。
• HadoopはGoogleが...
1.Hadoopとは(2/5)
• アイコンはぞうさんです
• 「ハドゥープ」って読みます
• 「hadoop」は造語です
• Javaで作成されたフレームワークです
• 基本的にLinux上で動作させて利用します
• 夜間バッチ処理等によく利...
1.Hadoopとは(3/5)
• Streaming APIを利用するとJava以外の言語
からも利用できます
• 但し、C++の場合はPipesを利用します
• 直線的なスケーラビリティがあります
• ペタバイト(1024TB)超のデータを...
1.Hadoopとは(4/5)
• スケーラビリティとデータの整合性について
Hadoop(に限らず、データベース)を深く語る上では、以下の知
識も必要となってくる・・・らしい。
– CAP定理
– ACID
– BASEトランザクション
参考...
1.Hadoopとは(5/5)
日本語で読める解説書
• O'Reilly - Hadoop
http://www.oreilly.co.jp/books/9784873114392/
http://oreilly.com/catalog/97...
2.MapReduceとは
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
2.MapReduceとは(1/5)
Googleの論文
• The Google File System (2003年)
http://labs.google.com/papers/gfs.html
• MapReduce: Simplifi...
2.MapReduceとは(2/5)
• Googleのシステムについての解説は書籍にな
っているのでそちらをご覧下さい。
• ISBN:978-4774134321
2.MapReduceとは(3/5)
• MapReduceの処理
Mapタスク
入力データ
Reduceタスク
出力データ
データをKeyとValueの組み合わせに変換
ログデータ等の処理対象データ
Key毎にデータをグループ化
2.MapReduceとは(4/5)
• MapReduceの処理(詳細)
Mapタスク
入力データ
Reduceタスク
出力データ
データをKeyとValueの組み合わせに変換
ログデータ等の処理対象データ
Key毎にデータをグループ化
入力...
2.MapReduceとは(5/5)
細かく説明すると長くなるので続きはWebで!
• CodeZine > Hadoop、hBaseで構築する大規模分散データ処
理システム
http://codezine.jp/article/detail/...
3.Hadoopの構成
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
3.Hadoopの構成(1/3)
Googleシステム構成 Hadoop
Google File System
(GFS)
Hadoop Distributed
File System(HDFS)
MapRedude
Hadoop
MapRed...
3.Hadoopの構成(2/3)
• Hadoopのサブプロジェクト構成
HDFS
(Hadoop Distributed File System)
MapReduce
(Job Scheduling - Raw Processing)
HBa...
3.Hadoopの構成(3/3)
• Hadoopのクラスタ構成
Data Node
Client
Name Node
Data Node Data Node
Job Tracker
4.なぜHadoopか?
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
4.なぜHadoopか?(1/2)
• HBaseで高速にデータ書き込み可能
• HDFSにより大容量データも格納可能
• MapReduce他で高速にデータ処理可能
• 容易にスケールアップ可能
安西先生!
タイムドリブンなシミュレータのデー...
4.なぜHadoopか?(2/2)
Hadoopの活用事例
• Yahoo!
• Yahoo! JAPAN
• クックパッド
資料を公開いたしました!(クックパッドの裏側見せます in 大
阪&名古屋)
http://techlife.cook...
5.Hadoopの環境構築
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
5.Hadoopの環境構築(1/2)
• 用意するモノ
– Linuxの環境
– Java Runtime Environment
– Hadoop
※Windows + Cygwinでもいけるけど、C++から
利用する場合は、Linux環境が...
5.Hadoopの環境構築(2/2)
細かく説明すると長くなるので続きはWebで!
• きりんさん日記 > 1台構成のHadoopを30分で試してみ
る(CentOS + Cloudera)
http://saburi380.blogspot....
6.C++からHadoopを使う
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
6.C++からHadoopを使う(1/10)
• C++からHadoopを使うには
– Hadoop Pipes
– Hadoop Streaming API
– Hadoop の Apache Thrift API
• 今回はベーシックにHa...
6.C++からHadoopを使う(2/10)
• (参考)Hadoop Streaming APIをRubyから利
用する場合の呼び出し・・・アレ?
% hadoop ¥
jar $HADOOP_INSTALL/contrib/streamin...
6.C++からHadoopを使う(3/10)
• Hadoop Pipesのクラス構成
TaskContext
MapContext
ReduceContext
Closable
Mapper
Reducer
Partitioner
Recor...
6.C++からHadoopを使う(4/10)
• 単純なサンプル(1行=1レコードの固定長気象データ)
#include <algorithm>
#include <limits>
#include <string>
#include "had...
6.C++からHadoopを使う(5/10)
class MyMapper : public Mapper {
public:
MyMapper( TaskContext& context ) { }
virtual void map( Map...
6.C++からHadoopを使う(6/10)
class MyReducer : public Reducer {
public:
MyReducer( TaskContext& context ) { }
virtual void reduc...
6.C++からHadoopを使う(7/10)
int main( int argc, char* argv[] )
{
return runTask(
TemplateFactory< MyMapper, MyReducer >() );
}
6.C++からHadoopを使う(8/10)
• Makefile(32bit環境向け)
CC=g++
CPPFLAGS= ¥
-m32 ¥
-I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include
max_tem...
6.C++からHadoopを使う(9/10)
• Hadoop PipesでのC++プログラムの呼び出し
% hadoop pipes ¥
-D hadoop.pipes.java.recordreader=true ¥
-D hadoop.p...
6.C++からHadoopを使う(10/10)
• Hadoopを使うと言っても、実の所はHadoopか
ら利用されるプログラムを準備する事
• 実は今説明したサンプルは、MapReduceのI/F
を利用するもの
• HBaseをC++から利...
7.まとめ
1. Hadoopとは
2. MapReduceとは
3. Hadoopの構成
4. なぜHadoopか?
5. Hadoopの環境構築
6. C++からHadoopを使う
7. まとめ
7.まとめ
• HadoopはHDFSというファイルシステムとMap
Reduceを基盤としたサブプロジェクトの集まり
• Java以外の言語からも利用できる
• C++でも簡単にI/Fを実装できる
• この機会に名古屋近郊に在住でもっと深く勉...
Upcoming SlideShare
Loading in …5
×

MapReduce 初心者が Hadoop をさわってみた。もちろん C++ から。

5,888 views

Published on

プログラミング生放送勉強会 第4回 @名古屋の発表資料。

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,888
On SlideShare
0
From Embeds
0
Number of Embeds
237
Actions
Shares
0
Downloads
43
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

MapReduce 初心者が Hadoop をさわってみた。もちろん C++ から。

  1. 1. MapReduce 初心者が Hadoop をさわってみた ~もちろん C++ から~ プログラミング生放送勉強会 第4回 @名古屋 2010/06/26(土) You&I
  2. 2. Agenda 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  3. 3. 0.自己紹介 • H/N You&I (読み:ユー アンド アイ) • 出身 生まれも育ちも名古屋市 • 年齢 30代前半 • 本職 商学部出身の職業プログラマ • 言語 C++, VisualBasic 6.0, 日本語COBOL • 日記 http://d.hatena.ne.jp/youandi/ • 所属 大規模分散技術勉強会in名古屋 名古屋アジャイル勉強会* わんくま同盟(名古屋勉強会)*
  4. 4. 0.余談 名古屋近郊の勉強会を検索するには、以下のカ レンダーが便利。 • DSTokaiカレンダー • ATNDカレンダー検索 • IT勉強会カレンダー検索
  5. 5. 1.Hadoopとは 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  6. 6. 1.Hadoopとは(1/5) • Apache Hadoop プロジェクト http://hadoop.apache.org/ • Hadoopは幾つかのサブプロジェクトで構成 詳細は後ほど3章で説明します。 • HadoopはGoogleが2004年に発表したMapR educeに関する学術論文を参考に作られてい ます。 詳細は後ほど2章で説明します。
  7. 7. 1.Hadoopとは(2/5) • アイコンはぞうさんです • 「ハドゥープ」って読みます • 「hadoop」は造語です • Javaで作成されたフレームワークです • 基本的にLinux上で動作させて利用します • 夜間バッチ処理等によく利用されています • 分散処理を行うフレームワークです
  8. 8. 1.Hadoopとは(3/5) • Streaming APIを利用するとJava以外の言語 からも利用できます • 但し、C++の場合はPipesを利用します • 直線的なスケーラビリティがあります • ペタバイト(1024TB)超のデータを扱えます • 今までやむなく捨てていたデータを活用
  9. 9. 1.Hadoopとは(4/5) • スケーラビリティとデータの整合性について Hadoop(に限らず、データベース)を深く語る上では、以下の知 識も必要となってくる・・・らしい。 – CAP定理 – ACID – BASEトランザクション 参考 http://d.hatena.ne.jp/jyukutyo/20090430/1241174854 http://www.publickey1.jp/blog/10/nosqlcap.html http://www.infoq.com/jp/articles/graph-nosql-neo4j でも、今日のセッションでは特に気にしない(キリッ
  10. 10. 1.Hadoopとは(5/5) 日本語で読める解説書 • O'Reilly - Hadoop http://www.oreilly.co.jp/books/9784873114392/ http://oreilly.com/catalog/9780596521981/ http://oreilly.com/catalog/0636920010388/
  11. 11. 2.MapReduceとは 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  12. 12. 2.MapReduceとは(1/5) Googleの論文 • The Google File System (2003年) http://labs.google.com/papers/gfs.html • MapReduce: Simplified Data Processing on Large Clusters (2004年) http://labs.google.com/papers/mapreduce.html • 論文中に出てくる基盤技術 – Google File System – MapReduce – BigTable – Chubby(未だにOSSクローン実装はない)
  13. 13. 2.MapReduceとは(2/5) • Googleのシステムについての解説は書籍にな っているのでそちらをご覧下さい。 • ISBN:978-4774134321
  14. 14. 2.MapReduceとは(3/5) • MapReduceの処理 Mapタスク 入力データ Reduceタスク 出力データ データをKeyとValueの組み合わせに変換 ログデータ等の処理対象データ Key毎にデータをグループ化
  15. 15. 2.MapReduceとは(4/5) • MapReduceの処理(詳細) Mapタスク 入力データ Reduceタスク 出力データ データをKeyとValueの組み合わせに変換 ログデータ等の処理対象データ Key毎にデータをグループ化 入力スプリット 入力データをMapタスクの処理単位に分割 Combiner Partitioner Reduceタスクに入力データを振り分け Mapタスクの結果が多すぎる場合にデータを集約
  16. 16. 2.MapReduceとは(5/5) 細かく説明すると長くなるので続きはWebで! • CodeZine > Hadoop、hBaseで構築する大規模分散データ処 理システム http://codezine.jp/article/detail/2448 • Yahoo! Developer Network > Hadoop Tutorial http://developer.yahoo.com/hadoop/tutorial/module4.html • Yahoo! JAPAN TechBlog > Hadoopで、かんたん分散処理 http://techblog.yahoo.co.jp/cat207/cat209/hadoop/ • Yahoo! JAPAN TechBlog > Hadoopを使いこなす(1) http://techblog.yahoo.co.jp/cat207/cat209/_footnote/ • Hadoop入門 http://www.slideshare.net/pfi/hadoop-2525724
  17. 17. 3.Hadoopの構成 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  18. 18. 3.Hadoopの構成(1/3) Googleシステム構成 Hadoop Google File System (GFS) Hadoop Distributed File System(HDFS) MapRedude Hadoop MapReduce BigTable HBase • Googleシステム構成とHadoopの比較
  19. 19. 3.Hadoopの構成(2/3) • Hadoopのサブプロジェクト構成 HDFS (Hadoop Distributed File System) MapReduce (Job Scheduling - Raw Processing) HBase (RealTime Query) Chukwa (Displaying, Monitoring, Analyzing Logs) Pig (Data Flow) Hive (Batch SQL) ZooKeeper (Coordination) Avro (Serialization)
  20. 20. 3.Hadoopの構成(3/3) • Hadoopのクラスタ構成 Data Node Client Name Node Data Node Data Node Job Tracker
  21. 21. 4.なぜHadoopか? 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  22. 22. 4.なぜHadoopか?(1/2) • HBaseで高速にデータ書き込み可能 • HDFSにより大容量データも格納可能 • MapReduce他で高速にデータ処理可能 • 容易にスケールアップ可能 安西先生! タイムドリブンなシミュレータのデータ処理を速くしたいです!
  23. 23. 4.なぜHadoopか?(2/2) Hadoopの活用事例 • Yahoo! • Yahoo! JAPAN • クックパッド 資料を公開いたしました!(クックパッドの裏側見せます in 大 阪&名古屋) http://techlife.cookpad.com/2010/04/14/urapad_oosakanag oya/ みてわかるクラウドマガジンvol.1 http://itpro.nikkeibp.co.jp/article/MAG/20100402/346577/
  24. 24. 5.Hadoopの環境構築 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  25. 25. 5.Hadoopの環境構築(1/2) • 用意するモノ – Linuxの環境 – Java Runtime Environment – Hadoop ※Windows + Cygwinでもいけるけど、C++から 利用する場合は、Linux環境が必要
  26. 26. 5.Hadoopの環境構築(2/2) 細かく説明すると長くなるので続きはWebで! • きりんさん日記 > 1台構成のHadoopを30分で試してみ る(CentOS + Cloudera) http://saburi380.blogspot.com/2009/11/301hadoopc entos-cloudera.html • Cloudera社のサイトでは、各種Linuxディストリビューシ ョン向けのインストールパッケージを提供しています http://www.cloudera.com/
  27. 27. 6.C++からHadoopを使う 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  28. 28. 6.C++からHadoopを使う(1/10) • C++からHadoopを使うには – Hadoop Pipes – Hadoop Streaming API – Hadoop の Apache Thrift API • 今回はベーシックにHadoop Pipesで • フォルダ構成 hadoop-0.20.2 /c++ /Linux-i386-32 /Linux-amd64-64
  29. 29. 6.C++からHadoopを使う(2/10) • (参考)Hadoop Streaming APIをRubyから利 用する場合の呼び出し・・・アレ? % hadoop ¥ jar $HADOOP_INSTALL/contrib/streaming/ hadoop-*-streaming.jar ¥ -input input.txt ¥ -output output ¥ -mapper my_mapper.rb ¥ -reducer my_reducer.rb
  30. 30. 6.C++からHadoopを使う(3/10) • Hadoop Pipesのクラス構成 TaskContext MapContext ReduceContext Closable Mapper Reducer Partitioner RecordReader RecordWriter Factory TemplateFactory JobConf
  31. 31. 6.C++からHadoopを使う(4/10) • 単純なサンプル(1行=1レコードの固定長気象データ) #include <algorithm> #include <limits> #include <string> #include "hadoop/Pipes.hh" #include "hadoop/TemplateFactory.hh" #include "hadoop/StringUtils.hh" using namespace HadoopPipes; using namespace HadoopUtils;
  32. 32. 6.C++からHadoopを使う(5/10) class MyMapper : public Mapper { public: MyMapper( TaskContext& context ) { } virtual void map( MapContext& context ) { std::string line = context.getInputValue(); std::string year = line.substr( 15, 4 ); std::string airTemp = line.substr( 87, 5 ); context.emit( year, airTemp ); } };
  33. 33. 6.C++からHadoopを使う(6/10) class MyReducer : public Reducer { public: MyReducer( TaskContext& context ) { } virtual void reduce( ReduceContext& context ) { int maxValue = INT_MIN; while ( context.nextValue() ) { maxValue = std::max( maxValue, toInt( context.getInputValue() ) ); } context.emit( context.getInputKey(), toString( maxValue ) ); } };
  34. 34. 6.C++からHadoopを使う(7/10) int main( int argc, char* argv[] ) { return runTask( TemplateFactory< MyMapper, MyReducer >() ); }
  35. 35. 6.C++からHadoopを使う(8/10) • Makefile(32bit環境向け) CC=g++ CPPFLAGS= ¥ -m32 ¥ -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include max_temp: max_temp.cpp $(CC) $(CPPFLAGS) $< -Wall ¥ -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib ¥ -lhadooppipes -lhadooputils -lpthread ¥ -g -O2 -o $@
  36. 36. 6.C++からHadoopを使う(9/10) • Hadoop PipesでのC++プログラムの呼び出し % hadoop pipes ¥ -D hadoop.pipes.java.recordreader=true ¥ -D hadoop.pipes.java.recordwriter=true ¥ -input input.txt ¥ -output output ¥ -program max_temp
  37. 37. 6.C++からHadoopを使う(10/10) • Hadoopを使うと言っても、実の所はHadoopか ら利用されるプログラムを準備する事 • 実は今説明したサンプルは、MapReduceのI/F を利用するもの • HBaseをC++から利用するには、REST APIま たはApache Thrift APIを使う • Thrift APIはちょっと調べきれませんでした・・・ • JavaのI/Fと比較してRESTやThriftを経由する とパフォーマンスは落ちるらしい
  38. 38. 7.まとめ 1. Hadoopとは 2. MapReduceとは 3. Hadoopの構成 4. なぜHadoopか? 5. Hadoopの環境構築 6. C++からHadoopを使う 7. まとめ
  39. 39. 7.まとめ • HadoopはHDFSというファイルシステムとMap Reduceを基盤としたサブプロジェクトの集まり • Java以外の言語からも利用できる • C++でも簡単にI/Fを実装できる • この機会に名古屋近郊に在住でもっと深く勉強 したいお方は、是非大名古屋にご参加を! • おっと、今日はここまでにしておこうか。 興味を持って頂いたなら色々と試してみてね! Let’s Hadoop!

×