Hadoopクラスタの構築(二)

12238 ワード

前の手順はHadoopクラスタの構築(一)を参照してください.

Hadoopのインストール


インストールの解凍


masterにログインし、解凍hadoop 2.6.2圧縮パッケージを/home/hm/フォルダにダウンロードします.(ホストからドラッグ&ドロップしたり、psftp圧縮パッケージをmasterに圧縮したりすることもできます)
[hm@master ~]$ tar -xzvf hadoop-2.6.2.tar.gz -C ~
[hm@master ~]$ mv hadoop-2.6.2 hadoop
[hm@master ~]$ cd hadoop/

環境変数の変更

[hm@master hadoop]$ vi etc/hadoop/hadoop-env.sh 

export JAVAを見つけるHOME=${JAVA_HOME}、絶対パスに変更:
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64

同時にetc/hadoop/yarn-envを提案します.shとmapred-env.shのJAVA_HOMEもそれに応じて修正する.

Optional-$PATHの変更


hadoopコマンドとJavaコマンドを任意のパスで簡単に実行できます
[hm@master hadoop]$ cd ~ 
[hm@master ~]$ vi .bash_profile

次のように変更します.
# User specific environment and startup programs
export HADOOP_PREFIX=/home/hm/hadoop
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64
PATH=$PATH:$HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$JAVA_HOME/bin

export PATH

変更をすぐに有効にするには、次の手順に従います.
[hm@master ~]$ source .bash_profile

環境変数の設定のテスト

[hm@master hadoop]$ bin/hadoop

hadoopコマンドのusage情報が表示されます.
[hm@master ~]$ jps

jvmのプロセス情報が表示する.
 

分散型Hadoopクラスタの構成


プロファイルの変更


hadoop/etc/hadoop/core-site.xml


tmpディレクトリを作成し、hdfsで生成する一時ファイルを配置します.構成しないと、デフォルトの場所は/tmp/hadoop-{username}/で、マシンが再起動するたびにformat Name Nodeを再起動する必要があります.
[hm@master hadoop]$ mkdir tmp
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9100</value>
    </property>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>file:/home/hm/hadoop/tmp</value>
    </property>
</configuration>

file:ローカルファイルシステム、hdfs:分散ファイルシステムを表す.
ポートが占有されているかどうかを事前に確認する
[hm@master hadoop]$ netstat -nap | grep 9100

 

hadoop/etc/hadoop/hdfs-site.xml


hdfsファイルシステムディレクトリを作成するには、次の手順に従います.
[hm@master hadoop]$ mkdir dfs

プロファイルの変更
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hm/hadoop/dfs/name</value>
        <description>  </description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hm/hadoop/dfs/data</value>
        <description> </description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

hadoop/etc/hadoop/mapred-site.xml


デフォルトは存在しません.templateからコピーまたは名前を変更する必要があります.
[hm@master hadoop]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

hadoop/etc/hadoop/yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
        <description>The hostname of the RM.</description>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <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>

 

マスター、slaveノードのhostname、またはipを追加


このファイルは主にhadoopのいくつかのスクリプトによって呼び出され、masterから一度に複数のslaveにコマンドを発生する役割を果たす.したがって、sshフリーパスワード登録は、構成が必要であることが前提である.
[hm@master hadoop]$ vi etc/hadoop/slaves

次のように変更します.
slave1
slave2

Optional-ラックセンシングの実現(rack-aware)


http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/RackAwareness.html

Logging


etc/hadoop/log 4 jを修正する.propertiesはhadoop daemonsのlog設定をカスタマイズできます

その他の構成


例えばNodeManagersの状態モニタリングなどはyarn-site.xmlでの構成、詳細は公式ドキュメントを参照:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
 

設定したHadoopインストールパッケージをSlavesにコピー


これにより、インストールの導入時間を大幅に節約できるが、slaveとmasterが同じファイルディレクトリ構造、ユーザーとユーザーグループの名前、権限を持つことを保証する必要がある. 
[hm@master hadoop]$ scp -r hadoop/ hm@slave1:~
[hm@master hadoop]$ scp -r hadoop/ hm@slave2:~

また、slaveマシン上の環境変数を変更することを覚えておいてください.e.g.bash_profileファイル、内容はmasterと一致する.
 

HDFSの起動


分散ファイルシステムのフォーマット

[hm@master hadoop]$ bin/hdfs namenode -format

ファイアウォールを閉じる


CentOS 6.7では、デフォルトでファイアウォールがオープンし、DataNodeからNameNodeへの心拍数情報がファイアウォールの外に遮られます.
ファイアウォールにmaster,slave対応のポートを設けるか、セキュリティを考慮しないですべてのクラスタ仮想マシンのファイアウォールを直接閉じる必要がある.手順:
1.ファイアウォールの状態を確認する
  [hm@master ~]$ sudo/etc/init.d/iptables status
2.ファイアウォールの停止
[hm@master ~]$ sudo /etc/init.d/iptables stop

ファイアウォールは電源を入れてから起動しないように設定できます
[hm@master hadoop]$ sudo chkconfig iptables off
[hm@master hadoop]$ chkconfig --list iptables

 

HDFSの起動

[hm@master hadoop]$ sbin/start-dfs.sh

起動結果を確認します.
マスターにjpsを入力すると、NameNodeとSecondaryNameNodeの2つのdaemonが表示されます.
[hm@master hadoop]$ jps
24440 Jps
24153 NameNode
24325 SecondaryNameNode

slave 1とslave 2にjpsを入力すると、DataNodeのdaemonが表示されます
[hm@slave1 hadoop]$ jps
23852 DataNode
23927 Jps

クラスタ状態の確認
[hm@master hadoop]$ bin/hdfs dfsadmin -report

またはログインhttp://master:50070表示Live DataNodesは>0.そうでない場合、DataNodeノードのlogを表示して具体的な原因を見ます.
 

YARNの起動

[hm@master hadoop]$ sbin/start-yarn.sh

jps結果を表示すると、ResourceManagerのdaemonがmasterに多く表示されます.
[hm@master hadoop]$ jps
24153 NameNode
24762 Jps
24506 ResourceManager
24325 SecondaryNameNode

slaveにはNodeManagerのdaemonが多くなっています
[hm@slave1 hadoop]$ jps
23852 DataNode
23971 NodeManager
24082 Jps

これで、クラスタ環境全体の構成が完了する. 
 

Web Interface


http://master:50070NameNode情報は、slave 1、slave 2の情報が表示されるはずです.
http://master:8088ResourceManager情報
注意:仮想マシンがproxyを有効にする場合は、masterをproxyのIgnored Hostsに追加する必要があります.そうしないと、上記のURLにアクセスできません.
 

MapReduce Jobの実行


ここでは持参したwordcountを例に挙げる.

準備作業


hdfsにinputフォルダを作成する:(/user/hmはhmユーザーのhdfsのデフォルトホームです)
[hm@master hadoop]$ bin/hdfs dfs -mkdir -p /user/hm/input/wordcount

テストファイルを作成し、コンテンツを追加し、hdfsにアップロードします.
[hm@master hadoop]$ vi tmp/helloworld
hello hadoop
hello master
hello slave
hello slave too
[hm@master hadoop]$ bin/hdfs dfs -put tmp/helloworld input/wordcount

コンテンツがhdfsに正常にアップロードされたかどうかを確認します.
[hm@master hadoop]$ bin/hdfs dfs -ls input/wordcount

あるいは内容が一致しているかどうかを見たいです.
[hm@master hadoop]$ bin/hdfs dfs -text input/wordcount/helloworld

上記の手順を繰り返す、複数のファイルをアップロードする.

wordcountプログラムの実行

[hm@master hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar wordcount input/wordcount output/wordcount

実行出力の結果を表示するには、次の手順に従います.
[hm@master hadoop]$ bin/hdfs dfs -cat output/wordcount/* hadoop 1 hello 4 master 1 slave 2 too 1

YARNとHDFSの停止


実行が終了し、他のタスクを実行する必要がなくなり、デーモンプロセスを閉じることができます.
[hm@master hadoop]$ sbin/stop-yarn.sh
[hm@master hadoop]$ sbin/stop-dfs.sh

次回hdfsを再フォーマットする場合は、関連するファイルを削除してマシンを再起動することが望ましい.不要なlogファイルを削除して仮想マシン空間を解放することも推奨する.
[hm@master hadoop]$ rm -rf dfs/
[hm@master hadoop]$ rm -rf tmp/*
[hm@master hadoop]$ rm -rf logs/*

 
環境構成全体とjava appの実行に問題はありません.次にdebugを行うには、Hadoopクラスタの構築(3)を参照してください.