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

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

序章

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

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

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

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

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

前提条件

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

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

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

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

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

まず、パッケージリストを更新します。

sudo apt-get update

次に、Ubuntu16.04にデフォルトのJavaDevelopmentKitである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が正常にインストールされたことを確認します。

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

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

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

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

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

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


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

ダウンロードしたバージョンのディレクトリを入力します。

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

ここでも、右クリックしてファイルの場所をコピーし、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を使用して解凍します。詳細出力の場合はX160X]、ファイルから抽出することを指定する場合は-f。 以下のコマンドでタブ補完を使用するか、正しいバージョン番号に置き換えてください。

tar -xzvf hadoop-2.7.3.tar.gz

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

sudo mv hadoop-2.7.3 /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-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/
 . . . 

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

/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::")
 . . . 

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


ステップ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 <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 <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> 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プログラムを実行できます。 grepプログラムを呼び出します。これは、hadoop-mapreduce-examplesに含まれる多くの例の1つであり、その後に入力ディレクトリ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

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

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プログラムを作成する方法については、ApacheHadoopのMapReduceチュートリアルにアクセスして、例の背後にあるコードを確認することをお勧めします。 クラスターをセットアップする準備ができたら、Apache Foundation Hadoop ClusterSetupガイドを参照してください。