Hadoopインストール手順
Hadoopの動作確認環境の構築手順を説明する。
目次
Hadoopインストール手順
1.構築環境について
構築の概要
Linux系OS(CentOS6.8)稼働中のサーバーマシンにHadoopを構築する。
◎ OS:CentOS6.8 (64bit)
◎ その他ソフトウェア: wget、telnet(サーバー&クライアント)
手順の概要
対象のサーバーへログインし下記を行う。
◎ ソフトウェアのダウンロード
◎ 各種設定を行う。
本手順では、Hadoopの動作確認ユーザは「hdpuser」とする。
2.動作環境の構築
ユーザー追加
ユーザー登録
①動作確認用ユーザーを追加
$ useradd hdpuser
※特にエラーなどでなければ成功。
②実際の登録を確認
$ id –a hdpuser
※uid、gid、groupsが表示される。
③ホームディレクトリの確認
フォルダが存在していることを確認する。
$ ls –ld /home/hdpuser
drwx------ 2 hdpuser hdpuser 4096 ※作成日時表示部 /home/hdpuser
パスワードの設定
①パスワードの設定
作成直後のユーザーには、パスワードが設定されていないので、任意のパスワードを設定する。
$ passwd hdpuser
パスワードの入力を求められるので、任意のパスワードを入力する。
Changing password for hdpuser
New password: ※1回目の入力
Retype new password: ※2回目の入力
②一度ログアウトし、作成したユーザーで再ログイン
$ exit
※hdpuserでログインできなければ、rootでログインしなおして、再度パスワードを設定する。
ネットワーク設定
①rootへ切り替え
ネットワーク設定変更のためユーザーを切り替える。
$ su -
rootのパスワードを確認されるため入力する。
②ゲートウェイの設定
/etc/sysconfig/networkに、ゲートウェイの情報を追加する。
$ vi /etc/sysconfig/network
<追加>
GATEWAY=192.168.3.1
【vi参考メモ】
◎ i カーソル位置に挿入(編集モードに切り替わる)
◎ R カーソル位置で置き換え(編集モードに切り替わる)
◎ Esc 編集モード終了
◎ :q! セーブせずに強制終了 ※編集モード以外で使用
◎ :wq セーブして終了 ※編集モード以外で使用
③IPアドレスの設定
/etc/sysconfig/network-scripts/ifcfg-eth0に、IPアドレスの情報を追加する。
すでに別の設定がある項目については、以下の内容で更新する。
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
<追加>
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:00:00:00:00:00(←既存の設定値を使う。表記は例)
IPADDR=192.168.3.** (**に、任意の番号を記載する。)
NETMASK=255.255.255.0
BROADCAST=192.168.3.255
GATEWAY=192.168.3.1
USERCTL=no
④DNSの設定
/etc/resolv.confに、設定を追加する。
$ vi /etc/resolv.conf
<追加>
nameserver 192.168.3.1
⑤設定ファイルの更新後、ネットワークを再起動
ログからネットワークが再起動したことを確認する。
$ service network restart
⑥設定確認
指定のIPアドレスが表示されることを確認する。
$ ifconfig
⑦ゲートウェイ接続を確認
$ ping 192.168.3.1
必要なソフトウェアのインストール
wgetのインストール
wgetをインストールする
$ yum install wget
途中で続行の確認を2回されるため、2回とも「y」を入力する。
その後完了の表示を確認する。
telnetのインストール
①telnet(クライアント)インストール
$ yum install telnet
途中で続行の確認をされるため「y」を入力する。
その後完了の表示を確認する。
②telnet(サーバー)インストール
$ yum install telnet-server
途中で続行の確認をされるため「y」を入力する。
その後完了の表示を確認する。
telnetの設定
①telnetの設定更新
/etc/xinetd.d/telnetの設定を更新する。
インストール時点では『disable』の項目に「yes」が記述されているため、以下のとおりに更新する。
$ vi /etc/xinetd.d/telnet
<更新>
disable = no
②telnetサービスを再起動
停止(stopping)に失敗し、起動(starting)に成功することを確認する。
$ /etc/rc.d/init.d/xinetd restart
③クライアントとサーバの利用を確認
ローカルホスト指定の接続が成功し、クライアントとサーバが利用できることを確認する。
作成したユーザーでログインして、telnetの成功を確認する。
$ telnet localhost
※この時点では、外部からの接続は不可。
【telnet利用のネットワーク条件】
◎ VPNで本社のセグメントに接続した端末のみ利用を許可する。
(許可対象:192.168.3.XXXの接続、localhost(127.0.0.1)の接続)
◎ その他はすべて接続不可とする。
④ネットワークの設定を更新
$ vi /etc/sysconfig/iptables
<追加>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
⑤再起動し設定を反映
$ vi /etc/hosts.allow
<追加>
in.telnetd:192.168.3. 127.0.0.1
sshd:192.168.3. 127.0.0.1
⑥拒否条件を追加
$ vi /etc/hosts.deny
<追加>
ALL:ALL
※許可条件が先に解決されるため、拒否条件にすべてを指定している。
3.Hadoop環境の構築
インストール
JDK
①epelリポジトリを取得 wgetを利用して、epelリポジトリを取得する。
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
②ダウンロード実施
$ rpm -ivh epel-release-6-8.noarch.rpm
③前提ソフトをインストール
$ yum install gcc-c++ curl make cmake zlib zlib-devel --enablerepo=epel
途中で続行の確認をされるため「y」を入力する。 完了の表示が出るため確認する。※処理時間が長め
各種設定
環境変数
①ログインシェルに環境変数を設定 Javaライブラリと、Hadoopのホームを環境変数に登録する。
$ vi /home/hdpuser/.bashrc
<追加>
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111.x86_64
export HADOOP_HOME=/usr/local/hadoop-2.7.2
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
②Hadoopをダウンロード
$ wget http://ftp.riken.jp/net/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
③DLファイルを展開
ファイルがすべて解凍される。※処理時間が長め
$ tar -xzvf hadoop-2.7.2.tar.gz
④フォルダが増えていることを確認
$ ls –l
⑤オーナーを動作確認ユーザーに変更
$ chown -R hdpuser:hdpuser hadoop-2.7.2
⑥展開されたライブラリを/usr/localに移動
$ mv hadoop-2.7.2 /usr/local/
Hadoopの設定
①ユーザーを戻す
$ su - hdpuser
②パスを確認
問題なければ、バージョンが表示される。
※ログに表示される、Hadoop 2.7.2を確認する。
$ hadoop version
③設定ファイルにプロパティ情報を追加
Hadoopの設定ファイル(xml)にプロパティの情報を追加する。
設定ファイルの格納フォルダへ移動する。
$ cd $HADOOP_HOME/etc/hadoop
●対象ファイル1
$ vi core-site.xml
<追加>
※~略~※
fs.defaultFS
hdfs://localhost:9000
※~略~※
※localhost部分は、サーバの名称を指定する部分
●対象ファイル2
$ vi hdfs-site.xml
<追加>
dfs.replication
1
dfs.permissions
false
●設定ポート内容
Hadoop用 9000
⑤ネットワーク設定を更新
$ vi /etc/sysconfig/iptables
<追加>
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
⑥ホスト名設定
$ vi /etc/host
<追加>
192.168.3.** <ホスト名>
**部分は、「IPアドレスの設定」で実際に設定したIPアドレス。
<ホスト名>は、hostnameを参照。
⑦再起動し設定を反映
ログで、処理結果がすべてOKとなることを確認できる。
$ /etc/init.d/iptables restart
⑧SSHの設定
動作確認ユーザーのホームへ戻り、SSHの設定を行う。
$ cd
$ ssh-keygen -t dsa
$ cat .ssh/id_dsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ ssh localhost
⑨Namenodeをフォーマット
$ hadoop namenode -format
ログ中に以下の表示が確認される。
INFO common.Storage: Storage directory /tmp/hadoop-hdpuser/dfs/name has been successfully formatted
4.動作確認
起動
①起動前の状態確認
$ jps
Jps
②起動シェルを実行
ログから以下を確認する。
$ start-all.sh
Starting namenodes on [localhost]
starting namenode
starting datanode
Starting secondary namenodes [0.0.0.0]
starting secondarynamenode,
starting resourcemanager,
starting nodemanager,
③起動後の状態確認
「①起動前の状態確認」から5つ増えていることを確認する。
$ jps
ResourceManager
DataNode
NameNode
NodeManager
SecondaryNameNode
Jps
動作の確認
入力データ
①入力用にファイルを2つ作成
$ echo "a b c c d e a b d e e s c a g " > test_input1.txt
$ echo "aa b c d e" > test_input2.txt
②作成されたファイルの確認
$ ls –l
合計 12
-rw-rw-r--. 1 hdpuser hdpuser 31 ※作成日時 test_input1.txt
-rw-rw-r--. 1 hdpuser hdpuser 11 ※作成日時 test_input2.txt
drwxr-xr-x. 2 root root 4096 ※作成日時 tmp
※作成日時の部分は、ファイルやフォルダの作成した日時が表示される。
作成したファイルの設置
①配置先を作成
$ hadoop fs -mkdir /input
②ファイル配置
$ hadoop fs -put test_input1.txt /input
$ hadoop fs -put test_input2.txt /input
③配置状況を確認
$ hadoop fs -ls -R /
drwxr-xr-x - hdpuser supergroup 0 ※作成日時 /input
-rw-r--r-- 3 hdpuser supergroup 31 ※作成日時 /input/test_input1.txt
-rw-r--r-- 3 hdpuser supergroup 11 ※作成日時 /input/test_input2.txt
※作成日時の部分は、ファイルシステムへ配置した日時が表示される。
④サンプルプログラムの実行
実行時、ログの最後に出入力のバイト数が表示されて処理が終了ため確認する。
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
File Input Format Counters
Bytes Read=XX ※読み込んだデータサイズ
File Output Format Counters
Bytes Written=YY ※出力したデータサイズ
※手順のケースでは、XX=42、YY=33
結果確認
①処理後の状況確認
$ hadoop fs -ls -R /
drwxr-xr-x - hdpuser supergroup 0 ※作成日時 /input
-rw-r--r-- 3 hdpuser supergroup 31 ※作成日時 /input/test_input1.txt
-rw-r--r-- 3 hdpuser supergroup 11 ※作成日時 /input/test_input2.txt
drwxr-xr-x - hdpuser supergroup 0 ※出力日時 /output
-rw-r--r-- 3 hdpuser supergroup 0 ※出力日時 /output/_SUCCESS
-rw-r--r-- 3 hdpuser supergroup 33 ※出力日時 /output/part-r-00000
※出力日時部分は、実行結果で、ファイルやフォルダが作成された日時
②作成ファイルの内容を確認
hadoop fs -cat /user/hdpuser/output/part-r-00000
a 3
aa 1
b 3
c 4
d 3
e 4
g 1
s 1
入力ファイル2つの中から出現した単語をカウントしている。
空白で区切って判別しているため、「a」と「aa」は別々にカウントされている。
終了
動作確認終了後は、ノードを終了させる。
「停止前」と「停止後」でノードが停止していることを確認する。
●停止前
$ jps
11031 Jps
8289 NodeManager
8028 SecondaryNameNode
7745 NameNode
7869 DataNode
8190 ResourceManager
●停止処理
$ stop-all.sh
Stopping namenodes on [localhost]
localhost: stopping namenode
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
stopping yarn daemons
stopping resourcemanager
no proxyserver to stop
●停止後
$ jps
Jps