Hadoop Introduction

はじめにAgenda
12345•Hadoopおさらい•HadoopStreaming•Hive•Demo (Apacheログ解析)•まとめHadoopの概要

Hadoopの特徴

Hadoop クラスタ構成

バッチの進捗状況管理
Map/Reduceタスク割振りマスターサーバ

NameNode

JobTracker

HDFS管理DataNode管理

Map/Reduceタスク
起動

データ・ブロック送
受信

DataNode

TaskTracker

DataNode

TaskTracker

HDFS

Map
ReduceHDFS

Map
Reduceスレーブサーバ#1

スレーブサーバ#N

Hadoop 適用範囲

Hadoop≠RDBMSMapReduce

MapReduce ProgrammingModelMapReduce ProgrammingModel

MapperInput
Data

MapperReducer

Output
Data1

Reducer

OutputData2

Shuffle&SortMapper

Map
Phase

ShufflePhase

ReducePhase

MapReduceの各フェーズ

HadoopでMapReduce
JobTracker

Assign Map Task

HDFSInput
Data

Assign Reduce Task

HDFS

MapperMapperReducer

Output
Data1

Reducer

OutputData2

Shuffle&Sort

MapperMap
Phase

ShufflePhase

ReducePhase

MapReduce Example

WordCountMapReduce Example:WordCountMapReduce Example:WordCount
JobTracker

HDFS

Input file : doc1

foo foo foo
bar bar buz

MapReduce Example:WordCount
JobTracker

doc1:foo
doc1:foo

HDFS

Input file : doc1

foo foo foo
bar bar buz

Mapperdoc1:foo
doc1:bar
Mapperdoc1:bar
doc1:buz
Mapper

MapPhaseMapReduce Example:WordCount
JobTracker

foo:1
foo:1

HDFS

Input file : doc1

foo foo foo
bar bar buz

Mapperfoo:1
bar:1
Mapperbar:1
buz:1
Mapper

MapPhaseMapReduce Example:WordCount
JobTracker

foo:1
foo:1

HDFS

Input file : doc1

foo foo foo
bar bar buz

foo:<1,1,1>

MapperReducer

foo:1
bar:1
MapperShuffle&Sort

bar:<1,1>
buz:<1>

Reducer

bar:1
buz:1
MapperShufflePhase

MapReduce Example:WordCount
JobTracker

HDFS

MapperReducer

Input file : doc1

foo foo foo
bar bar buz

foo:3

Mapperbar2
buz:1
Reducer

MapperReducePhase

MapReduce Example:WordCount
JobTracker

HDFS

MapperHDFS

Reducer

Input file : doc1
foo foo foo
bar bar buz

foo:3

Mapperbar2
buz:1
Reducer

MapperReduce
Phase

foo:3
bar:2
buz:1

Hadoop でMapReducepublic static void
main ...

Java以外の言語じゃ利用できないの？

そんなことはありませんHadoop で MapReduce

http://pig.apache.org/

http://hive.apache.org/

Agenda12345•Hadoopおさらい•HadoopStreaming•Hive•Demo (Apacheログ解析)•まとめHadoop Streaming

Streaming
Input
Data

MapperOutput
Data

Reducer
STDOUT

STDIN

Shuffle& Sort
STDOUT

STDIN

Hadoop Streaming
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming.jar-inputinputData-output outputData-mapper map_exec-reducer reduce_exec

RubyでWordCountmapper.rb

reducer.rb

InputData（入力データの準備）

実行

途中経過

途中経過

OutputData（出力結果の取得）

Hadoop Streaming

まとめAgenda123
45•Hadoopおさらい•HadoopStreaming•Hive•Demo (Apacheログ解析)•まとめHive# hive -e 'select count(distinct user_id) from logs;
Hive history file =/tmp/root/hive_job_log_root_2xxxxxxx_xxx.txt
Total MapReduce jobs = 1...
Tracking URL = *********
map = 0%, reduce = 0%
map = 5%, reduce = 0%
...

メリット
Map.rbReducer.rb#!/usr/bin/ruby#!/usr/bin/ruby

ARGF.each do |line|
line.chomp!
line.split.each do |word|puts "#{word}¥t1"
end
end

data = Hash.new {|h,k| h[k] = 0}
ARGF.each do |line|
line.chomp!
key, value = line.split(/¥t/)data[key] += 1
end
data.each do |k,v|
puts "#{k}¥t#{v}"end

select count(distinct user_id) from logs;
MapReduceを意識することなく、SQLライクに記述可能

デメリットHiveQLHiveQL

テーブル作成

テーブル作成
型の種類

データ型名

内容

TINYINTSMALLINT
INT
BIGINTFLOAT
DOUBLE
BOOLEANSTRING

1Byteの整数
2Byteの整数
4Byteの整数
8Byteの整数
単精度の浮動小数点
倍精度の浮動小数点
TRUEとFALSE
文字列

配列型

ARRAY < データ型 >データ型を配列として扱う

マップ型

MAP <プリミティブ型, データ型>

Key, Value形式でデータを扱う

構造型

STRUCT<カラム名：データ型 ,,,>

複数のデータ型を構造化する

整数型
プリミティブ型
浮動小数点型
論理型
文字列型テーブル作成

テーブル作成

構文

内容

FIELDS

フィールド（項目）の区切り文字を指定する。
デフォルトは0x01。

COLLECTION ITEMSコレクション（配列）の区切り文字を指定する。
デフォルトは区切り文字無し。

MAP KEYS

マップのキーと値の区切り文字を指定する。
デフォルトは区切り文字無し。

LINES

行の区切り文字を指定する。
デフォルトは¥n

SERDE

SerDe（シリアライズ・デシリアライズ）クラスを指定する。

テーブル作成

CREATE TABLE logs(id INT, created_at STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘LINES TERMINATED BY'¥n';

CREATE TABLE logs(id INT, created_at STRING)PARTITIONED BY(date STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘LINES TERMINATED BY'¥n';テーブル操作

テーブル情報表示データの格納データの格納LOAD DATA LOCAL FILEⅩ
INTO table_name

HIVE
LOAD DATA FILEＹ
INTO table_name

FILEⅩ

FILEＹ

HDFS

データの格納データの抽出データの絞込み

データの並び替えデータの集計処理

テーブルの結合

Hive

Agenda1
2
3
45•Hadoopおさらい•HadoopStreaming•Hive•Demo (Apacheログ解析)•まとめApacheログ解析

googlebot.com - - [01/May/2012:00:07:57 +0900] "GET /robots.txt HTTP/1.1" 404 216 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;+http://www.google.com/bot.html)"
rate-limited-proxy-209-85-238-7.google.com - - [01/May/2012:00:07:59 +0900] "GET / HTTP/1.1" 200 21120 "-" "DoCoMo/2.0
N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)"
rate-limited-proxy-209-85-238-7.google.com - - [01/May/2012:00:28:53 +0900] "GET /?feed=rss2 HTTP/1.1" 304 0 "-" "Feedfetcher-Google;(+http://www.google.com/feedfetcher.html; 2 subscribers; feed-id=16492007851965158684)"
niederhausen.tm.informatik.uni-leipzig.de - - [01/May/2012:00:33:56 +0900] "GET /robots.txt HTTP/1.1" 404 216 "-" "findlinks/2.5(+http://wortschatz.uni-leipzig.de/findlinks/)"
61-23-123-166.rev.home.ne.jp - - [01/May/2012:01:06:33 +0900] "GET /wp-content/themes/inove_labsOT/style.css HTTP/1.1" 200 29755"http://labs.opentone.co.jp/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
61-23-123-166.rev.home.ne.jp - - [01/May/2012:01:06:33 +0900] "GET /wp-content/themes/inove_labsOT/style.css HTTP/1.1" 200 29755"http://labs.opentone.co.jp/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
61-23-123-166.rev.home.ne.jp - - [01/May/2012:01:06:33 +0900] "GET /wp-content/themes/inove_labsOT/pagenavi-css.css?ver=2.60
HTTP/1.1"

Apacheログ解析：テーブル作成

Apacheログ解析：データ格納

Apacheログ解析：集計

Apacheログ解析：結果

Agenda12345•Hadoopおさらい•HadoopStreaming•Hive•Demo (Apacheログ解析)
•まとめ

まとめ

まとめ

ご清聴ありがとうございました