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

前書き

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

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

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

  • Hadoop Distributed File Systemの略である* HDFS *は、データをディスクに永続化する役割を果たします。

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

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

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

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

前提条件

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

  • * `+ sudo +`特権を持つ非rootユーザーを持つUbuntu 16.04サーバー*:これらの特権を持つユーザーの設定方法の詳細については、https://www.digitalocean.com/community/tutorials/initialをご覧ください。 -server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバー設定]ガイド。

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

始める前に、https://www.digitalocean.com/community/tutorials/an-introduction-to-big-data-concepts-and-terminology [ビッグデータの概念の紹介と用語]またはhttps://www.digitalocean.com/community/tutorials/an-introduction-to-hadoop[Hadoopの概要]

ステップ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が正常にインストールされたことを確認します。

ステップ2-Hadoopのインストール

Javaを配置したら、http://hadoop.apache.org/releases.html [Apache Hadoopリリースページ]にアクセスして、最新の安定版リリースを見つけます。 現在のリリースのバイナリに従ってください:

image:https://assets.digitalocean.com/articles/hadoop-standalone-1604/hadoop-latest-release.png [ミラーページのリンクを強調表示するHadoopリリースページのスクリーンショット]

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

image:https://assets.digitalocean.com/articles/hadoop-standalone-1604/hadoop-download-link.png [最新の安定したバイナリへのリンクを強調するHadoopリリースのスクリーンショット]

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

wget http:///hadoop/common/hadoop-/hadoop-.tar.gz

ダウンロードしたファイルが変更されていないことを確認するために、SHA-256を使用して簡単なチェックを行います。 http://hadoop.apache.org/releases.html [リリースページ]を返し、Apacheリンクをたどります。

image:https://assets.digitalocean.com/articles/hadoop-standalone-1604/hadoop-mds.png [.mdsファイルを強調するスクリーンショット]

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

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

image:https://assets.digitalocean.com/articles/hadoop-standalone-1604/hadoop-SHA.png [.mdsファイルを強調するスクリーンショット]

再度、ファイルの場所を右クリックしてコピーし、 `+ wget +`を使用してファイルを転送します。

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

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

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

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

cat hadoop-.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 」を使用します詳細出力の場合、およびファイルから抽出することを指定するための「 -f +」。 次のコマンドでタブ補完を使用するか、正しいバージョン番号に置き換えます。

tar -xzvf

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

sudo mv hadoop- /usr/local/hadoop

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

ステップ3-HadoopのJavaホームの構成

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

Javaへのパスである `+ / usr / bin / java `は ` / etc / alternatives / java `へのシンボリックリンクであり、これはデフォルトのJavaバイナリへのシンボリックリンクです。 パスのすべての部分にあるすべてのシンボリックリンクを再帰的にたどるために、「-f 」フラグとともに「 readlink 」を使用します。 次に、「 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}

. . .

オプション2:読み取りリンクを使用して値を動的に設定する

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

. . .
export JAVA_HOME=${JAVA_HOME}

. . .

ステップ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アーカイブであるMapReduceの `+ hadoop-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-.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

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

cat ~/grep_example/*
Output6       principal
1       principal.

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

結論

このチュートリアルでは、Hadoopをスタンドアロンモードでインストールし、提供されているサンプルプログラムを実行して検証しました。 独自のMapReduceプログラムの作成方法を学習するには、Apache Hadoopのhttps://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html[MapReduceチュートリアルをご覧ください。 ]この例の背後にあるコードを詳しく説明します。 クラスターをセットアップする準備ができたら、Apache Foundation Hadoopクラスターセットアップガイドをご覧ください。

Related