Ubuntu 22.04 上の仮想環境で Hadoop クラスタを構築する手順

前提条件と準備

まず、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

タグ: Ubuntu Hadoop OpenJDK Netplan SSH

8月12日 17:56 投稿