wiki:Hadoop

Version 43 (modified by kosuke, 10 years ago) (diff)

--

hadoopのインストール(シングルノード)

作者:kosuke

動作環境:ubuntu8.10,hadoop0.20.1

1. Sun Java 6のインストール

下記のとおりにsun-java6-jdkをインストールする。

apt-get install sun-java6-jdk

2. ユーザーのグループ化

hadoopのグループを作って、hadoopユーザーをhadoopグループに登録する。

sudo addgroup hadoop

sudo adduser --ingroup hadoop hadoop

3. sshでローカルホストにログインできるようにする。

まずhadoopユーザーに切り替える。

$su - hadoop

sshをインストールする。

~$sudo apt-get install ssh

hadoop userのためにsshのキーを作成する。

~$ssh-keygen -t rsa --P

空のパスワードでローカルのマシンにログインするために次のコマンドを実行する.

~$cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

sshでローカルホストにログインする。

$ssh localhost

4. ipv6を使えないようにする.

ubuntuでは0.0.0.0を使うとipv6に紐づいてしまうらしいので、ipv6は無効にする。

よって、/etc/modprobe.d/blacklistを編集する.

# disable IPv6

blacklist ipv6

5. hadoopのダウンロード

 hadoopの安定版にアクセスしてhadoopをダウンロードする。

/usr/local/hadoopに移動する.

cd /usr/local

ダウンロードしてきたファイルを解凍する。

/usr/local$ sudo tar xzf hadoop-x.xx.x.tar.gz

解凍したフォルダの名前をhadoopに変更する.

/usr/local$ sudo mv hadoop-x.xx.x hadoop

hadoopフォルダの所有者を再帰的にhadoop:hadoopにする。

/usr/local$ sudo chown -R hadoop:hadoop hadoop

6.hadoop-env.shを編集する。

confディレクトリの中にあるhadoop-env.shのjavaのアドレスを以下のように設定する.

# The java implementation to use. Required.

export JAVA_HOME=/usr/lib/jvm/java-6-sun

7.hadoop-site.xmlを編集する。

0.20.0から、hadoop-site.xmlは三つのxmlファイルに分割された。一つ目は、hadoop.tmp.dir, fs.default.nameを設定するcore-site.xml。二つ目は、dfs.replicationを編集するhdfs- site.xml。三つ目は、mapred.job.trackerを設定するmapred-site.xmlである。 hadoop.tmp.dirのvalueは、事前にディレクトリを作って、権限を与えて置かないとエラーになる可能性がある。

a. core-site.xmlを編集する.

hadoop.tmp.dirを設定していない 解説サイトしかし、私自身は試していない.

               <configuration>
                 <property>
                   <name>hadoop.tmp.dir</name>
                   <value>/usr/local/hadoop-datastore/hadoop-hadoop</value>
                   <description>A base for other temporary directories.</description>
                 </property>
 
                 <property>
                   <name>fs.default.name</name>
                   <value>hdfs://localhost:54310</value>
                   <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class.  The uri's authority is used todetermine the host, port, etc. for a filesystem.</description>
                 </property>

               </configuration> 

hadoop.tmp.dirのパスをどうしても自分で決めたい人は、以下のコマンドを実行する必要がある.

sudo mkdir /your/path

sudo chown hadoop:hadoop /your/path

2番目のコマンドを実行しないと、hadoopユーザーに許可を与えないことになるので、8、のフォーマットでエラーが起きる。

b. hdfs-site.xml を編集する

以下のように編集する。

      <configuration>
          <property>
               <name>dfs.replication</name>
               <value>1</value>
               <description>Default block replication.
               The actual number of replications can be specified when the file is created.
               The default is used if replication is not specified in create time.
               </description>
             </property>
           <configuration>     

 

c. mapred-site.xml を編集する

以下のように編集する。

           <configuration>
            <property>
           <name>mapred.job.tracker</name>
           <value>localhost:9001</value>
           <description>The host and port that the MapReduce job tracker runs at.  If "local", then jobs are run in-process as a single map and reduce task. </description>
          </property>
          </configuration>

9. フォーマット

hadoopのインストールの第一歩はHDFS形式にフォーマットすることです.これは通常、クラスターのローカルファイルシステムのトップで実行される。今回の場合は、一台しかないので、このマシンにインストールした。

もちろん、フォーマットなので使用中のファイルをフォーマットすればそのファイルのデータは消える。

以下にフォーマットのコマンドを示す.

$ <HADOOP_INSTALL>/hadoop/bin/hadoop namenode -format

注意:<HADOOP_INSTALL>はhadoopをインストールしたフォルダを示す.ここでは、/usr/localがそれにあたる。

10. シングルノードで動かす。

以下に、hadoopの起動コマンドを示す.

$ bin/start-all.sh

11. プロセスのデバッグ

プロセスがきちんと動いているかどうか確かめる必要がある。確かめるには以下のコマンドを使う。

$ jps

下記のようなのが表示されれば成功。

8816 Jps
8293 DataNode
8700 TaskTracker
8457 SecondaryNameNode
8570 JobTracker
8157 NameNode

12. ポートのデバッグ

7.で構成したポートが正しくhadoopに認識されているか確かめる.確かめるにはnetstatを使った以下のコマンドを実行する.

sudo netstat -plten | grep java

下記のようなのが表示されれば成功。

{{{ tcp 0 0 192.168.66.133:54310.0.0.0:*     LISTEN 1001 33013 8157/java tcp 0 0 192.168.66.133:54311 0.0.0.0:*   LISTEN 1001 34783 8570/java }}}

もし、この時点でエラーが発生した場合は、<HADOOP_INSTALL>/logs/にあるlogファイルをチェックするとよい。

13. シングルノードを止める。

止めるには以下のコマンドを実行する。

$ <HADOOP_INSTALL>/bin/stop-all.sh

14. MapReduceを動かしてみる

テキストファイルになにか適当な文字を何回か入力してそれをhadoopにカウントさせてみる。hadoopディレクトリ以下にinputsというディレクトリを作成する。

$ mkdir inputs

作ったinputsにfile1というファイルを作り、それに以下hoge hoge hoge fuga fugaを入力する。

$ cat > inputs/file1

hoge hoge hoge fuga fuga

作ったディレクトリをHDFSに転送する.(start-all.sh実行前にdfsのコマンドを実行すると Retrying connect to server: localhost/127.0.0.1:54310というエラーが起きる。)

$ bin/start-all.sh

$ bin/hadoop dfs -copyFromLocal inputs inputs

ここで、copyFromLocal: org.apache.hadoop.hdfs.server.namenode.SafeModeException?: Cannot create directory /user/hadoop/inputs. Name node is in safe mode.のようなエラーがでるときがある。こういう場合は以下のコマンドを実行するとよい。

$ bin/hadoop dfs -put inputs inputs

作ったディレクトリが転送されているか確認する。

$ bin/hadoop dfs -ls

転送されたディレクトリにfile1があることを確認する。

$ bin/hadoop dfs -ls inputs

サンプルプログラムを動かしてみる。

$ bin/hadoop jar hadoop-0.20.0-examples.jar wordcount inputs outputs

ここで、・・・java.io.IOException: Error opening job jar: hadoop-0.20.0-examples.jarと表示される場合は、<HADOOP_INSTALL>/hadoop/hadoop-0.20.0-examples.jarのアクセス権限を変更してあげるとよい。僕の環境では実行し終わるまでに24秒かかった。

出力ディレクトリを確認してみる。

$ bin/hadoop dfs -ls

つぎのような表示が出ればOK

drwxr-xr-x - hadoop supergroup 0 2009-08-24 12:01 /user/hadoop/outputs

DFS上のファイルを出力する。

  

$ bin/hadoop dfs -cat outputs/part-r-00000

次のように表示されればOK.

{{{

fuga 2 hoge 3 }}}

HDFS上のファイルをローカルに転送する。

$ bin/hadoop dfs -copyToLocal outputs/part-r-00000 ./part-r-00000

転送したファイルを表示する。

cat part-r-00000

fuga 2
hoge 3