hadoop
DESCRIPTION
Yahoo!でも使われているMapReduceのオープンソース版「Apache Hadoop」の紹介と動かし方TRANSCRIPT
![Page 1: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/1.jpg)
Hadoopの紹介角田 直行 <[email protected]>
![Page 2: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/2.jpg)
Agenda
• Hadoopとは• MapReduceとは• Hadoopの動かし方• 最も簡単な実行• 複数マシンで実行• 独自Mapper、Reducerを書く
![Page 3: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/3.jpg)
Hadoopとは
• GoogleのMapReduceやGFS(Google File System)をDoug Cutting氏がJavaで実装したオープンソースプロダクト
• Apache Luceneのサブプロジェクト• Doug Cutting氏の子供が付けたぬいぐるみの名前
かわいくない・・・
![Page 4: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/4.jpg)
Doug Cutting氏 三部作
• Lucene - 全文検索ライブラリ• Nutch - Luceneを使ったWeb検索エンジン + Webクローラ
• Hadoop - Nutch開発から生まれたプロダクト
![Page 5: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/5.jpg)
Hadoopとは
• 何気にYahoo!が多く関わっている• Doug Cutting氏、他開発者の多くが中の人• つーか、Yahoo!がスポンサー• Hadoopベースの「Pig」という研究プロジェクトがある
もっとかわいくない・・・
![Page 6: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/6.jpg)
MapReduceとは
• GoogleのJeffrey Dean氏らによって開発された分散処理のためのプログラミングモデル
• 大量のデータを素早く処理するのに、複数CPUを積んだマシン1台で処理するのではなく、沢山のマシンを使って処理するアプローチを用いた技術
http://labs.google.com/papers/mapreduce.htmlhttp://www.radiumsoftware.com/0608.html#060831
![Page 7: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/7.jpg)
MapReduceとは
• C++で書かれている• MapReduceを利用したプログラムは5000以上(2006年7月時点)
• 実際は、MapReduceを簡単に扱えるようにしたスクリプト言語「Sawzall」(Rob Pike氏作)を使っているらしい
• 本番サーバでガンガンに使えるらしい(優先タスク管理が出来ている)
![Page 8: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/8.jpg)
MapReduceとは
• Mapタスク(フィルタ)• 膨大な量の元データを分解し、必要な情報を抽出し、有用な形へと変換し出力する
• Reduceタスク(アグリゲータ)• 抽出された情報を集約し、一塊のデータとして出力する
http://www.radiumsoftware.com/0608.html#060831
![Page 9: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/9.jpg)
MapReduceとは
http://d.hatena.ne.jp/YuichiTanaka/20060923
Plaggerを使っていると、MapReduceがどんなものかが掴めるかもしれない?
![Page 10: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/10.jpg)
GoogleでのMapReduce利用例
• 分散Grep• 分散ソート• 逆リンク解析• アクセスログ解析
• 検索インデックス構築• 文書クラスタ解析• 機械学習• 統計機械翻訳
・・・ etc
![Page 11: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/11.jpg)
Google File Systemとは
• Linux上に構築される分散ファイルシステム• マスターサーバ1つ、チャンクサーバいっぱい• ファイル操作は読みや追記が多く、書き換えが少ないという前提の元に最適化されている
• 冗長性が高い(壊れたら自動復旧)
http://dev.ariel-networks.com/column/tech/google_file_system
![Page 12: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/12.jpg)
最も簡単な実行
![Page 13: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/13.jpg)
ダウンロード、解凍、実行
$ env | grep JAVA
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
$ java -version
java -versionjava version "1.5.0_07"Java(TM) 2 Runtime Environment, Standard Edition
(build 1.5.0_07-154)Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing)
$ curl -O http://www.apache.org/dist/lucene/hadoop/stable/hadoop-0.13.0.tar.gz
$ tar zxvf hadoop-0.13.0.tar.gz
$ cd hadoop-0.13.0
$ bin/hadoop version
Hadoop 0.13.0Subversion https://svn.apache.org/repos/asf/lucene/hadoop/branches/
branch-0.13 -r 544207Compiled by cutting on Mon Jun 4 12:01:18 PDT 2007
$
![Page 14: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/14.jpg)
色々なExample
$ bin/hadoop jar hadoop-0.13.0-examples.jar wordcount <入力先Dir> <出力先Dir>
入力先Dir以下のファイルの単語を数え上げる
$ bin/hadoop jar hadoop-0.13.0-examples.jar pi <Map数> <1MapあたりのSample数>
円周率計算
$ bin/hadoop jar hadoop-0.13.0-examples.jar grep <入力先Dir> <出力先Dir> <regex>
Grep
![Page 15: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/15.jpg)
複数マシンで実行
![Page 16: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/16.jpg)
準備するもの
•マシン複数台(mac01, mac02, mac03)• mac01をマスターとする•mac01, mac02, mac03をスレーブとする• Java 1.5以上• SSHサーバ稼働
![Page 17: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/17.jpg)
ディレクトリレイアウト
/Users/kaku/hadoop-deployed/hadoop-0.13.0
/Users/kaku/hadoop-deployed/filesystem
/Users/kaku/hadoop-deployed
hadoop環境ルートディレクトリ
hadoopインストールディレクトリ
HDFSルートディレクトリ
※全マシン、上記の通りに配置する
![Page 18: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/18.jpg)
用語説明
•Namenode - DFS上でのマスタ、1つ• Datanode - DFS上でのスレーブ、沢山• Jobtracker - MR上でのマスタ、1つ• Tasktracker - MR上でのスレーブ、沢山
![Page 19: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/19.jpg)
SSH公開鍵登録
•mac01で鍵作成
•mac01~03に登録$ ssh-keygen -t rsa
$ vi ~/.ssh/authorized_keys
![Page 20: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/20.jpg)
スレーブ登録
$ cd ~/hadoop-deployed/hadoop-0.13.0
$ cat conf/slaves
localhost
$ vi conf/slaves
$ cat conf/slaves
mac01
mac02
mac03
$
![Page 21: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/21.jpg)
conf/hadoop-env.sh
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/
CurrentJDK/Home
export HADOOP_HOME=/Users/kaku/hadoop-deployed/hadoop-0.13.0
![Page 22: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/22.jpg)
conf/hadoop-site.xml<configuration>
<property>
<name>fs.default.name</name>
<value>mac01:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>mac01:9001</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>17</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>7</value>
</property>
Namenodeのホスト名:ポート
Jobtrackerのホスト名:ポート
スレーブマシン数の倍数より大きい素数がいいらしい
スレーブマシン数の倍数に近い素数がいいらしい
![Page 23: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/23.jpg)
<property>
<name>dfs.name.dir</name>
<value>/Users/kaku/hadoop-deployed/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/Users/kaku/hadoop-deployed/filesystem/data</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/Users/kaku/hadoop-deployed/filesystem/mapred/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/Users/kaku/hadoop-deployed/filesystem/mapred/local</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
![Page 24: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/24.jpg)
hadoopをリモートコピー
$ rsync -avrz -e ssh ~/hadoop-deployed/hadoop-0.13.0/ mac02:~/hadoop-deployed/
hadoop-0.13.0/
$ rsync -avrz -e ssh ~/hadoop-deployed/hadoop-0.13.0/ mac03:~/hadoop-deployed/
hadoop-0.13.0/
![Page 25: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/25.jpg)
Namenodeの初期化$ cd ~/hadoop-deployed/hadoop-0.13.0
$ bin/hadoop namenode -format
07/07/21 05:26:52 INFO dfs.Storage: Storage directory /Users/kaku/hadoop-deployed/
filesystem/name has been successfully formatted.
$ find ~/hadoop-deployed/filesystem
/Users/kaku/hadoop-deployed/filesystem
/Users/kaku/hadoop-deployed/filesystem/name
/Users/kaku/hadoop-deployed/filesystem/name/current
/Users/kaku/hadoop-deployed/filesystem/name/current/edits
/Users/kaku/hadoop-deployed/filesystem/name/current/fsimage
/Users/kaku/hadoop-deployed/filesystem/name/current/fstime
/Users/kaku/hadoop-deployed/filesystem/name/current/VERSION
/Users/kaku/hadoop-deployed/filesystem/name/image
/Users/kaku/hadoop-deployed/filesystem/name/image/fsimage
$
![Page 26: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/26.jpg)
起動
$ cd ~/hadoop-deployed/hadoop-0.13.0
$ cat bin/start-all.sh
starting namenode, logging to /Users/kaku/hadoop-deployed/hadoop-0.13.0/logs/hadoop-
kaku-namenode-mac01.out
macbook.local: starting datanode, logging to /Users/kaku/hadoop-deployed/hadoop-0.13.0/
logs/hadoop-kaku-datanode-mac01.out
localhost: starting secondarynamenode, logging to /Users/kaku/hadoop-deployed/
hadoop-0.13.0/logs/hadoop-kaku-secondarynamenode-mac01.out
starting jobtracker, logging to /Users/kaku/hadoop-deployed/hadoop-0.13.0/logs/hadoop-
kaku-jobtracker-mac01.out
macbook.local: starting tasktracker, logging to /Users/kaku/hadoop-deployed/hadoop-0.13.0/
logs/hadoop-kaku-tasktracker-mac01.out
$
![Page 27: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/27.jpg)
ポート確認
$ lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1274 kaku 8u IPv6 0x3967a24 0t0 TCP [::127.0.0.1]:cslistener (LISTEN)
$ lsof -i:9001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1432 kaku 9u IPv6 0x5bdd7f8 0t0 TCP [::127.0.0.1]:etlservicemgr (LISTEN)
$
![Page 28: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/28.jpg)
http://mac01:50060/tasktracker.jsp
![Page 29: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/29.jpg)
MapReduce実行中
![Page 30: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/30.jpg)
停止
$ cd ~/hadoop-deployed/hadoop-0.13.0
$ cat bin/stop-all.sh
stopping jobtracker
mac01: stopping tasktracker
stopping namenode
mac01: stopping datanode
localhost: stopping secondarynamenode
$
![Page 31: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/31.jpg)
独自Mapper、Reducerを書く
![Page 32: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/32.jpg)
例:単語カウントJava Standard Edition and Java Enterprise Edition
<Java,1> <Standard,1> <Edition,1> <and,1>
<Java,1> <Enterprise,1> <Edition,1>
<Java,2> <Standard,1> <Edition,2>
<and,1> <Enterprise,1>
Mapper
Reducer
![Page 33: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/33.jpg)
Mapper
public class WordCountMapper extends MapReduceBase implements Mapper {
private static final IntWritable ONE = new IntWritable(1);
public void map(WritableComparable key, Writable value,
OutputCollector output, Reporter reporter) throws IOException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
output.collect(new Text(itr.nextToken()), ONE);
}
}
}
![Page 34: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/34.jpg)
Reducer
public class WordCountReducer extends MapReduceBase implements Reducer {
public void reduce(WritableComparable key, Iterator values,
OutputCollector output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += ((IntWritable) values.next()).get();
}
output.collect(key, new IntWritable(sum));
}
}
![Page 35: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/35.jpg)
Eclipse プラグイン
• IBM alphaWorksにて公開している、Hadoopアプリケーション支援ツール
• 現状は、ウィザードでMapper、Reducerのスケルトンを作ってくれるだけ
• 今後に期待
http://www.alphaworks.ibm.com/tech/mapreducetools
![Page 36: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/36.jpg)
最後に
![Page 37: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/37.jpg)
情報少な杉
• オフィシャルのドキュメント少ない• 検索エンジンも全然ヒットしない• 誰もブログ書いてない• 韓国、中国にそこそこ情報あり(翻訳ツール必須)• 自分も発表した以上のことは全然分かりません><
![Page 38: Hadoop](https://reader033.vdocuments.site/reader033/viewer/2022042601/54be2e4a4a79593b228b4579/html5/thumbnails/38.jpg)
ご清聴ありがとうございました