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

前書き

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

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

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

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

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

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

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

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

前提条件

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

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

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

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

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

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

sudo apt-get update

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

sudo apt-get install default-jdk

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

java -version
Outputopenjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

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

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

Javaを導入したら、Apache Hadoop Releases pageにアクセスして、最新の安定版リリースを見つけます。 現在のリリースのバイナリに従ってください:

Screenshot of the Hadoop Releases page highlighting the link the mirrors page

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

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

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

wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

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

ダウンロードしたファイルが変更されていないことを確認するために、SHA-256を使用して簡単なチェックを行います。 releases pageを返し、Apacheリンクをたどります。

Screenshot highlighting the .mds file

ダウンロードしたバージョンのディレクトリを入力します:
Screenshot highlighting the .mds file

最後に、ダウンロードしたリリースの.mdsファイルを見つけて、対応するファイルのリンクをコピーします。

Screenshot highlighting the .mds file

ここでも、右クリックしてファイルの場所をコピーし、wgetを使用してファイルを転送します。

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

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

shasum -a 256 hadoop-2.7.3.tar.gz
Outputd489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2  hadoop-2.7.3.tar.gz

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

cat hadoop-2.7.3.tar.gz.mds

~/hadoop-2.7.3.tar.gz.mds

...
hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
...

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

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

tar -xzvf hadoop-2.7.3.tar.gz

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

sudo mv hadoop-2.7.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-8-openjdk-amd64/jre/

この出力をコピーして、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-8-openjdk-amd64/jre/
 . . .

/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 [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar             run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp   copy file or directories recursively
  archive -archiveName NAME -p  *  create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon

このヘルプは、スタンドアロンモードで実行するように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プログラムは、リテラルワードまたは正規表現の一致をカウントします。 最後に、宣言文内または宣言文の最後にある単語principalの出現を見つけるための正規表現を提供します。 式では大文字と小文字が区別されるため、文の先頭で大文字になっている単語は見つかりません。

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

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

Output . . .
        File System Counters
                FILE: Number of bytes read=1247674
                FILE: Number of bytes written=2324248
                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=37
                Map output materialized bytes=47
                Input split bytes=114
                Combine input records=0
                Combine output records=0
                Reduce input groups=2
                Reduce shuffle bytes=47
                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)=61
                Total committed heap usage (bytes)=263520256
        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=151
        File Output Format Counters
                Bytes Written=37

[。注意]##

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

Output . . .
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

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

cat ~/grep_example/*
Output6       principal
1       principal.

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

結論

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

Related