39
MapReduce 初心者が Hadoop をさわってみた ~もちろん C++ から~ プログラミング生放送勉強会 第4回 @名古屋 2010/06/26() You&I

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

  • View
    5.511

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

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

MapReduce 初心者が

Hadoop をさわってみた

~もちろん C++ から~

プログラミング生放送勉強会第4回@名古屋2010/06/26(土) You&I

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

Agenda

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

0.自己紹介

• H/N You&I (読み:ユー アンド アイ)

• 出身 生まれも育ちも名古屋市

• 年齢 30代前半

• 本職 商学部出身の職業プログラマ

• 言語 C++, VisualBasic 6.0, 日本語COBOL

• 日記 http://d.hatena.ne.jp/youandi/

• 所属 大規模分散技術勉強会in名古屋

名古屋アジャイル勉強会*

わんくま同盟(名古屋勉強会)*

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

0.余談

名古屋近郊の勉強会を検索するには、以下のカ

レンダーが便利。

• DSTokaiカレンダー

• ATNDカレンダー検索

• IT勉強会カレンダー検索

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

1.Hadoopとは

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

1.Hadoopとは(1/5)

• Apache Hadoop プロジェクト

http://hadoop.apache.org/

• Hadoopは幾つかのサブプロジェクトで構成

詳細は後ほど3章で説明します。

• HadoopはGoogleが2004年に発表したMapR

educeに関する学術論文を参考に作られてい

ます。

詳細は後ほど2章で説明します。

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

1.Hadoopとは(2/5)

• アイコンはぞうさんです

• 「ハドゥープ」って読みます

• 「hadoop」は造語です

• Javaで作成されたフレームワークです

• 基本的にLinux上で動作させて利用します

• 夜間バッチ処理等によく利用されています

• 分散処理を行うフレームワークです

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

1.Hadoopとは(3/5)

• Streaming APIを利用するとJava以外の言語

からも利用できます

• 但し、C++の場合はPipesを利用します

• 直線的なスケーラビリティがあります

• ペタバイト(1024TB)超のデータを扱えます

• 今までやむなく捨てていたデータを活用

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

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

でも、今日のセッションでは特に気にしない(キリッ

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

1.Hadoopとは(5/5)

日本語で読める解説書

• O'Reilly - Hadoop

http://www.oreilly.co.jp/books/9784873114392/

http://oreilly.com/catalog/9780596521981/

http://oreilly.com/catalog/0636920010388/

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

2.MapReduceとは

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

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クローン実装はない)

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

2.MapReduceとは(2/5)

• Googleのシステムについての解説は書籍にな

っているのでそちらをご覧下さい。

• ISBN:978-4774134321

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

2.MapReduceとは(3/5)

• MapReduceの処理

Mapタスク

入力データ

Reduceタスク

出力データ

データをKeyとValueの組み合わせに変換

ログデータ等の処理対象データ

Key毎にデータをグループ化

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

2.MapReduceとは(4/5)

• MapReduceの処理(詳細)

Mapタスク

入力データ

Reduceタスク

出力データ

データをKeyとValueの組み合わせに変換

ログデータ等の処理対象データ

Key毎にデータをグループ化

入力スプリット 入力データをMapタスクの処理単位に分割

Combiner

Partitioner Reduceタスクに入力データを振り分け

Mapタスクの結果が多すぎる場合にデータを集約

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

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

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

3.Hadoopの構成

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

3.Hadoopの構成(1/3)

Googleシステム構成 Hadoop

Google File System

(GFS)

Hadoop Distributed

File System(HDFS)

MapRedudeHadoop

MapReduce

BigTable HBase

• Googleシステム構成とHadoopの比較

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

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)

ZooK

eeper

(Coord

ination)

Avro

(Serializ

ation)

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

3.Hadoopの構成(3/3)

• Hadoopのクラスタ構成

Data Node

Client

Name Node

Data Node Data Node

Job Tracker

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

4.なぜHadoopか?

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

4.なぜHadoopか?(1/2)

• HBaseで高速にデータ書き込み可能

• HDFSにより大容量データも格納可能

• MapReduce他で高速にデータ処理可能

• 容易にスケールアップ可能

安西先生!タイムドリブンなシミュレータのデータ処理を速くしたいです!

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

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/

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

5.Hadoopの環境構築

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

5.Hadoopの環境構築(1/2)

• 用意するモノ– Linuxの環境

– Java Runtime Environment

– Hadoop

※Windows + Cygwinでもいけるけど、C++から

利用する場合は、Linux環境が必要

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

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/

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

6.C++からHadoopを使う

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

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

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

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

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

6.C++からHadoopを使う(3/10)

• Hadoop Pipesのクラス構成

TaskContextMapContext

ReduceContext

Closable

Mapper

Reducer

Partitioner

RecordReader

RecordWriter

Factory TemplateFactory

JobConf

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

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;

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

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 );

}

};

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

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 ) );

}

};

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

6.C++からHadoopを使う(7/10)

int main( int argc, char* argv[] )

{

return runTask(

TemplateFactory< MyMapper, MyReducer >() );

}

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

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 $@

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

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

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

6.C++からHadoopを使う(10/10)

• Hadoopを使うと言っても、実の所はHadoopか

ら利用されるプログラムを準備する事

• 実は今説明したサンプルは、MapReduceのI/F

を利用するもの

• HBaseをC++から利用するには、REST APIま

たはApache Thrift APIを使う

• Thrift APIはちょっと調べきれませんでした・・・

• JavaのI/Fと比較してRESTやThriftを経由する

とパフォーマンスは落ちるらしい

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

7.まとめ

1. Hadoopとは

2. MapReduceとは

3. Hadoopの構成

4. なぜHadoopか?

5. Hadoopの環境構築

6. C++からHadoopを使う

7. まとめ

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

7.まとめ

• HadoopはHDFSというファイルシステムとMap

Reduceを基盤としたサブプロジェクトの集まり

• Java以外の言語からも利用できる

• C++でも簡単にI/Fを実装できる

• この機会に名古屋近郊に在住でもっと深く勉強

したいお方は、是非大名古屋にご参加を!

• おっと、今日はここまでにしておこうか。

興味を持って頂いたなら色々と試してみてね!

Let’s Hadoop!