読者です 読者をやめる 読者になる 読者になる

Hadoopのインストールと実行方法(スタンドアロンモード)

スポンサーリンク

 Apache™ Hadoop®! のインストールとスタンドアロンモードでの実行方法についてです。

Hadoopのインストール

公式のドキュメントは  Hadoop: Setting up a Single Node Cluster. を参考にしています。

 Downloads ページから該当するバージョンのバイナリ tarball を選択してパッケージをダウンロードします。

# cd /usr/local/lib/
# wget http://ftp.riken.jp/net/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
# tar zxf hadoop-2.7.2.tar.gz
# rm hadoop-2.7.2.tar.gz
# ln -s hadoop-2.7.2 hadoop

HADOOP_HOME の環境変数と、Hadoop のバイナリがあるディレクトリに PATH を通しておきます。

# echo 'export HADOOP_HOME=/usr/local/lib/hadoop' >> /etc/profile.d/hadoop.sh
# echo 'export PATH="$HADOOP_HOME/bin:$PATH"' >> /etc/profile.d/hadoop.sh
# source /etc/profile

JDK も必要になるのでインストールしてください。サポートされているバージョンは  コチラ を参照。

 CentOSにJava(JDK)をRPMでインストール+バージョン変更について
 MacでHomebrewを使用して複数バージョンのJava (JDK) をインストールして切り替える方法

Hadoop を開始する前に JAVA_HOME を設定します。設定されていないとエラーになります。

# hadoop version
Error: JAVA_HOME is not set and could not be found.

etc/hadoop/hadoop-env.shを編集して JAVA_HOME を設定します。~/.bash_profile~/.bashrcでも問題ありません。

# The java implementation to use.
export JAVA_HOME=/usr/java/default

以上で、スタンドアロンモードで使用するための準備が整いました。

# hadoop version
Hadoop 2.7.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41
Compiled by jenkins on 2016-01-26T00:08Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /usr/local/lib/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar

スタンドアロンモードの実行方法

Hadoop のデフォルトではデーモンを一切動作させず、単一のJavaプロセスとして、非分散モードで実行するように構成されています。 これをスタンドアロンモード(またはローカルモード)といいます。 各種設定ファイルに対するプロパティの設定も、デフォルト値はスタンドアロンモードにあわせて設定されているので、これ以上の設定は不要です。

実際に試してみましょう。HDFS はスタンドアロンモードの場合、単純にローカルのファイルシステムが使用されます。

# hadoop fs -ls /usr/local/lib/
16/02/13 18:52:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 10 items
drwxr-xr-x   - 10011 10011       4096 2016-01-26 09:20 /usr/local/lib/hadoop
drwxr-xr-x   - 10011 10011       4096 2016-01-26 09:20 /usr/local/lib/hadoop-2.7.2

MapReduce を実行してみます。入力データはローカルのファイルを参照します。

# mkdir input
# cp etc/hadoop/*.xml input
# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
...
# cat output/part-r-00000
1   dfsadmin

サンプルプログラムは他にもあり、引数無しで実行すると一覧が出力されます。

# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.
  dbcount: An example job that count the pageview counts from a database.
  distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.
  grep: A map/reduce program that counts the matches of a regex in the input.
...

Hadoop を始めようとすると分散環境を構築したりと大変なイメージがあると思いますが、 このようにスタンドアロンモードであればデバッグも容易ですし気軽に Hadoop を試す事が可能です。

CDH5を使用したインストール

CDH5 を使用した Hadoop のインストール方法についてです。まずは  CDH5のインストール をしてください。

Yum から YARN や HDFS も依存関係をまとめてインストールします。

# yum install hadoop

インストール先や作成されるディレクトリは次の通りです。 /usr/lib以下に各コンポーネント毎にホームディレクトリが作成されていて、設定ファイル関連は/etc/hbase/confにまとまってます。ただしhadoop-env.shが何故か無くなっているので必要な場合は別途作成します。JAVA_HOME は設定していなくても内部で設定されるので必須ではありません。

/etc/hadoop
/usr/lib/hadoop
/usr/lib/hadoop-0.20-mapreduce
/usr/lib/hadoop-hdfs
/usr/lib/hadoop-yarn
/usr/lib/hadoop-mapreduce
/var/run/hadoop-0.20-mapreduce
/var/run/hadoop-hdfs
/var/run/hadoop-yarn
/var/run/hadoop-mapreduce
/var/lib/hadoop
/var/lib/hadoop-hdfs
/var/lib/hadoop-yarn
/var/lib/hadoop-mapreduce
/var/log/hadoop-0.20-mapreduce
/var/log/hadoop-hdfs
/var/log/hadoop-yarn
/var/log/hadoop-mapreduce

スタンドアロンモードの場合は特に設定も変更しなくて良いので、そのまま使用できます。

# hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.5.1.jar grep /etc/hadoop/conf output 'dfs[a-z.]+'
...
# cat output/*
4   dfs.class
3   dfs.server.namenode.
2   dfs.period