Ubuntu 18.04でHadoopをスタンドアロンモードでインストールする方法

前書き

Hadoopは、安価なマシンのクラスターでの非常に大きなデータセットの処理と保存をサポートするJavaベースのプログラミングフレームワークです。 これはビッグデータの分野で最初の主要なオープンソースプロジェクトであり、Apache Software Foundationが後援しています。

Hadoopは、4つの主要なレイヤーで構成されています。

  • Hadoop Commonは、他のHadoopモジュールをサポートするユーティリティとライブラリのコレクションです。

  • HDFSはHadoop分散ファイルシステムの略で、データをディスクに永続化する役割を果たします。

  • YARNは、Yet Another Resource Negotiatorの略で、HDFSの「オペレーティングシステム」です。

  • MapReduceは、Hadoopクラスターの元の処理モデルです。 クラスターまたはマップ内で作業を分散し、ノードからの結果を整理してクエリへの応答にまとめます。 Hadoopの3.xバージョンでは、他の多くの処理モデルが利用できます。

Hadoopクラスターのセットアップは比較的複雑であるため、プロジェクトには、Hadoopの学習、簡単な操作の実行、およびデバッグに適したスタンドアロンモードが含まれています。

このチュートリアルでは、Hadoopをスタンドアロンモードでインストールし、含まれているMapReduceプログラムの例のいずれかを実行してインストールを確認します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • An Ubuntu 18.04 server with a non-root user with sudo privileges:これらの権限を持つユーザーを設定する方法の詳細については、Initial Server Setup with Ubuntu 18.04ガイドを参照してください。

この前提条件を完了すると、Hadoopとその依存関係をインストールする準備が整います。

始める前に、An Introduction to Big Data Concepts and TerminologyまたはAn Introduction to Hadoopも確認することをお勧めします。

[[step-1 -—- installing-java]] ==ステップ1—Javaのインストール

開始するには、パッケージリストを更新します。

sudo apt update

次に、Ubuntu 18.04にデフォルトのJava開発キットであるOpenJDKをインストールします。

sudo apt install default-jdk

インストールが完了したら、バージョンを確認しましょう。

java -version
Outputopenjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

この出力は、OpenJDKが正常にインストールされたことを確認します。

[[step-2 -—- installing-hadoop]] ==ステップ2—Hadoopのインストール

Javaを導入したら、Apache Hadoop Releases pageにアクセスして、最新の安定版リリースを見つけます。

インストールするリリースのbinaryに移動します。 このガイドでは、Hadoop 3.0.3をインストールします。

Screenshot of the Hadoop releases page highlighting the link to the latest stable binary

次のページで、右クリックしてリンクをリリースバイナリにコピーします。

Screenshot of the Hadoop mirror page

サーバーでは、wgetを使用してフェッチします。

wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

[.note]#Note: Apache Webサイトは動的に最適なミラーに誘導するため、URLが上記のURLと一致しない場合があります。

ダウンロードしたファイルが変更されていないことを確認するために、SHA-256を使用して簡単なチェックを行います。 releases pageに戻り、右クリックして、ダウンロードしたリリースバイナリのチェックサムファイルへのリンクをコピーします。

Screenshot highlighting the .mds file

ここでも、サーバーでwgetを使用してファイルをダウンロードします。

wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds

次に、検証を実行します。

shasum -a 256 hadoop-3.0.3.tar.gz
Outputdb96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a  hadoop-3.0.3.tar.gz

この値を.mdsファイルのSHA-256値と比較します。

cat hadoop-3.0.3.tar.gz.mds

~/hadoop-3.0.3.tar.gz.mds

...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...

大文字と小文字の違いは無視しても問題ありません。 ミラーからダウンロードしたファイルに対して実行したコマンドの出力は、apache.orgからダウンロードしたファイルの値と一致する必要があります。

ファイルが破損または変更されていないことを確認したので、tarコマンドを使用して-xフラグを抽出し、-zを解凍し、-vを使用します。 sは詳細出力、-fはファイルから抽出することを指定します。 次のコマンドでタブ補完を使用するか、正しいバージョン番号に置き換えます。

tar -xzvf hadoop-3.0.3.tar.gz

最後に、抽出したファイルを、ローカルにインストールされたソフトウェアに適した場所である/usr/localに移動します。 必要に応じて、ダウンロードしたバージョンと一致するようにバージョン番号を変更します。

sudo mv hadoop-3.0.3 /usr/local/hadoop

ソフトウェアを配置したら、環境を構成する準備が整いました。

[[step-3 -—- configuring-hadoop-39-s-java-home]] ==ステップ3—HadoopのJavaホームを構成する

Hadoopでは、環境変数またはHadoop構成ファイルのいずれかで、Javaへのパスを設定する必要があります。

Javaへのパス/usr/bin/java/etc/alternatives/javaへのシンボリックリンクであり、これはデフォルトのJavaバイナリへのシンボリックリンクです。 readlink-fフラグを使用して、パスのすべての部分のすべてのシンボリックリンクを再帰的に追跡します。 次に、sedを使用して出力からbin/javaをトリミングし、JAVA_HOMEの正しい値を取得します。

デフォルトのJavaパスを見つけるには

readlink -f /usr/bin/java | sed "s:bin/java::"
Output/usr/lib/jvm/java-11-openjdk-amd64/

この出力をコピーして、HadoopのJavaホームをこの特定のバージョンに設定できます。これにより、デフォルトのJavaが変更されても、この値は変更されません。 または、ファイルでreadlinkコマンドを動的に使用して、Hadoopがシステムのデフォルトとして設定されているJavaバージョンを自動的に使用するようにすることもできます。

まず、hadoop-env.shを開きます。

sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

次に、次のオプションのいずれかを選択します。

オプション1:静的な値を設定する

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . .

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . .

[.note]#Note: Hadoopに関して、hadoop-env.shJAVA_HOMEの値は、環境内で/etc/profileまたはユーザーのプロファイルに設定されている値をオーバーライドします。

[[step-4 -—- running-hadoop]] ==ステップ4—Hadoopの実行

これで、Hadoopを実行できるようになります。

/usr/local/hadoop/bin/hadoop
OutputUsage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
buildpaths                       attempt to add class files from build tree
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:
. . .

このヘルプは、スタンドアロンモードで実行するようにHadoopを正常に構成したことを意味します。 付属のMapReduceプログラムの例を実行することで、適切に機能することを確認します。 これを行うには、ホームディレクトリにinputというディレクトリを作成し、Hadoopの構成ファイルをそのディレクトリにコピーして、それらのファイルをデータとして使用します。

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

次に、次のコマンドを使用して、いくつかのオプションを備えたJavaアーカイブであるMapReducehadoop-mapreduce-examplesプログラムを実行できます。 hadoop-mapreduce-examplesに含まれる多くの例の1つであるgrepプログラムを呼び出し、次に入力ディレクトリinputと出力ディレクトリgrep_exampleを呼び出します。 MapReduce grepプログラムは、リテラルワードまたは正規表現の一致をカウントします。 最後に、正規表現allowed[.]*を指定して、宣言文内または宣言文の最後にある単語allowedの出現を検索します。 式では大文字と小文字が区別されるため、文の先頭で大文字になっている単語は見つかりません。

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep ~/input ~/grep_example 'allowed[.]*'

タスクが完了すると、処理内容と発生したエラーの概要が表示されますが、実際の結果は含まれていません。

Output . . .
        File System Counters
        FILE: Number of bytes read=1330690
        FILE: Number of bytes written=3128841
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
    Map-Reduce Framework
        Map input records=2
        Map output records=2
        Map output bytes=33
        Map output materialized bytes=43
        Input split bytes=115
        Combine input records=0
        Combine output records=0
        Reduce input groups=2
        Reduce shuffle bytes=43
        Reduce input records=2
        Reduce output records=2
        Spilled Records=4
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=3
        Total committed heap usage (bytes)=478150656
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=147
    File Output Format Counters
        Bytes Written=34

[。注意]##

Note:出力ディレクトリがすでに存在する場合、プログラムは失敗し、要約を表示するのではなく、出力は次のようになります。

Output . . .
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

結果は出力ディレクトリに保存され、出力ディレクトリでcatを実行することで確認できます。

cat ~/grep_example/*
Output19  allowed.
1   allowed

MapReduceタスクは、単語allowedの19回の出現と、それに続くピリオドと、そうでない1回の出現を検出しました。 サンプルプログラムを実行すると、スタンドアロンインストールが正常に動作し、システム上の非特権ユーザーが調査またはデバッグのためにHadoopを実行できることが確認されました。

結論

このチュートリアルでは、Hadoopをスタンドアロンモードでインストールし、提供されているサンプルプログラムを実行して検証しました。 独自のMapReduceプログラムを作成する方法を学ぶには、例の背後にあるコードをウォークスルーするApache HadoopのMapReduce tutorialにアクセスすることをお勧めします。 クラスターをセットアップする準備ができたら、Apache FoundationHadoop Cluster Setupのガイドを参照してください。

Related