RHEL/CentOS 6.5 で CDH4 を使用して Hadoop マルチノード クラスターをインストールする
Hadoop は、ビッグ データを処理するために Apache によって開発されたオープン ソース プログラミング フレームワークです。 HDFS (Hadoop 分散ファイル システム) を使用してクラスター内のすべてのデータノードにデータを分散保存し、mapreduce モデルを使用してデータを処理します。
Namenode (NN) は、HDFS と Jobtracker (JT) を制御するマスター デーモンです。 ) は、mapreduce エンジンのマスター デーモンです。
要件
このチュートリアルでは、2 つのCentOS 6.3 VM「マスター」と「ノード」を使用しています。 (マスターとノードは私のホスト名です)。 「マスター」IP は 172.21.17.175 で、ノード IP は「172.21.17.188」です。次の手順はRHEL/CentOS 6.x バージョンでも機能します。
マスター上
[root@master ~]# hostname
master
[root@master ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.175 Bcast:172.21.19.255 Mask:255.255.252.0
ノード上
[root@node ~]# hostname
node
[root@node ~]# ifconfig|grep 'inet addr'|head -1
inet addr:172.21.17.188 Bcast:172.21.19.255 Mask:255.255.252.0
DNS が設定されていない場合は、最初にすべてのクラスター ホストが 「/etc/hosts」 ファイル (各ノード上) に存在することを確認します。
マスター上
[root@master ~]# cat /etc/hosts
172.21.17.175 master
172.21.17.188 node
ノード上
[root@node ~]# cat /etc/hosts
172.21.17.197 qabox
172.21.17.176 ansible-ground
CentOS への Hadoop マルチノード クラスターのインストール
公式のCDHリポジトリを使用して、クラスタ内のすべてのホスト(マスターとノード)にCDH4をインストールします。
ステップ 1: CDH リポジトリをダウンロード、インストールする
公式 CDH ダウンロード ページに移動して CDH4 (つまり4.6) バージョンを取得するか、次のwget コマンドを使用してリポジトリをダウンロードしてインストールできます。
RHEL/CentOS 32 ビットの場合
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
RHEL/CentOS 64 ビットの場合
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
Hadoop マルチノード クラスターをインストールする前に、システム アーキテクチャに応じて次のコマンドのいずれかを実行して、Cloudera 公開 GPG キーをリポジトリに追加します。
## on 32-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##
rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
ステップ 2: JobTracker と NameNode をセットアップする
次に、次のコマンドを実行して、マスター サーバーに JobTracker と NameNode をインストールしてセットアップします。
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode
ステップ 3: セカンダリ ネーム ノードのセットアップ
再度、マスター サーバーで次のコマンドを実行して、セカンダリ ネーム ノードをセットアップします。
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-secondarynam
ステップ 4: タスクトラッカーとデータノードをセットアップする
次に、JobTracker、NameNode、およびセカンダリ (またはスタンバイ) NameNode ホスト (この場合はノード上) を除くすべてのクラスター ホスト (ノード) で tasktracker と datanode をセットアップします。
[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode
ステップ 5: Hadoop クライアントのセットアップ
Hadoop クライアントを別のマシンにインストールできます (この場合、データノードにインストールしましたが、どのマシンにもインストールできます)。
[root@node ~]# yum install hadoop-client
ステップ 6: HDFS をノードに展開する
上記の手順が完了したら、hdf のデプロイに進みましょう (すべてのノードで実行されます)。
デフォルト設定を /etc/hadoop ディレクトリ (クラスタ内の各ノード上) にコピーします。
[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
次のように代替コマンドを使用してカスタム ディレクトリを設定します (クラスター内の各ノードで)。
[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf
[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
ステップ 7: 構成ファイルのカスタマイズ
次に、「core-site.xml」ファイルを開き、クラスター内の各ノードの「fs.defaultFS」を更新します。
[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
次に、クラスタ内の各ノードの hdfs-site.xml 内の「dfs.permissions.superusergroup」を更新します。
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
</configuration>
注: 上記の設定がすべてのノードに存在することを確認してください (1 つのノードで実行し、scp を実行して残りのノードにコピーします)ノードの)。
ステップ 8: ローカルストレージディレクトリの構成
NameNode (Master および Node) の「hdfs-site.xml」内の「dfs.name.dir または dfs.namenode.name.dir」を更新します。強調表示されている値を変更してください。
[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>
ステップ 9: ディレクトリの作成と権限の管理
以下のコマンドを実行して、Namenode (マスター) マシンと Datanode (ノード) マシンでディレクトリ構造を作成し、ユーザー権限を管理します。
[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]# mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]# chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
次のコマンドを発行して、(マスター上で) Namenode をフォーマットします。
[root@master conf]# sudo -u hdfs hdfs namenode -format
ステップ 10: セカンダリ NameNode の構成
次のプロパティを hdfs-site.xml ファイルに追加し、マスターに示されているように値を置き換えます。
<property>
<name>dfs.namenode.http-address</name>
<value>172.21.17.175:50070</value>
<description>
The address and port on which the NameNode UI will listen.
</description>
</property>
注: この場合、値はマスター VM の IP アドレスである必要があります。
次に、MRv1 (Map-reduce バージョン 1) をデプロイしましょう。次の値に従って「mapred-site.xml」ファイルを開きます。
[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:8021</value>
</property>
</configuration>
次に、次の scp コマンドを使用して、「mapred-site.xml」ファイルをノード マシンにコピーします。
[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml 100% 200 0.2KB/s 00:00
次に、MRv1 デーモンが使用するローカル ストレージ ディレクトリを構成します。再度「mapred-site.xml」ファイルを開き、各 TaskTracker に対して以下に示すように変更を加えます。
<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>
これらのディレクトリを「mapred-site.xml」ファイルで指定した後、クラスタ内の各ノードでディレクトリを作成し、それらに正しいファイル権限を割り当てる必要があります。
mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
ステップ 10 : HDFS を開始する
次に、次のコマンドを実行して、クラスター内のすべてのノードで HDFS を開始します。
[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
ステップ 11: HDFS /tmp ディレクトリと MapReduce /var ディレクトリを作成する
以下で説明するとおり、適切な権限を持つ /tmp を作成する必要があります。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred
次に、HDFS ファイル構造を確認します。
[root@node conf]# sudo -u hdfs hadoop fs -ls -R /
drwxrwxrwt - hdfs hadoop 0 2014-05-29 09:58 /tmp
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x - hdfs hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt - mapred hadoop 0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
HDFS を開始して「/tmp」を作成した後、JobTracker を開始する前に、「mapred.system.dir」パラメータで指定された HDFS ディレクトリを作成してください (デフォルトでは $ {hadoop.tmp) .dir}/mapred/system を選択し、所有者をmapredに変更します。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system
ステップ 12: MapReduce を開始する
MapReduce を開始するには、TT サービスと JT サービスを開始してください。
各 TaskTracker システム上
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start
Starting Tasktracker: [ OK ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
JobTracker システム上
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start
Starting Jobtracker: [ OK ]
starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out
次に、Hadoop ユーザーごとにホーム ディレクトリを作成します。これは NameNode で行うことをお勧めします。例えば。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>
注: は各ユーザーの Linux ユーザー名です。
あるいは、次のようにしてホーム ディレクトリを作成することもできます。
[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER
ステップ 13: ブラウザから JT、NN UI を開く
ブラウザを開いて URL を http://ip_address_of_namenode:50070 として入力し、Namenode にアクセスします。
ブラウザで別のタブを開き、URL を http://ip_address_of_jobtracker:50030 と入力して、JobTracker にアクセスします。
この手順はRHEL/CentOS 5.X/6.X で正常にテストされました。インストールに関して問題が発生した場合は、以下にコメントしてください。解決策をお手伝いします。