Outline
Hadoop2系のYARN上で色々なアプリを動かすことになったのでテスト環境を作ってみた。
色々資料を見ましたが、擬似分散モードでの環境構築はなんの説明もなしに書かれているものが多かったので、なるべく丁寧に記しておきます。
構築手法は、少し冗長ですが完全分散モードに寄せているので、擬似分散ならではの変な症状にはならないはず。。
環境
OS: Ubuntu14.04 (AWS EC2)
ユーザー: ubuntu
VPC: 特に設定なし。
IP: PublicIPとPrivateIPのどちらも使用。
Hadoop 2.5.2
port: 全開放(22, 80, 8020, 8032, 8088, 50070が開いてればたぶん大丈夫)
以降の操作はこのマシンにubuntuユーザーでssh接続した状態で進める。
役割
master
・NameNode
・ResourceManager
・DataNode
・NodeManager
それぞれのサービスの役割はこちらを参照。
初期準備
Hadoopクラスタではsshで通信しあうので、自分自身に対してもパスワードでなく鍵での認証にする。
# PasswordAuthentication no を確認
sudo vim /etc/ssh/sshd_config
# 鍵作成
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 鍵を自身のリストに登録
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 試しに自分にSSHしてみる。(PrivateID, localhost, 0.0.0.0などなんでもいい。)
ssh XXX.XXX.XXX.XXX
# 元に戻す。
exit
各種インストール
Library
# java
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer -y
# Hadoop
# めんどくさいのでHomeにそのまま置く
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz
tar zxvf hadoop-2.5.2.tar.gz
環境変数を設定する。
sudo vim /etc/profile
# 末尾に追記する。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_HOME=/home/ubuntu/hadoop-2.5.2
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
# 適用する
source /etc/profile
重複するけど、こいつも読まれるので編集。
(既に初期値が入っているので上書きします。)
vim hadoop-2.5.2/etc/hadoop/hadoop-env.sh
# 既に初期値が入っているので上書きします。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_CONF_DIR=/home/ubuntu/hadoop-2.5.2/etc/hadoop
HDFS準備
datanodeのディレクトリ用意
# datanodeの保存先を用意しておく。
mkdir -p myHadoop/data1
core-site.xml
vim hadoop-2.5.2/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://[PrivateIP]:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ubuntu/myHadoop/data1</value>
</property>
</configuration>
項目の意味やデフォルト値はこちらを参照。
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/core-default.xml
hdfs-site.xml
vim hadoop-2.5.2/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
項目の意味やデフォルト値はこちらを参照。
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
namenodeのformat
# 実行すると現状のnameNodeのデータは消えるので注意。
# 設定を変えて試したい時とかにリセット目的で使うとかしました。
hdfs namenode -format
起動
master
## namenode起動
hadoop-2.5.2/sbin/hadoop-daemon.sh start namenode
## dataNode起動
hadoop-2.5.2/sbin/hadoop-daemon.sh start datanode
確認
terminalから
# datanode, namenodeがあればOK。
jps
WebUIから
http://PublicIP:50070/
DataNodeタブで、一つデータノードが登録されていることを確認
停止(必要があれば)
hadoop-2.5.2/sbin/hadoop-daemon.sh stop namenode
hadoop-2.5.2/sbin/hadoop-daemon.sh stop datanode
YARN準備
vim hadoop-2.5.2/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>[PrivateIP]</value>
</property>
</configuration>
項目の意味やデフォルト値はこちらを参照。
http://hadoop.apache.org/docs/r2.5.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
起動
master
## resource Manager起動
hadoop-2.5.2/sbin/yarn-daemon.sh start resourcemanager
## NodeManager起動
hadoop-2.5.2/sbin/yarn-daemon.sh start nodemanager
確認
terminalから
# ResourceManager, NodeManagerがあればOK
jps
WebUIから
http://[PublicIP]:8088/
nodesで一つ登録されていることを確認
停止(必要があれば)
hadoop-2.5.2/sbin/yarn-daemon.sh stop resourcemanager
hadoop-2.5.2/sbin/yarn-daemon.sh stop nodemanager
クライアントからの動作確認
別記事にて記載。
ハマったポイントとか
起動に失敗した時にログが便りにならない。
何が原因で失敗したのかのログはどこかに出力されてるんだろうか?
ホストの設定をlocalhostにすると、clientから(PublicIPから)繋げない。。。
netstat -antu
とかで見ると、localhostからのアクセスしか受け付けないようになってた。。
fsDefaultをlocalhostにするとつなげない。