読者です 読者をやめる 読者になる 読者になる

8t's BBR

よくつまったあれこれをメモ

Hadoopクラスタ構築への道 ~疑似分散編~

HadoopはCDHではなく、Apacheの公式ページからビルド
※完全分散は別記事。ここでは疑似分散まで

環境
Javaのインストール

まずはjava7をダウンロード ※hadoop-2.7の時点ではjava8はまだ対応していない

#  リポジトリ追加
$  sudo add-apt-repository ppa:webupd8team/java

#  アップデート
$  sudo apt-get update

#  jdk7インストール
$  sudo apt-get install oracle-jdk7-installer

↓参考にしたサイト
ubuntu 14.04にOracleJDK7(JAVA)をインストールする - Qiita


Hadoopインストール

基本的にはApacheの公式ドキュメントに沿って行う
Apache Hadoop 2.7.2 – Hadoop: Setting up a Single Node Cluster.

ぐぐるといろんな方が様々なパラメータを追加で設定しているやり方を載せてくれているが、初心者が下手に真似すると爆死します(俺の事)

# HadoopパッケージをHome(好きなとこ)に置く
$  wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

# 解凍
$  tar zxvf hadoop-2.7.2.tar.gz

# 環境変数を設定
$  sudo vim /etc/profile

末尾に以下を追加、後々便利なので、余分なものも追加しているが、公式にのっているやつだけもよい
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_HOME=/home/#ユーザー名/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# 適用する
$  source /etc/profile


ここからHadoop環境の設定

# まずは、etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_CONF_DIR=/home/ユーザー名/hadoop-2.7.2/etc/hadoop


# 次に etc/hadoop/ の core-site.xmlとhdfs-site.xmlに以下の内容を追加
#  core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

# hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

# localhostにパスフレーズなしで自分に接続できるか確認
$  ssh localhost

SSHで接続できないときは以下のページを参照
複数の仮想マシンを互いにSSHで接続 - 8t's BBR

# ファイルシステムのフォーマット(設定ファイルをいじるたびに必ず行う)
$  (bin/)hdfs namenode -format   ///pathを通していたらbin/かかなくてよい、以下略

# デーモンの起動
$  (sbin/)start-dfs.sh

# デーモンがきちんと起動したか確認。
$  jps

立ち上がっていれば、NamenodeとかDatanodeとかが表示される。
ウェブで確認するには、http://localhost:50070でつながるかどうか


ここから実際にサンプルアプリケーションを動かしてみる

#  hdfsのユーザーを作成
$  hdfs dfs -mkdir /user
$  hdfs dfs -mkdir /user/<username>

#  hdfs用のinputディレクトリ作成
$  hdfs dfs -put etc/hadoop input

#  アプリケーション起動。公式ではgrepでやってる
$  hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input output

#  出力データ確認
$  hdfs dfs -get output output
$  cat output/*
#  or
$  hdfs dfs -cat output/*


ここからYARNの起動。まずは設定ファイルから。

#  etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

#  etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

# ResourmanagerとNodemanager起動
$  (sbin/)start-yarn.sh

jpsコマンドかウェブで確認
ウェブで確認する場合はポート番号8088で

そして先ほど同様にサンプルアプリケーション動かしてみて、
最後までしっかり動作すればOK



つまったところ
  • Datanodeが立ち上がらない。

一度Datanodeを立ち上げた後に、Namenodeをformatし直すと、この現象がおこる。
理由は、Datanodeは一度シャットダウンしてもデータは残っており、新しくしたNamenodeに対して、残っているDatanodeのデータと合わないため、それが邪魔して、再度Datanodeが立ち上がらなくなる。
core-site.xmlhadoop.tmp.dirの設定を変えるか、該当フォルダの中身を全部消すといいらしい。
難しいことが嫌いな人はマシンを再起動して強制リセットしてどうぞ。