Apache Hadoop のインストール(Ubuntu 24.04 LTS 上)
【概要】Ubuntu 24.04 LTS 環境に Apache Hadoop 3.3.6 をインストールし、擬似分散モードで動作させる手順を示す。OpenJDK 11、SSH 設定、Hadoop 実行用ユーザーの作成、設定ファイル(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml, hadoop-env.sh)の編集、NameNode のフォーマット、デーモン起動、WordCount サンプル実行までを解説する。
インストール前の準備
Apache Hadoop インストールディレクトリを事前に決めておくこと. このページでは,次のように仮定する.
- Apache Hadoop インストールディレクトリ: /usr/local/hadoop
前提ソフトウェアのインストールと設定 (Ubuntu 24.04 LTS)
OpenJDK 11 のインストール
Hadoop の実行には Java Development Kit (JDK) が必要である。Apache Hadoop 3.3 系がサポートする Java は Java 8 と Java 11 (実行時のみ) である。ここでは OpenJDK 11 をインストールする。
sudo apt update
sudo apt -y install openjdk-11-jdk
インストール後、バージョンを確認する。
java -version
OpenJDK 11 が使用されていることを確認すること。既定の Java を切り替えるには sudo update-alternatives --config java を実行する。また、JDK のインストールディレクトリを確認しておく。OpenJDK 11 では /usr/lib/jvm/java-11-openjdk-amd64 である。このパスは後述する Hadoop の設定で使用する。
OpenSSH サーバのインストールと設定
Hadoop の起動スクリプトはローカルホストを含む各ノードへの接続に SSH を使用するため、OpenSSH サーバをインストールし、設定を行う。
- OpenSSH サーバのインストール
sudo apt update sudo apt -y install openssh-server - SSH アクセス制御の設定
SSH 接続を許可するユーザや接続元 IP アドレスを制限する。Ubuntu 24.04 LTS では ufw (ファイアウォール) と /etc/ssh/sshd_config 内の設定 (
AllowUsers,AllowGroups,Match Addressなど) で制御する。例えば、SSH でのログインを hadoop ユーザのみに限定するには、/etc/ssh/sshd_configに次の行を追加し、sudo systemctl restart sshで設定を反映する。AllowUsers hadoop設定項目の詳細は SSH サーバ のドキュメントを参照すること。
Hadoop 実行用ユーザの作成と SSH 設定
Hadoop プロセスを実行するための専用ユーザを作成する。ここではユーザ名を hadoop とする。
- Hadoop 実行用ユーザ (hadoop) の作成
sudo adduser hadoop # 指示に従いパスワード等を入力 - hadoop ユーザでの SSH 設定
作成した
hadoopユーザでログインし直し、パスワードなしで localhost に SSH 接続できるように公開鍵認証を設定する。起動スクリプトは対話的な入力なしに SSH 接続を行うため、鍵にはパスフレーズを設定しない。パスフレーズを設定した鍵を使う場合は、起動前にssh-agentに鍵を登録しておく必要がある。# hadoop ユーザで実行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 0600 ~/.ssh/authorized_keys設定後、
hadoopユーザで localhost への SSH ログインを試行し、パスワードを要求されずにログインできることを確認する。ssh localhost # パスワードなしでログインできれば成功。exit で抜ける。ログインできない場合は、
~/.sshディレクトリやファイルのパーミッション (chmod 700 ~/.ssh,chmod 600 ~/.ssh/authorized_keys)、/etc/ssh/sshd_configの設定 (PubkeyAuthentication yes,AuthorizedKeysFile .ssh/authorized_keys)、ファイアウォールの設定を確認する。SSH サーバのログはsudo journalctl -u sshまたは/var/log/auth.logで確認できる。
Apache Hadoop 3.3.6 のインストール手順
ダウンロード
- Apache Hadoop のダウンロード用 Web ページを開く: https://hadoop.apache.org/releases.html
- 目的のバージョン (例: 3.3.6) の「Binary」リンクをクリックする。
- 表示されるミラーサイト一覧からサイトを選択し、
hadoop-3.3.6.tar.gz(バイナリ版) をダウンロードする。 - ダウンロードしたファイル (
hadoop-3.3.6.tar.gz) を、一時ディレクトリ(例えば /tmp)に置く。
インストール
- Apache Hadoop を展開するディレクトリ (例: /usr/local) に移動し、ダウンロードしたファイルを展開する。展開により
/usr/local/hadoop-3.3.6が作成される。cd /usr/local sudo tar -xzf /tmp/hadoop-3.3.6.tar.gz
- バージョンに依存しないシンボリックリンクを作成すると、バージョン更新時に環境変数の変更が不要になる。
sudo ln -s /usr/local/hadoop-3.3.6 /usr/local/hadoop
- 展開したディレクトリとシンボリックリンクの所有者を
hadoopユーザに変更する。シンボリックリンク自身の所有者を変更するために-hオプションを使用する。sudo chown -R hadoop:hadoop /usr/local/hadoop-3.3.6 sudo chown -h hadoop:hadoop /usr/local/hadoop - HDFS が使用するデータディレクトリを作成し、所有者を設定する (例:
/usr/local/hadoop-datastore)。sudo mkdir -p /usr/local/hadoop-datastore/namenode sudo mkdir -p /usr/local/hadoop-datastore/datanode sudo mkdir -p /usr/local/hadoop-datastore/tmp sudo chown -R hadoop:hadoop /usr/local/hadoop-datastore
Hadoop の設定 (擬似分散モード)
ここからの設定は、hadoop ユーザで行う。次のコマンドで hadoop ユーザのログインシェルに切り替える。
sudo -u hadoop -i
環境変数の設定
hadoop ユーザのシェル設定ファイル (/home/hadoop/.bashrc) に以下の環境変数を追加する。これにより、Hadoop コマンドや設定ファイルへのパスが設定される。
# /home/hadoop/.bashrc に追記
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# YARN を使用する場合
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
設定後、ファイルを再読み込みする。
source ~/.bashrc
Hadoop 設定ファイルの編集
以下の設定ファイルを編集し、擬似分散モードで動作するように設定する。設定ファイルは $HADOOP_CONF_DIR (/usr/local/hadoop/etc/hadoop) にある。Hadoop 3 系では、以下のファイルはいずれも既定で存在する。
- hadoop-env.sh:
JAVA_HOMEを設定する。起動スクリプトは SSH 経由で非対話シェルを起動するため、.bashrcの設定が読み込まれない場合がある。このファイルでの指定が確実である。# $HADOOP_CONF_DIR/hadoop-env.sh 内 export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 - core-site.xml:
HDFS の NameNode の URI と、一時ディレクトリのベースパスを設定する。
# $HADOOP_CONF_DIR/core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> <description>The default file system URI</description> </property> <!-- データストアディレクトリ (一時ファイル用など) --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-datastore/tmp</value> <description>A base for other temporary directories.</description> </property> </configuration> - hdfs-site.xml:
HDFS のレプリケーション係数 (擬似分散モードでは 1) と、NameNode および DataNode のデータディレクトリパスを設定する。
# $HADOOP_CONF_DIR/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> <description>Default block replication.</description> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop-datastore/namenode</value> <description>Directory where NameNode stores metadata.</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop-datastore/datanode</value> <description>Directory where DataNode stores blocks.</description> </property> </configuration> - mapred-site.xml:
MapReduce の実行フレームワークとして YARN を指定する。
# $HADOOP_CONF_DIR/mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>The runtime framework for executing MapReduce jobs.</description> </property> <!-- MapReduce の各プロセスに Hadoop のインストール先を渡す --> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <!-- Job History Server の設定 --> <property> <name>mapreduce.jobhistory.address</name> <value>localhost:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>localhost:19888</value> </property> </configuration> - yarn-site.xml:
YARN の設定を行う。NodeManager の補助サービスとして
mapreduce_shuffleを指定し、ResourceManager のホスト名とリソース量を設定する。# $HADOOP_CONF_DIR/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <description>Auxiliary service for MapReduce shuffle.</description> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> <description>Environment variables to be passed to containers.</description> </property> <!-- ResourceManager のホスト名 (擬似分散では localhost) --> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <!-- NodeManager のリソース設定 (環境に合わせて調整) --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> <!-- 例: 2GB --> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> <!-- 例: 2コア --> </property> </configuration>
HDFS のフォーマット
初めて HDFS を使用する前に、NameNode のストレージディレクトリをフォーマットする。この操作は既存の HDFS データを削除するため、初回のみ実行する。
# hadoop ユーザで実行 hdfs namenode -format
"Storage directory ... has been successfully formatted." というメッセージが表示されれば成功である。
Apache Hadoop の起動と動作確認 (擬似分散モード)
以下の操作は、hadoop 実行用ユーザで行う。
Apache Hadoop デーモンの起動
HDFS デーモン (NameNode, DataNode, SecondaryNameNode) と YARN デーモン (ResourceManager, NodeManager) を起動する。
# $HADOOP_HOME/sbin にパスが通っていることを確認
start-dfs.sh
start-yarn.sh
起動後、jps コマンドを実行して、NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager の各 Java プロセスが起動していることを確認する。表示されないプロセスがある場合は、$HADOOP_HOME/logs 内の該当ログファイルで原因を確認する。
jps
Web UI による状態確認
Hadoop デーモンの状態は Web ブラウザからも確認できる。主要な Web UI の既定の URL は次の通りである。
- NameNode (HDFS): http://localhost:9870
- ResourceManager (YARN): http://localhost:8088
サンプルプログラム wordcount の実行
Hadoop が正しく動作しているかを確認するために、WordCount サンプルプログラムを実行する。
- テスト用データの準備と HDFS への転送:
# HDFS 上にホームディレクトリと input ディレクトリを作成 hdfs dfs -mkdir -p /user/hadoop hdfs dfs -mkdir input # ローカルにテストファイルを作成 mkdir ~/data echo "hello hadoop hello world" > ~/data/file1.txt echo "hadoop world example" > ~/data/file2.txt # HDFS の input ディレクトリにファイルをコピー hdfs dfs -put ~/data/* input
- WordCount ジョブの実行 (擬似分散モード):
MapReduce ジョブを実行する。入力は HDFS 上の
inputディレクトリ、出力は HDFS 上のoutputディレクトリである。出力ディレクトリは実行前に存在していてはならない。hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output
- 実行結果の確認:
HDFS 上の
outputディレクトリにある結果ファイルの内容を表示する。hdfs dfs -cat output/*
以下のような単語カウントの結果が表示されれば成功である。
example 1 hadoop 2 hello 2 world 2
Apache Hadoop デーモンの終了
Hadoop の利用が終わったら、デーモンを停止する。
stop-yarn.sh
stop-dfs.sh
参考: HDFS (Hadoop Distributed File System) の操作コマンド
HDFS を操作するための基本的なコマンド例 (hdfs dfs プレフィックスを使用)。
-
hdfs dfs -ls <パス># ディレクトリの内容を表示 (ls) -
hdfs dfs -mkdir <パス># ディレクトリを作成 (mkdir) -
hdfs dfs -put <ローカルパス> <HDFSパス># ローカルから HDFS へファイルをコピー (アップロード) -
hdfs dfs -copyFromLocal <ローカルパス> <HDFSパス># -put と同様 -
hdfs dfs -get <HDFSパス> <ローカルパス># HDFS からローカルへファイルをコピー (ダウンロード) -
hdfs dfs -copyToLocal <HDFSパス> <ローカルパス># -get と同様 -
hdfs dfs -cat <HDFSパス># HDFS 上のファイルの内容を表示 (cat) -
hdfs dfs -rm <HDFSパス># HDFS 上のファイルを削除 (rm) -
hdfs dfs -rm -r <HDFSパス># HDFS 上のディレクトリを再帰的に削除 (rm -r)