Edited at

CubieTruck(Cubieboard) Hadoop構築

More than 5 years have passed since last update.

CubieTruckでHadoop クラスタ構築してみた。

IMG_0058.jpg

■ハード構成 

 ・自作無線ルータ(Raspberry Pi) 
 ・CubieTruck (Fedora 19)
   ・NameNode 1台
・DataNode 4台

■ミドル構成

・Oracle JDK 1.7 for ARM
・Hadoop 2.2.0

インスール手順 (全ノードで実施)

/etc/hostsの設定(DNSの場合は省略)

# vi /etc/hosts

※以下を追記
192.168.100.2 master00 master00.localdomain
192.168.100.3 slave01 slave01.localdomain
192.168.100.4 slave02 slave02.localdomain
192.168.100.5 slave03 slave03.localdomain

JDKのインストール

HadoopはJavaベースで動いているので、JDKのインストールします。

※OpenJDKでも動くみたいです。

# cd /usr/local/src

# wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-linux-i586.tar.gz
# tar zxvf jdk-7u67-linux-i586.tar.gz
# mv jdk1.7.0_60 /opt/

Hadoop実行ユーザの準備

hadoop起動ユーザを作成します。

# groupadd hadoop

# useradd -g hadoop hduser
# passwd hduser
New UNIX password: ← 適当
Retype new UNIX password: ← 同じ

sshの準備

HadoopはNode間をssh接続(パスワードなし)で接続するので、パスワードなしで接続できるように設定します。

# su - hduser

$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa): (※)
Created directory '/home/hduser/.ssh'.

(※)そのままReturn

$ cd
$ cat ./.ssh/id_dsa.pub >> ./.ssh/authorized_keyschmod 600
$ ./.ssh/authorized_keys
$ ssh localhost
※ノンパスワードでsshアクセスできることを確認。
 (初回アクセス時のみyesが必要)
 NameNodeで設定したカギを各ノードに配布してノード間も
 パスワード無しでアクセス可能としておきます。

Hadoop 2.2.0のインストール

http://www.apache.org/dyn/closer.cgi/hadoop/core/

  ※適当なミラーから「hadoop-2.2.0.tar.gz」ダウンロード

$ exit   ← hduser から抜けます。

# cd /usr/local.src
# wget http://ftp.riken.jp/net/apache/hadoop/core/hadoop-2.2.0/hadoop-2.2.0.tar.gz
# tar zxvf hadoop-2.2.0.tar.gz
# mv hadoop-2.2.0 /opt/hadoop

※所有権を実行ユーザに変更
# chown -R hduser:hadoop /opt/hadoop

Hadoop用の環境変数設定

hadoopの起動に必要な環境変数を設定します。

# su - hduser

$ vi ~/.bashrc
※以下を追記
export JAVA_HOME=/opt/jdk1.7.0_60
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_INSTALL=/opt/hadoop-2.2.0
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL

設定の確認

$ source ~/.bashrc

$ hadoop version
Hadoop 2.2.0
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4
This command was run using /opt/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar

pathが取っていればversionが表示されます。

Hadoop設定ファイルの編集

設定ファイル

・${HADOOP_INSTALL}/etc/hadoop/core-site.xml

・${HADOOP_INSTALL}/etc/hadoop/yarn-site.xml
・${HADOOP_INSTALL}/etc/hadoop/mapred-site.xml
・${HADOOP_INSTALL}/etc/hadoop/hdfs-site.xml
・${HADOOP_INSTALL}/etc/hadoop/slave

まず、HDFSのディレクトリを作成します。

$ exit   ← hduser から抜けます。

# mkdir -p /export/hdfs/namenode
# mkdir -p /export/hdfs/datanode
# chown -R hduser:hadoop /export/hdfs

設定ファイルを作っていきます。

すべてのファイルに共通してconfigurationタグの間を修正します。

□core-site.xml

# su - hduser

$ vi ${HADOOP_INSTALL}/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed under the Apache License, Version 2.0 (the "License");  
:省略

<configuration>
<!-- ここから追記 -->
<property>
<name>fs.default.name</name>
<value>hdfs://master00:9000</value>
</property>
<!-- ここまで -->
</configuration>

□yarn-site.xml

$ vi ${HADOOP_INSTALL}/etc/hadoop/yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed under the Apache License, Version 2.0 (the "License");       :省略

<configuration>
<!-- ここから追記 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>
yarn.nodemanager.aux-services.mapreduce.shuffle.class
</name>
<value>
org.apache.hadoop.mapred.ShuffleHandler
</value>
</property>
<!-- ここまで -->
</configuration>

□mapred-site.xml

$ cd ${HADOOP_INSTALL}/etc/hadoop/

$ cp mapred-site.xml.template mapred-site.xml
$ vi mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- Licensed under the Apache License, Version 2.0 (the "License");
 :省略
<configuration>
<!-- ここから追記 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- ここまで -->
</configuration>

□hdfs-site.xml

$ vi ${HADOOP_INSTALL}/etc/hadoop/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- Licensed under the Apache License, Version 2.0 (the "License");
 :省略
<configuration>
<!-- ここから追記 -->
<property>
<name>dfs.replication</name>
<value>4</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/export/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/export/hdfs/datanode</value>
</property>
<!-- ここまで -->
</configuration>

□slave(Namenodeのみ)

master00

slave01
slave02
slave03

これで設定完了です。

NameNodeのフォーマット

最初にNameNodeをフォーマットする必要があります。

master00にsshで接続します。

# su - hduser

$ hdfs namenode -format

実行ログが出力され、完了です。

Hadoop起動

master00にsshで接続します。

# su - hduser

$ start-all.sh

これで起動が完了です。

起動後に各ノードでプロセスチェックを行います。

□master00

# su - hduser

$ jps
549 NameNode
920 ResourceManager
1023 NodeManager
755 SecondaryNameNode
1349 Jps
640 DataNode

□slave0x

# su - hduser

$ jps
654 Jps
380 DataNode
539 NodeManager

Web UIで確認

http://master00:50070/

hdoop.png

構築は以上、exampleなどで実行可能な状態となりました。

【補足】

ARM系でのHadoop利用はコスト面ではいいかも知れませんが、Map Reduceは、各ノードの処理速度が遅いため実用的でないと感じました。

以下の参考記事に、Apache Sparkにすれば、メモリ不足も解消できるそうなので、そちらも試したいと思います。

参考

http://www.dzone.com/articles/big-data-processing-arm-0