Hadoopクラスタの構築(二)
12238 ワード
前の手順はHadoopクラスタの構築(一)を参照してください.
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)を参照してください.
[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
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64
[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
[hm@master ~]$ jps
プロファイルの変更
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)を参照してください.
[hm@master hadoop]$ bin/hdfs dfs -mkdir -p /user/hm/input/wordcount
[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
[hm@master hadoop]$ bin/hdfs dfs -ls input/wordcount
[hm@master hadoop]$ bin/hdfs dfs -text input/wordcount/helloworld
[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
[hm@master hadoop]$ sbin/stop-yarn.sh
[hm@master hadoop]$ sbin/stop-dfs.sh
[hm@master hadoop]$ rm -rf dfs/
[hm@master hadoop]$ rm -rf tmp/*
[hm@master hadoop]$ rm -rf logs/*