QEMU をインストール,Ubuntu 仮想マシンの作成(Ubuntu 上)
Apache Hadoop のインストール(Ubuntu 24.04 LTS 上)
【概要】Ubuntu 24.04 LTS 環境に Apache Hadoop 3.3.6 をインストールし、擬似分散モードで動作させる手順を示す。OpenJDK 17、SSH設定、Hadoopユーザー作成、主要な設定ファイル(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml, hadoop-env.sh)の編集、Namenodeフォーマット、デーモン起動、WordCountサンプル実行までを解説する。
Apache Hadoop のインストールを行う.本記事では Ubuntu 24.04 LTS 環境を対象とし、安定版である Hadoop 3.3.6 と OpenJDK 17 を使用する。
インストール前の準備
Apache Hadoop インストールディレクトリを事前に決めておくこと. このページでは,次のように仮定する.
- Apache Hadoop インストールディレクトリ: /usr/local/hadoop
前提ソフトウェアのインストールと設定 (Ubuntu 24.04 LTS)
OpenJDK 17 のインストール
Hadoop の実行には Java Development Kit (JDK) が必要である。Ubuntu 24.04 LTS では OpenJDK 17 が標準リポジトリから容易にインストールできる。
sudo apt update
sudo apt -y install openjdk-17-jdk
インストール後、バージョンを確認する。
java -version
OpenJDK 17 がデフォルトで使用されていることを確認すること。また、JDK のインストールディレクトリを確認しておく。通常は /usr/lib/jvm/java-17-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
など) で制御するのが一般的である。(/etc/hosts.allow
は非推奨またはデフォルトで無効な場合がある。)具体的な設定方法は SSH サーバ のドキュメント等を参照すること。少なくとも、Hadoop を実行するユーザ (例: `hadoop` ユーザ) のみがパスワードなし SSH ログインできるように設定する必要がある。
Hadoop 実行用ユーザの作成と SSH 設定
Hadoop プロセスを実行するための専用ユーザを作成する。ここではユーザ名を `hadoop` とする。
- Hadoop 実行用ユーザ (`hadoop`) の作成
sudo adduser hadoop # 指示に従いパスワード等を入力
- `hadoop` ユーザでの SSH 設定
作成した `hadoop` ユーザでログインし直し、パスワードなしで localhost に SSH 接続できるように公開鍵認証を設定する。
# hadoop ユーザで実行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
設定後、`hadoop` ユーザで localhost への SSH ログインを試行し、パスワードを要求されずにログインできることを確認する。
ssh localhost # パスワードなしでログインできれば成功。exit で抜ける。
もしログインできない場合は、
~/.ssh
ディレクトリやファイルのパーミッション (chmod 700 ~/.ssh
,chmod 600 ~/.ssh/authorized_keys
)、sshd_config
の設定 (特に `PubkeyAuthentication yes`、`AuthorizedKeysFile .ssh/authorized_keys`)、ファイアウォールの設定などを確認すること。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) に移動し、ダウンロードしたファイルを展開する。
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` ユーザに変更する。
sudo chown -R hadoop:hadoop /usr/local/hadoop-3.3.6 sudo chown -R 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 chown -R hadoop:hadoop /usr/local/hadoop-datastore
Hadoop の設定 (擬似分散モード)
ここからの設定は、`hadoop` ユーザで行うと便利である。
sudo -u hadoop -i
環境変数の設定
`hadoop` ユーザのシェル設定ファイル (例: /home/hadoop/.bashrc) に以下の環境変数を追加する。これにより、Hadoop コマンドや設定ファイルへのパスが設定される。
# /home/hadoop/.bashrc に追記
export JAVA_HOME=/usr/lib/jvm/java-17-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-env.sh:
`JAVA_HOME` を設定する。`.bashrc` で設定済みであれば必須ではないが、明示的に指定することが推奨される。
# $HADOOP_CONF_DIR/hadoop-env.sh 内 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
- core-site.xml:
HDFS の NameNode の URI を設定する。
# $HADOOP_CONF_DIR/core-site.xml
fs.defaultFS hdfs://localhost:9000 The default file system URI hadoop.tmp.dir /usr/local/hadoop-datastore/tmp A base for other temporary directories. - hdfs-site.xml:
HDFS のレプリケーション係数 (擬似分散モードでは 1) と、NameNode および DataNode のデータディレクトリパスを設定する。
# $HADOOP_CONF_DIR/hdfs-site.xml
dfs.replication 1 Default block replication. dfs.namenode.name.dir file:/usr/local/hadoop-datastore/namenode Directory where NameNode stores metadata. dfs.datanode.data.dir file:/usr/local/hadoop-datastore/datanode Directory where DataNode stores blocks. - mapred-site.xml:
MapReduce の実行フレームワークとして YARN を指定する。デフォルトでは `mapred-site.xml` は存在しない場合があるので、`mapred-site.xml.template` をコピーして作成する。
# $HADOOP_CONF_DIR/ に移動して実行 cp mapred-site.xml.template mapred-site.xml
# $HADOOP_CONF_DIR/mapred-site.xml
mapreduce.framework.name yarn The runtime framework for executing MapReduce jobs. mapreduce.jobhistory.address localhost:10020 mapreduce.jobhistory.webapp.address localhost:19888 - yarn-site.xml:
YARN の設定を行う。NodeManager の補助サービスとして `mapreduce_shuffle` を指定し、リソースマネージャのアドレスなどを設定する。
# $HADOOP_CONF_DIR/yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle Auxiliary service for MapReduce shuffle. yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME Environment variables to be passed to containers. yarn.resourcemanager.hostname localhost yarn.nodemanager.resource.memory-mb 2048 yarn.nodemanager.resource.cpu-vcores 2
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 プロセスが起動していることを確認する。
jps
サンプルプログラム wordcount の実行
Hadoop が正しく動作しているかを確認するために、WordCount サンプルプログラムを実行してみる。
- テスト用データの準備と HDFS への転送:
# HDFS 上に input ディレクトリを作成 hdfs dfs -mkdir /user hdfs dfs -mkdir /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_HOME をカレントディレクトリにする必要はない 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 dfs -copyFromLocal <ローカルパス>
# -put と同様 -
hdfs dfs -get
# HDFS からローカルへファイルをコピー (ダウンロード)<ローカルパス> -
hdfs dfs -copyToLocal
# -get と同様<ローカルパス> -
hdfs dfs -cat
# HDFS 上のファイルの内容を表示 (cat) -
hdfs dfs -rm
# HDFS 上のファイルを削除 (rm) -
hdfs dfs -rm -r
# HDFS 上のディレクトリを再帰的に削除 (rm -r)