前書き
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にアクセスして、最新の安定版リリースを見つけます。 現在のリリースのバイナリに従ってください:
次のページで、最新の安定版リリースバイナリのリンクを右クリックしてコピーします。
サーバーでは、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リンクをたどります。
ダウンロードしたバージョンのディレクトリを入力します:
最後に、ダウンロードしたリリースの.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
を解凍し、-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/
. . .
オプション2:読み取りリンクを使用して値を動的に設定する
/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.sh
のJAVA_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のガイドを参照してください。