Hadoop-マルチノードクラスター

この章では、分散環境でのHadoopマルチノードクラスターのセットアップについて説明します。

クラスター全体を示すことはできないため、3つのシステム(1つのマスターと2つのスレーブ)を使用したHadoopクラスター環境について説明します。以下にそれらのIPアドレスを示します。

  • Hadoopマスター:192.168.1.15(hadoop-master)
  • Hadoopスレーブ:192.168.1.16(hadoop-slave-1)
  • Hadoopスレーブ:192.168.1.17(hadoop-slave-2)

以下の手順に従って、Hadoopマルチノードクラスターをセットアップします。

Javaのインストール

JavaはHadoopの主な前提条件です。まず、「java-version」を使用してシステム内のJavaの存在を確認する必要があります。javaversionコマンドの構文を以下に示します。

$ java -version

すべてが正常に機能する場合は、次の出力が得られます。

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

システムにJavaがインストールされていない場合は、Javaをインストールするための所定の手順に従ってください。

ステップ1

次のリンクwww.oracle.comにアクセスして、Java(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。

次に jdk-7u71-linux-x64.tar.gz システムにダウンロードされます。

ステップ2

通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、抽出しますjdk-7u71-linux-x64.gz 次のコマンドを使用してファイルします。

$ cd Downloads/
$ ls
jdk-7u71-Linux-x64.gz

$ tar zxf jdk-7u71-Linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz

ステップ3

すべてのユーザーがJavaを使用できるようにするには、Javaを「/ usr / local /」の場所に移動する必要があります。ルートを開き、次のコマンドを入力します。

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

ステップ4

設定用 PATH そして JAVA_HOME 変数については、次のコマンドを追加してください ~/.bashrc ファイル。

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

次に、 java -version上で説明したように端末からのコマンド。上記のプロセスに従い、すべてのクラスターノードにJavaをインストールします。

ユーザーアカウントの作成

Hadoopインストールを使用するには、マスターシステムとスレーブシステムの両方でシステムユーザーアカウントを作成します。

# useradd hadoop 
# passwd hadoop

ノードのマッピング

編集する必要があります hosts ファイルに /etc/ すべてのノードのフォルダで、各システムのIPアドレスに続けてホスト名を指定します。

# vi /etc/hosts
enter the following lines in the /etc/hosts file.

192.168.1.109 hadoop-master 
192.168.1.145 hadoop-slave-1 
192.168.56.1 hadoop-slave-2

キーベースのログインの構成

パスワードの入力を求められずに相互に通信できるように、すべてのノードでsshをセットアップします。

# su hadoop 
$ ssh-keygen -t rsa 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2 
$ chmod 0600 ~/.ssh/authorized_keys 
$ exit

Hadoopのインストール

マスターサーバーで、次のコマンドを使用してHadoopをダウンロードしてインストールします。

# mkdir /opt/hadoop 
# cd /opt/hadoop/ 
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz 
# tar -xzf hadoop-1.2.0.tar.gz 
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop 
# cd /opt/hadoop/hadoop/

Hadoopの構成

以下に示すように、次の変更を行ってHadoopサーバーを構成する必要があります。

core-site.xml

を開きます core-site.xml ファイルを作成し、以下のように編集します。

<configuration>
   <property> 
      <name>fs.default.name</name> 
      <value>hdfs://hadoop-master:9000/</value> 
   </property> 
   <property> 
      <name>dfs.permissions</name> 
      <value>false</value> 
   </property> 
</configuration>

hdfs-site.xml

を開きます hdfs-site.xml ファイルを作成し、以下のように編集します。

<configuration>
   <property> 
      <name>dfs.data.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name/data</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.name.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.replication</name> 
      <value>1</value> 
   </property> 
</configuration>

mapred-site.xml

を開きます mapred-site.xml ファイルを作成し、以下のように編集します。

<configuration>
   <property> 
      <name>mapred.job.tracker</name> 
      <value>hadoop-master:9001</value> 
   </property> 
</configuration>

hadoop-env.sh

を開きます hadoop-env.sh 以下に示すように、JAVA_HOME、HADOOP_CONF_DIR、およびHADOOP_OPTSをファイルして編集します。

Note −システム構成に従ってJAVA_HOMEを設定します。

export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf

スレーブサーバーへのHadoopのインストール

指定されたコマンドに従って、すべてのスレーブサーバーにHadoopをインストールします。

# su hadoop 
$ cd /opt/hadoop 
$ scp -r hadoop hadoop-slave-1:/opt/hadoop 
$ scp -r hadoop hadoop-slave-2:/opt/hadoop

マスターサーバーでのHadoopの構成

マスターサーバーを開き、指定されたコマンドに従って構成します。

# su hadoop 
$ cd /opt/hadoop/hadoop

マスターノードの構成

$ vi etc/hadoop/masters

hadoop-master

スレーブノードの構成

$ vi etc/hadoop/slaves

hadoop-slave-1 
hadoop-slave-2

Hadoopマスターのフォーマット名ノード

# su hadoop 
$ cd /opt/hadoop/hadoop 
$ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG: host = hadoop-master/192.168.1.109 
STARTUP_MSG: args = [-format] 
STARTUP_MSG: version = 1.2.0 
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013 
STARTUP_MSG: java = 1.7.0_71 

************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
…………………………………………………. 
11/10/14 10:58:08 INFO common.Storage: Storage directory 
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode: 
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/

Hadoopサービスの開始

次のコマンドは、Hadoop-MasterですべてのHadoopサービスを開始することです。

$ cd $HADOOP_HOME/sbin
$ start-all.sh

Hadoopクラスターに新しいDataNodeを追加する

以下に、Hadoopクラスターに新しいノードを追加するために従うべき手順を示します。

ネットワーキング

適切なネットワーク構成を使用して、既存のHadoopクラスターに新しいノードを追加します。次のネットワーク構成を想定します。

新しいノード構成の場合-

IP address : 192.168.1.103 
netmask : 255.255.255.0
hostname : slave3.in

ユーザーとSSHアクセスの追加

ユーザーを追加する

新しいノードで、次のコマンドを使用して、「hadoop」ユーザーを追加し、Hadoopユーザーのパスワードを「hadoop123」などに設定します。

useradd hadoop
passwd hadoop

マスターから新しいスレーブへのパスワードなしの接続をセットアップします。

マスターで以下を実行します

mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh 
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa 
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/

スレーブで以下を実行します

hadoopにログインします。そうでない場合は、hadoopユーザーにログインします。

su hadoop ssh -X [email protected]

公開鍵の内容をファイルにコピーします "$HOME/.ssh/authorized_keys" 次に、次のコマンドを実行して、同じ権限を変更します。

cd $HOME
mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh
cat id_rsa.pub >>$HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys

マスターマシンからのsshログインを確認します。次に、マスターからのパスワードなしで新しいノードにSSH接続できるかどうかを確認します。

ssh [email protected] or hadoop@slave3

新しいノードのホスト名を設定する

ファイルにホスト名を設定できます /etc/sysconfig/network

On new slave3 machine

NETWORKING = yes 
HOSTNAME = slave3.in

変更を有効にするには、マシンを再起動するか、それぞれのホスト名を使用して新しいマシンに対してhostnameコマンドを実行します(再起動は適切なオプションです)。

slave3ノードマシン上-

ホスト名slave3.in

更新 /etc/hosts 次の行を持つクラスターのすべてのマシンで-

192.168.1.102 slave3.in slave3

次に、ホスト名を使用してマシンにpingを実行し、IPに解決されているかどうかを確認します。

新しいノードマシンの場合-

ping master.in

新しいノードでDataNodeを開始します

を使用してデータノードデーモンを手動で起動します $HADOOP_HOME/bin/hadoop-daemon.sh script。自動的にマスター(NameNode)に接続し、クラスターに参加します。また、マスターサーバーのconf / slavesファイルに新しいノードを追加する必要があります。スクリプトベースのコマンドは、新しいノードを認識します。

新しいノードにログインします

su hadoop or ssh -X [email protected]

次のコマンドを使用して、新しく追加されたスレーブノードでHDFSを起動します

./bin/hadoop-daemon.sh start datanode

新しいノードでjpsコマンドの出力を確認してください。次のようになります。

$ jps
7141 DataNode
10312 Jps

HadoopクラスターからのDataNodeの削除

データを失うことなく、実行中にクラスターからノードをオンザフライで削除できます。HDFSは、ノードの削除が安全に実行されることを保証する廃止措置機能を提供します。使用するには、以下の手順に従ってください。

ステップ1-マスターにログインします

Hadoopがインストールされているマスターマシンユーザーにログインします。

$ su hadoop

ステップ2-クラスター構成を変更する

クラスターを開始する前に、除外ファイルを構成する必要があります。dfs.hosts.excludeという名前のキーを$HADOOP_HOME/etc/hadoop/hdfs-site.xmlファイル。このキーに関連付けられた値は、HDFSへの接続が許可されていないマシンのリストを含むNameNodeのローカルファイルシステム上のファイルへのフルパスを提供します。

たとえば、これらの行をに追加します etc/hadoop/hdfs-site.xml ファイル。

<property> 
   <name>dfs.hosts.exclude</name> 
   <value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value> 
   <description>DFS exclude</description> 
</property>

ステップ3-廃止するホストを決定する

廃止される各マシンは、hdfs_exclude.txtで識別されるファイルに1行に1つのドメイン名を追加する必要があります。これにより、NameNodeに接続できなくなります。の内容"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" DataNode2を削除する場合のファイルを以下に示します。

slave2.in

ステップ4-構成のリロードを強制する

コマンドを実行します "$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" 引用符なし。

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

これにより、NameNodeは、新しく更新された「excludes」ファイルを含め、その構成を再読み取りします。一定期間にわたってノードを廃止し、アクティブな状態を維持するようにスケジュールされているマシンに各ノードのブロックを複製できるようにします。

オン slave2.in、jpsコマンドの出力を確認してください。しばらくすると、DataNodeプロセスが自動的にシャットダウンされます。

ステップ5-ノードをシャットダウンする

廃止措置プロセスが完了した後、廃止措置されたハードウェアはメンテナンスのために安全にシャットダウンできます。dfsadminに対してreportコマンドを実行して、廃止のステータスを確認します。次のコマンドは、廃止ノードとクラスターに接続されているノードのステータスを示します。

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

ステップ6-編集はファイルを再度除外します

マシンが廃止されると、「除外」ファイルから削除できます。ランニング"$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"再度、excludesファイルをNameNodeに読み戻します。メンテナンスが完了した後、またはクラスターに追加の容量が再び必要になった後、DataNodeがクラスターに再参加できるようにするなど。

Special Note−上記のプロセスが実行され、tasktrackerプロセスがノードでまだ実行されている場合は、シャットダウンする必要があります。1つの方法は、上記の手順で行ったようにマシンを切断することです。マスターはプロセスを自動的に認識し、デッドとして宣言します。DataNodeと比較してそれほど重要ではないため、タスクトラッカーを削除するために同じプロセスに従う必要はありません。DataNodeには、データを失うことなく安全に削除したいデータが含まれています。

タスクトラッカーは、次のコマンドを使用して、いつでもオンザフライで実行/シャットダウンできます。

$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker
$HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker