Ubuntu16.04でスタンドアロンモードでHadoopをインストールする方法
序章
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.sh
のJAVA_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ガイドを参照してください。