前提条件と準備
まず、VMware Workstation や VirtualBox などの仮想化ソフトウェアをインストールし、SSH クライアント(例:FinalShell)を用意します。これにより、複数の端末操作が容易になります。
Ubuntu 22.04 の取得
公式サイト https://ubuntu.com/download/desktop から Ubuntu 22.04 LTS の ISO イメージをダウンロードします。LTS 版は長期サポート対象のため推奨されます。
仮想マシンの作成とクローン
仮想マシンを作成する際は、以下のように設定します:
- ゲスト OS は「後でインストール」を選択
- ディスク容量は最低 40 GB
- メモリは 3–4 GB を割り当て(ホストの空きメモリに応じて調整)
- ISO イメージをマウントして OS をインストール
インストール完了後、このマシンを完全クローンして 3 台(master, slave01, slave02)を準備します。
ネットワークとホスト設定
各ノードで静的 IP を設定します。Ubuntu 22.04 では Netplan を使用します:
sudo vim /etc/netplan/01-network-manager-all.yaml
例として master の設定:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses: [192.168.121.172/24]
gateway4: 192.168.121.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
設定反映コマンド:
sudo netplan apply
全ノードの /etc/hosts に以下を追記します:
192.168.121.172 master
192.168.121.173 slave01
192.168.121.174 slave02
Java のインストールと SSH 無パスワード認証
全ノードで OpenJDK 11 をインストール:
sudo apt update
sudo apt install -y openjdk-11-jdk openssh-server
master ノードで鍵ペアを生成し、全ノードに公開鍵を配布:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id user@master
ssh-copy-id user@slave01
ssh-copy-id user@slave02
(※ user は実際のユーザー名に置き換えてください)
Hadoop のインストールと設定
master ノードで Hadoop 3.3.6 をダウンロード・展開:
cd /tmp
wget https://mirrors.huaweicloud.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
sudo mkdir -p /opt/hadoop
sudo tar -xzf hadoop-3.3.6.tar.gz -C /opt/hadoop --strip-components=1
sudo chown -R user:user /opt/hadoop
環境変数を ~/.bashrc に追加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
設定を反映:
source ~/.bashrc
主要設定ファイルの編集(master 上で)
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9868</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
</configuration>
workers(旧 slaves)
slave01
slave02
hadoop-env.sh に Java パスを明示的に設定:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
設定の配布
master の Hadoop ディレクトリと .bashrc を slave ノードにコピー:
# slave01 への転送
scp -r /opt/hadoop/* user@slave01:/opt/hadoop/
scp ~/.bashrc user@slave01:~
# slave02 への転送
scp -r /opt/hadoop/* user@slave02:/opt/hadoop/
scp ~/.bashrc user@slave02:~
各 slave で所有権を設定し、環境変数を再読み込み:
sudo chown -R user:user /opt/hadoop
source ~/.bashrc
クラスタの起動と検証
master で NameNode を初期化:
hdfs namenode -format
HDFS と YARN を起動:
start-dfs.sh
start-yarn.sh
プロセス確認:
jps
Web UI で状態を確認:
- HDFS: http://192.168.121.172:9870
- YARN: http://192.168.121.172:8088
WordCount テスト実行
hadoop fs -mkdir -p /input
echo "hello hadoop hello world" > /tmp/sample.txt
hadoop fs -put /tmp/sample.txt /input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
hadoop fs -cat /output/*
期待される出力:
hadoop 1
hello 2
world 1