Hadoopで遊んでみる。(その1)

  • 投稿日:
  • by

詳しくは、
 Googleライクなオープンソースインフラストラクチャ「Hadoopプロジェクト」が弾みをつける

本家
 http://hadoop.apache.org/core/


・・・遊んでみよう!

=============================
インストール&設定

Hadoop構成:
 

 server1 : JobTracker + NameNode
 server2 : SecondaryNameNode
 server3 : TaskTracker + DataNode
 server4 : TaskTracker + DataNode

環境:
 Java
    /usr/local/java
  実行ユーザ: hadoop
 Hadoopインストールルートディレクトリー
    ・・・ http://hadoop.apache.org/core/ よりダウンロード(Ver 0.16.1)
    /home/hadoop/hadoop
  Hadoopファイルシステム
    /home/hadoop/filesystem

 各サーバ間でSSH接続が出来る事。

環境構築:
 
server1 で パスフレーズなしのキーペアを作成。
 % ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

 生成されたid_dsaファイルを名前を変えてserver2 からserver4へコピー
 コピー先:/home/hadoop/.ssh/authorized_keys
  $ chmod 600 ~/.ssh/authorized_keys   ←パーミッションを変更

設定ファイル:
 ファイル:/
home/hadoop/hadoop/conf/hadoop-env.sh
 内容:JAVA_HOMEを設定

  export JAVA_HOME=/usr/local/java

設定ファイル:
 ファイル:/
home/hadoop/hadoop/conf/hadoop-site.xml
 内容: sever1,2,3,4共通

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>fs.default.name</name>
                <value>server1:9000</value>
        </property>
        <property>
                <name>mapred.job.tracker</name>
                <value>server1:9001</value>
        </property>
        <property>
                <name>dfs.name.dir</name>
                <value>/home/hadoop/filesystem/dfs/name</value>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>/home/hadoop/filesystem/dfs/data</value>
        </property>
        <property>
                <name>mapred.system.dir</name>
                <value>/home/hadoop/filesystem/mapred/system</value>
        </property>
        <property>
                <name>mapred.local.dir</name>
                <value>/home/hadoop/filesystem/mapred/local</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

 ファイル:/home/hadoop/hadoop/conf/masters
  内容: server1のみ

server2

 ファイル:/home/hadoop/hadoop/conf/slaves
  内容: server1のみ

server3
server4 

ファイルシステムを構築:
 #
server1 上で実行 

$ cd /home/hadoop/hadoop
$ bin/hadoop namenode -format

  ※ /home/hadoop/filesystem 配下にHadoopのファイルシステムが構築

起動:
 #
server1 上で起動させる。
 $ cd /home/hadoop/hadoop
 $ ./bin/start-all.sh     (停止は、stop-all.sh) 

 各サーバ上で確認(Javaのjpsコマンドで確認。jps自体も表示されるが省略)
 server1 :
   % jps
   7808 NameNode
   7942 JobTracker 

 server2 :
   % jps
   8255 SecondaryNameNode

 server3,4
   4328 DataNode
   4414 TaskTracker

=============================
ファイルを格納:

例としてインストールした hadoopを格納(hadoop_putという名前で格納)
 $ cd /home/hadoop
  $ ./hadoop/bin/hadoop dfs -put hadoop hadoop_put

 確認
  $ ./hadoop/bin/hadoop dfs -ls
 Found 1 items
 /user/hadoop/hadoop_put      <dir>           2008-03-25 17:47

 取り出し(hadoop_getという名前で取り出し)
 $ ./hadoop/bin/hadoop dfs -put hadoop_put hadoop_get

ファイルシステム(NameNode )の状況を確認:
   
WEBブラウザより確認(server1のポート50070 へアクセス)
   http://server1:50070

 =============================
Jobを投入:

例1:Sudoku (サンプルデータ:puzzle1.dta を解析)
$ cd /home/hadoop/hadoop
$ ./bin/hadoop jar hadoop-0.16.1-examples.jar sudoku src/examples/org/apache/hadoop/examples/dancing/puzzle1.dta

8 5 1 3 9 2 6 4 7
4 3 2 6 7 8 1 9 5
7 9 6 5 1 4 3 8 2
6 1 4 8 2 3 7 5 9
5 7 8 9 6 1 4 2 3
3 2 9 4 5 7 8 1 6
9 4 7 2 8 6 5 3 1
1 8 5 7 3 9 2 6 4
2 6 3 1 4 5 9 7 8  

例2:円周率
$ cd /home/hadoop/hadoop
$ ./bin/hadoop jar hadoop-0.16.1-examples.jar pi 10 10000

Number of Maps = 10 Samples per Map = 10000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
08/03/25 20:09:45 INFO mapred.FileInputFormat: Total input paths to process : 10
08/03/25 20:09:46 INFO mapred.JobClient: Running job: job_200803251837_0002
08/03/25 20:09:47 INFO mapred.JobClient:  map 0% reduce 0%
08/03/25 20:09:50 INFO mapred.JobClient:  map 20% reduce 0%
08/03/25 20:09:52 INFO mapred.JobClient:  map 60% reduce 0%
08/03/25 20:09:53 INFO mapred.JobClient:  map 80% reduce 0%
08/03/25 20:09:54 INFO mapred.JobClient:  map 100% reduce 0%
08/03/25 20:10:01 INFO mapred.JobClient:  map 100% reduce 100%
08/03/25 20:10:02 INFO mapred.JobClient: Job complete: job_200803251837_0002
08/03/25 20:10:02 INFO mapred.JobClient: Counters: 9
08/03/25 20:10:02 INFO mapred.JobClient:   Job Counters
08/03/25 20:10:02 INFO mapred.JobClient:     Launched map tasks=10
08/03/25 20:10:02 INFO mapred.JobClient:     Launched reduce tasks=1
08/03/25 20:10:02 INFO mapred.JobClient:     Data-local map tasks=7
08/03/25 20:10:02 INFO mapred.JobClient:   Map-Reduce Framework
08/03/25 20:10:02 INFO mapred.JobClient:     Map input records=10
08/03/25 20:10:02 INFO mapred.JobClient:     Map output records=20
08/03/25 20:10:02 INFO mapred.JobClient:     Map input bytes=240
08/03/25 20:10:02 INFO mapred.JobClient:     Map output bytes=320
08/03/25 20:10:02 INFO mapred.JobClient:     Reduce input groups=2
08/03/25 20:10:02 INFO mapred.JobClient:     Reduce input records=20
Job Finished in 16.432 seconds
Estimated value of PI is 3.14412 

Map/Reduce(JobTracker )の状況を確認:
   
WEBブラウザより確認(server1のポート50030 へアクセス)
   http://server1:50030

   前例の円周率は時間がかかるので、この間管理画面より状態が解る。