Solaris上でHadoopとSparkを使ってみよう(Hadoopクラスタ構成構築編)2017年11月14日ツイート第1回ではHadoopのシングル環境構築を行いました。今回はHadoopのクラスタ環境構築を行います。HadoopクラスタについてHadoopクラスタではNameNodeとResourceManagerをZookeeper(Hadoopとは別パッケージ)で冗長化させます。JournalNodeによりNameNodeの情報を分散して管理します。ZookeeperとJournalNodeの最低構成台数は3台となっているので環境を準備する際は注意してください。Zookeeperについての詳細は以下を参照してください。ZooKeeper構成について今回はHadoopクラスタの冗長性要件を満たすために物理ノードは3台で構成します。SPARCのゲストドメインとして構築していきます。作成するゲストドメインとその用途は以下となります。(物理ノード1)ctrl-node1(NameNode、ResourceManager、JobHistoryServer、Zookeeper、JournalNodeを実行します。)data-node1(DataNode、NodeManagerを実行します。)(物理ノード2)ctrl-node2(NameNode、ResourceManager、Zookeeper、JournalNodeを実行します。)data-node2(DataNode、NodeManagerを実行します。)(物理ノード3)jrnl-node(Zookeeper、JournalNodeを実行します。)確認したOS/ソフトのバージョンは第1回と同様です。今回はZookeeperが含まれています。制御ドメインの作成は以下を参照してください。今回は制御ドメインを直接使用しないためホスト名等は任意で構いません。オペレーティングシステムゲストドメインの作成ゲストドメインは前記の5つを作成します。ホスト名はドメイン名と同じにしておきます。ゲストドメインの作成に関しては下記を参照してください。SPARCを使ってみよう(構築・運用手順書)なお、各ゲストドメインにはシステムボリュームとは別にHadoopデータ用のデバイスを仮想ディスクとして組み込んでおきます。以下はすべてrootで作業してください。記載が無い限りすべてのゲストドメインで同じように設定します。ZFSプールの作成Hadoopデータ用ZFSストレージプールを作成します。ストレージプール名はhdpoolとします。hdpool必要なパッケージのインストール第1回の記事を参考にjdk7をインストールし、Javaのバージョンをjava7にします。/etc/hostsの編集/etc/hostsを編集します。関連するノードのIPアドレスをすべて記載します。下記はctrl-node1の例です。data-node2Hadoop用ユーザー/グループの追加Hadoop用グループIDをhadoopという名前で作成します。以下作成するユーザーの所属グループはhadoopとします。hadoopNameNodeとDataNodeの実行用ユーザーIDをhdfsという名前で作成し、パスワードの設定を行います。hdfsResourceManagerとNodeManagerサービスの実行用ユーザーをyarnという名前で作成し、パスワードの設定を行います。Serverサービスの実行用ユーザーをmapredという名前で作成し、パスワードの設定を行います。mapred実際のジョブの実行用ユーザーをsparkという名前で作成し、パスワードの設定を行います。sparkHadoopのインストールHadoopとZookeeperをダウンロードし、インストールするノードに転送します。HadoopZooKeeperHadoopとZookeeperをインストールします。zookeeperHadoopとZookeeperのオーナー/パーミッションを変更します。/opt/zookeeper-3.4.9SSH通信の設定Hadoopはsshで通信を行って処理を実行するため、ユーザー毎にssh通信用の証明書を作成します。logout他ノードの公開証明書を自ノードにコピーし、authorized_keysファイルに格納します。logoutこの処理の途中で以下のようなメッセージが表示された場合はyesと入力します。(yes/no)?パスワードの入力を求められた場合はパスワードを入力します。各ユーザーですべてのノードにSSH通信が出来ることを確認します。各ユーザーにHadoop実行のための環境変数を設定します。hdfsユーザーの$HOME/.profileに以下の環境変数を設定します。HADOOP_GROUP=hadoopyarnユーザーの$HOME/.profileに以下の環境変数を設定します。YARN_PID_DIR=/hdpool/run/yarnmapredユーザーの$HOME/.profileに以下の環境変数を設定します。MAPRED_PID_DIR=/hdpool/run/mapredsparkユーザーの$HOME/.profileに以下の環境変数を設定します。HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopページの先頭へHadoop環境ファイルの設定Hadoop用ディレクトリの設定Hadoopのデータ格納用のディレクトリを作成していきます。今後の運用を考えてZFSのファイルシステムとして作成します。hdfsユーザー用ログファイルディレクトリを作成します。/hdpool/log/hdfsyarnユーザー用ログファイルディレクトリを作成します。/hdpool/log/yarnmapredユーザー用ログファイルディレクトリを作成します。/hdpool/log/mapredNameNodeのメタデータ用ディレクトリを作成します。/hdpool/data/1/dfs/nnNameNodeのデータブロック保管用ディレクトリを作成します。/hdpool/data/1/dfs/dnJournalNode用ディレクトリを作成します。/hdpool/data/1/dfs/jnyarnユーザーが使用するローカルデータディレクトリを作成します。/hdpool/data/1/yarn/logsランタイム用のディレクトリを作成します。/hdpool/run/mapred一時的なデータの使用のディレクトリを作成します。hdpool/tmpZookeeperが使用する各種ディレクトリを作成します。/hdpool/log/zookeeper以下のコマンドを実行しディレクトリが作成されていることを確認します。hdpool以下のように表示されれば正常に作成されています。/hdpool/tmpシングルノードの時と同様にZFSの機能を用いてログ領域の圧縮を行います。hdpool/logctrl-node1で以下のコマンドを実行します。/hdpool/data/zookeeper/myid'ctrl-node2で以下のコマンドを実行します。/hdpool/data/zookeeper/myid'jrnl-nodeで以下のコマンドを実行します。/hdpool/data/zookeeper/myid'Hadoop環境設定ファイルの作成Hadoopの構成ファイルのディレクトリ(/opt/hadoop/etc/hadoop)に移動します。hadoop-env.shに以下を追加します。HADOOP_LOG_DIR=/hdpool/log/hdfsyarn-env.shに以下を追加します。HADOOP_MAPRED_IDENT_STRING=mapredslavesファイルを編集します。DataNodeの管理下に入るホスト名を記載します。今回はdata-node1とdata-node2です。data-node1data-node2core-site.xmlファイルを以下のように編集します。<fs.defaultFShdfs://myclusterdfs.journalnode.edits.dir/hdpool/data/1/dfs/jnha.zookeeper.quorumctrl-node1:2181,ctrl-node2:2181,jrnl-node:2181mapred-site.xmlファイルを以下のように編集します。mapreduce.framework.nameyarnmapreduce.jobhistory.addressctrl-node1:10020mapreduce.jobhistory.webapp.addressctrl-node1:19888yarn.app.mapreduce.am.staging-dir/useryarn-site.xmlファイルを以下のように編集します。logsyarn.nodemanager.remote-app-log-dirhdfs://var/log/hadoop-yarn/appsyarn.resourcemanager.ha.enabledtrueyarn.resourcemanager.cluster-idcluster1yarn.resourcemanager.ha.rm-idsrm1,rm2yarn.resourcemanager.hostname.rm1ctrl-node1yarn.resourcemanager.hostname.rm2ctrl-node2yarn.resourcemanager.zk-addressctrl-node1:2181,ctrl-node2:2181,jrnl-node:2181hdfs-site.xmlファイルを以下のように編集します。今回はDataNodeが2つのため、dfs.replicationは2にしています。ctrl-node1:8485;ctrl-node2:8485;jrnl-node:8485/myclusterdfs.client.failover.proxy.provider.myclusterorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProviderdfs.ha.fencing.methodssshfencedfs.ha.fencing.ssh.private-key-files/export/home/hdfs/.ssh/id_dsadfs.ha.automatic-failover.enabledtrueZookeeper環境設定ファイルの作成Zookeeperの構成ファイルのディレクトリ(/opt/zookeeper/conf)に移動します。zoo.cfgファイルを以下のように編集します。※注意:以下のようなwarningが出力されますが、動作には影響ありませんので無視してください。jrnl-nodeでZookeeperを起動します。/opt/zookeeper/conf/zoo.cfg'Zookeeperの起動を確認します。QuorumPeerMain以下のように表示されれば正常に起動されています。QuorumPeerMainctrl-node1でZookeeperのHA状態を初期化します。jrnl-nodeでJournalnodeを実行します。journalnode'Journalnodeプロセスを確認します。JournalNode以下のように表示されれば正常に起動されています。ファイルシステムをフォーマットします。-format'以下のように表示されれば正常にフォーマットされています。formatted.ctrl-node1でJournalnodeをフォーマットします。エラーが無ければ正常に終了しています。ctrl-node1とjrnl-nodeも連携して初期化されます。-initializeSharedEdits'ctrl-node1でNameNodeを起動します。namenode'ctrl-node1でNameNodeの起動を確認します。NameNode以下のように表示されれば正常に起動されていされています。NameNodectrl-node1でResourceManagerを起動します。resourcemanager'ctrl-node1でResourceManagerの起動を確認します。ResourceManager以下のように表示されれば正常に起動されています。ResourceManagerctrl-node1でzkfcを起動します。zkfc'zkfcの起動を確認します。DFSZKFailoverController以下のように表示されれば正常に起動されています。ファイルシステム情報をコピーします。-bootstrapStandby'以下のように表示されれば正常にコピーされています。formatted.ctrl-node2でNameNodeを起動します。namenode'ctrl-node2でNameNodeの起動を確認します。NameNode以下のように表示されれば正常に起動されています。NameNodectrl-node2でResourceManagerを起動します。resourcemanager'ctrl-node2でResourceManagerの起動を確認します。ResourceManager以下のように表示されれば正常に起動されています。ResourceManagerctrl-node2でzkfcを起動します。zkfc'zkfcの起動を確認します。DFSZKFailoverController以下のように表示されれば正常に起動されています。DFSZKFailoverControllerNameNodeの冗長化の状態を確認します。通常はnn1がactiveであれば正常です。ctrl-node1とctrl-node2のどちらでも実行は構いません。applicablestandbyResourceManagerの冗長化の状態を確認します。通常はrm1がactiveであれば正常です。ctrl-node1とctrl-node2のどちらでも実行は構いません。applicablestandbydata-node1とdata-node2でDataNodeとNodeManagerを起動します。nodemanager'DataNodeの起動を確認します。DataNode以下のように表示されれば正常に起動されています。DataNodeNodeManagerの起動を確認します。NodeManager以下のように表示されれば正常に起動されています。NodeManagerctrl-node1でJobHistoryServerを起動します。historyserver'JobHistoryServerの起動を確認します。JobHistoryServer以下のように表示されれば正常に起動されています。JobHistoryServerctrl-node1でHadoop内のディレクトリ構成を設定します。(name-node1にhdfsでログインする。/apl/spark-2.1.0/jars以下のコマンドを実行し、すべてのノードからHadoop内のディレクトリ構成が見えることを確認します。/'以下が作成されていれば正常に実行されています。/var/log/hadoop-yarn動作確認ブラウザーからhttp://:50070/にアクセスして以下のような画面が表示されれば正常に動作しています。任意のノードでhadoopのサンプルプログラムを実行します。正常に終了すれば確認は終了です。3.12000000000000000000以上で、仮想環境の構築からHadoopのクラスタ環境が構築できました。次回はSpark構成の構築を行います。