1. OS基盤のネットワークとセキュリティ設定
CentOS 7系をベースに、Hadoopクラスターの単一ノードを構築するためのOSレベルの初期設定を行います。
1.1 ファイアウォールの無効化
Hadoopコンポーネント間の通信を阻害しないよう、OS標準のファイアウォールを停止し、自動起動も解除します。
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
1.2 静的IPアドレスの割り当て
ネットワークインターフェースの設定ファイルを編集し、静的IPを固定します。ここではインターフェース名をens160、IPを172.16.0.100と仮定します。
vi /etc/sysconfig/network-scripts/ifcfg-ens160
設定内容を以下のように変更します。
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=172.16.0.100
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
DNS1=8.8.8.8
ネットワークサービスを再起動して設定を反映します。
systemctl restart network
1.3 ホスト名と名前解決の設定
ホスト名をnode-bigdata-01に変更し、/etc/hostsにIPとホスト名のマッピングを登録します。
hostnamectl set-hostname node-bigdata-01
echo "172.16.0.100 node-bigdata-01" >> /etc/hosts
変更を反映させるため、OSを再起動します。
reboot
1.4 作業用ディレクトリの作成
ソフトウェアの展開先とインストール先ディレクトリを作成します。
mkdir -p /usr/local/hadoop-eco /tmp/installers
2. 依存ソフトウェアのインストールと環境変数
2.1 JDKとHadoopの展開
JDK 8およびHadoop 3.3.6をダウンロードし、所定のディレクトリに展開します。
cd /tmp/installers
wget https://download.oracle.com/java/8u381/latest/jdk-8u381-linux-x64.tar.gz
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf jdk-8u381-linux-x64.tar.gz -C /usr/local/hadoop-eco/
tar -xzf hadoop-3.3.6.tar.gz -C /usr/local/hadoop-eco/
2.2 環境変数の定義
/etc/profileにJavaおよびHadoopのパスを追記し、システム全体で利用できるようにします。
cat << 'EOF' >> /etc/profile
export JAVA_HOME=/usr/local/hadoop-eco/jdk1.8.0_381
export HADOOP_HOME=/usr/local/hadoop-eco/hadoop-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EOF
source /etc/profile
以下のコマンドでバージョンが正しく出力されるか確認します。
java -version
hadoop version
3. HDFSコア設定と起動
3.1 設定ファイルの編集
$HADOOP_HOME/etc/hadoopディレクトリ内のXMLファイルを編集します。
hadoop-env.sh
export JAVA_HOME=/usr/local/hadoop-eco/jdk1.8.0_381
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-bigdata-01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-eco/hadoop-3.3.6/data/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3.2 NameNodeのフォーマットと起動
初回起動前にNameNodeをフォーマットします。既存のデータがある場合は削除されるため注意が必要です。
hdfs namenode -format
HDFSデーモンを起動し、jpsコマンドでプロセスを確認します。
hdfs --daemon start namenode
hdfs --daemon start datanode
jps
Web UI (http://node-bigdata-01:9870) にアクセスし、NameNodeの状態が正常であることを確認します。
3.3 HDFS基本操作とWordCountの実行
HDFS上にディレクトリを作成し、サンプルファイルを実行します。
hdfs dfs -mkdir -p /user/admin/input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/admin/input/
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep /user/admin/input /user/admin/output
結果の確認とローカルへのダウンロード。
hdfs dfs -cat /user/admin/output/part-r-00000
hdfs dfs -get /user/admin/output/part-r-00000 ./local_result.txt
4. YARNとMapReduceの設定
4.1 リソースマネージャーとノードマネージャーの設定
yarn-env.sh と mapred-env.sh 内の JAVA_HOME を適切に設定します。
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-bigdata-01</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.2 YARNデーモンの起動
HDFSが起動していることを確認した後、YARNコンポーネントを起動します。
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
Web UI (http://node-bigdata-01:8088) からクラスターのリソース状況を確認できます。
5. 歴史サーバーとログ聚合の設定
5.1 JobHistory Serverの構成
実行済みジョブの履歴をWeb上で確認できるよう、mapred-site.xmlに追記します。
<property>
<name>mapreduce.jobhistory.address</name>
<value>node-bigdata-01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node-bigdata-01:19888</value>
</property>
歴史サーバーを起動します。
mapred --daemon start historyserver
5.2 ログ聚合(Log Aggregation)の有効化
コンテナのログをHDFS上に集約し、開発時のデバッグを容易にします。yarn-site.xmlに以下の設定を追加します。
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
設定を反映させるため、関連デーモンを再起動します。
yarn --daemon stop resourcemanager
yarn --daemon stop nodemanager
mapred --daemon stop historyserver
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
mapred --daemon start historyserver
6. 設定ファイルの階層と優先順位
Hadoopの設定は、JARパッケージ内に含まれるデフォルト値と、ユーザーが編集するカスタム設定ファイルの2層で管理されます。カスタムファイルで定義された値がデフォルト値を上書きします。
| 設定カテゴリ | デフォルト設定ファイル (JAR内) | カスタム設定ファイル ($HADOOP_HOME/etc/hadoop) |
|---|---|---|
| Core | core-default.xml | core-site.xml |
| HDFS | hdfs-default.xml | hdfs-site.xml |
| YARN | yarn-default.xml | yarn-site.xml |
| MapReduce | mapred-default.xml | mapred-site.xml |