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 インストールディレクトリを事前に決めておくこと. このページでは,次のように仮定する.

前提ソフトウェアのインストールと設定 (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 サーバをインストールし、設定を行う。

  1. OpenSSH サーバのインストール
    sudo apt update
    sudo apt -y install openssh-server
    
  2. 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` とする。

  1. Hadoop 実行用ユーザ (`hadoop`) の作成
    sudo adduser hadoop
    # 指示に従いパスワード等を入力
    
  2. `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 のインストール手順

ダウンロード

  1. Apache Hadoop のダウンロード用 Web ページを開く: https://hadoop.apache.org/releases.html
  2. 目的のバージョン (例: 3.3.6) の「Binary」リンクをクリックする。
  3. 表示されるミラーサイト一覧から、適切なサイトを選択し、`hadoop-3.3.6.tar.gz` (バイナリ版) をダウンロードする。
  4. ダウンロードしたファイル (`hadoop-3.3.6.tar.gz`) を、分かりやすい一時ディレクトリ(例えば /tmp)に置く。

インストール

  1. Apache Hadoop を展開するディレクトリ (例: /usr/local) に移動し、ダウンロードしたファイルを展開する。
    cd /usr/local
    sudo tar -xzf /tmp/hadoop-3.3.6.tar.gz
    
  2. バージョンに依存しないシンボリックリンクを作成すると便利である。
    sudo ln -s /usr/local/hadoop-3.3.6 /usr/local/hadoop
    
  3. 展開したディレクトリの所有者を `hadoop` ユーザに変更する。
    sudo chown -R hadoop:hadoop /usr/local/hadoop-3.3.6
    sudo chown -R hadoop:hadoop /usr/local/hadoop
    
  4. 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`) にある。

  1. hadoop-env.sh:

    `JAVA_HOME` を設定する。`.bashrc` で設定済みであれば必須ではないが、明示的に指定することが推奨される。

    # $HADOOP_CONF_DIR/hadoop-env.sh 内
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    
  2. 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.
        
    
    
  3. 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.
        
    
    
  4. 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
        
    
    
  5. 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 サンプルプログラムを実行してみる。

  1. テスト用データの準備と 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
    
  2. 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
    
  3. 実行結果の確認:

    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` プレフィックスを使用)。