Ubuntu20.04にスタンドアロンモードでHadoopをインストールする方法

提供:Dev Guides
移動先:案内検索

序章

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

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

  • Hadoop Common は、他のHadoopモジュールをサポートするユーティリティとライブラリのコレクションです。
  • HDFS は、Hadoop分散ファイルシステムの略で、データをディスクに永続化する役割を果たします。
  • YARN は、Yet Another Resource Negotiatorの略で、HDFSの「オペレーティングシステム」です。
  • MapReduce は、Hadoopクラスターの元の処理モデルです。 作業をクラスターまたはマップ内に分散し、ノードからの結果を整理して、クエリへの応答に減らします。 Hadoopの3.xバージョンでは、他の多くの処理モデルを利用できます。

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

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

前提条件

このチュートリアルに従うには、次のものが必要です。

  • sudo権限を持つ非rootユーザーを持つUbuntu20.04サーバー:これらの権限を持つユーザーを設定する方法の詳細については、 Ubuntu20.04を使用したサーバーの初期設定ガイドを参照してください。

ビッグデータの概念と用語の概要またはHadoopの概要もご覧ください。

前提条件を満たしたら、sudoユーザーとしてログインして開始します。

ステップ1—Javaのインストール

開始するには、パッケージリストを更新し、Ubuntu20.04のデフォルトのJavaDevelopmentKitであるOpenJDKをインストールします。

sudo apt update
sudo apt install default-jdk

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

java -version
Outputopenjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

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

ステップ2—Hadoopをインストールする

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

インストールするリリースのbinaryに移動します。 このガイドでは、Hadoop 3.3.1をインストールしますが、このガイドのバージョン番号を任意のバージョン番号に置き換えることができます。

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

サーバーでは、wgetを使用して取得します。

wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

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


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

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

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz.sha512

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

shasum -a 512 hadoop-3.3.1.tar.gz
Output2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66  hadoop-3.3.1.tar.gz

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

cat hadoop-3.3.1.tar.gz.sha512

〜/ hadoop-3.3.1.tar.gz.sha512

...
SHA512 (hadoop-3.3.1.tar.gz) = 2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66
...

ミラーからダウンロードしたファイルに対して実行したコマンドの出力は、apache.orgからダウンロードしたファイルの値と一致する必要があります。

ファイルが破損または変更されていないことを確認したので、次のように解凍できます。

tar -xzvf hadoop-3.3.1.tar.gz

tarコマンドを使用し、-xフラグを使用して抽出し、-zを使用して解凍し、-vを使用して詳細出力を行い、-fを使用して指定します。ファイルから抽出しています。

最後に、抽出したファイルを/usr/localに移動します。これは、ローカルにインストールされたソフトウェアに適した場所です。

sudo mv hadoop-3.3.1 /usr/local/hadoop

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

ステップ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=
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . .

オプション2:Readlinkを使用して値を動的に設定する

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

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

これらの行が見つからない場合は、CTRL+Wを使用してテキストをすばやく検索してください。 完了したら、CTRL+Xで終了し、ファイルを保存します。

注: Hadoopに関して、hadoop-env.shJAVA_HOMEの値は、/etc/profileまたはユーザーのプロファイルによって環境に設定された値を上書きします。


ステップ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プログラムの例を実行して、Hadoopが正しく機能していることを確認します。 これを行うには、ホームディレクトリにinputというディレクトリを作成し、Hadoopの構成ファイルをそのディレクトリにコピーして、それらのファイルをデータとして使用します。

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

次に、次のコマンドを使用して、いくつかのオプションを備えたJavaアーカイブであるMapReducehadoop-mapreduce-examplesプログラムを実行できます。

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

これにより、grepプログラムが呼び出されます。これは、hadoop-mapreduce-examplesに含まれる多くの例の1つであり、その後に入力ディレクトリinputと出力ディレクトリgrep_exampleが続きます。 MapReduce grepプログラムは、リテラル単語または正規表現の一致をカウントします。 最後に、正規表現allowed[.]*を指定して、宣言文内または宣言文の最後にある単語allowedの出現箇所を検索します。 式では大文字と小文字が区別されるため、文の先頭で大文字になっている場合、その単語は見つかりません。

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

Output . . .
   File System Counters
        FILE: Number of bytes read=1200956
        FILE: Number of bytes written=3656025
        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=114
        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)=41
        Total committed heap usage (bytes)=403800064
    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

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

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/*
Output22    allowed.
1    allowed

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

結論

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

スタンドアロンではなく完全なクラスターをデプロイすることに関心がある場合は、DigitalOceanDropletsを使用してHadoopクラスターをスピンアップする方法を参照してください。