woshidan's blog

そんなことよりコードにダイブ。

Hadoop 3.1.1をインストールしてLocal Modeで動かしてみる

今日は https://qiita.com/Esfahan/items/39fd1e2f8b755eacec65 http://www.atmarkit.co.jp/ait/articles/0902/27/news129_2.html http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html あたりを参考にしつつHadoopのインストール作業の素振りをしてみます。

Hadoopをインストール

Hadoopのインストールの事前準備

HadoopJavaで動作するのでJavaのOpen JDKを入れる。

$ sudo yum install java-1.8.0-openjdk

# http://www.yunabe.jp/tips/linux_default_java_version.html を参考に利用するJavaのバージョンを切り替える。
$ sudo update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2

$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Hadoopの起動に必要な環境変数を設定。

[ec2-user@ip-172-31-16-22 ~]$ vim ~/.bash_profile 

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/java/latest/bin
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre
export HADOOP_HOME=/home/ec2-user/hadoop

JAVA_HOMEのパスが若干どこから出てきた感ありますが、JAVA_HOMEにはインストールしてきたJavaのルートディレクトリを指定する必要があるので、yum install したあと下記のパッケージで調べています。

# yumでインストールしたパッケージのインストール場所を調べる http://d.hatena.ne.jp/muupan/20130311/1362939424
$ rpm -ql  java-1.8.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre/bin/policytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre/lib/amd64/libawt_xawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre/lib/amd64/libjsoundalsa.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-8.b13.39.39.amzn1.x86_64/jre/lib/amd64/libsplashscreen.so

.bash_profile の設定を反映させる。

$ exec $SHELL -l

Hadoopのインストール

$ wget http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-3.1.1/hadoop-3.1.1.tar.gz
$ tar xvfz hadoop-3.1.1.tar.gz
$ ln -s hadoop-3.1.1 hadoop

$ cd hadoop
$ ls
bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share

$ bin/hadoop
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:
...

Hadoop 3.1.1の場合はこの時点で、

  • Local (Standalone) Mode
  • Pseudo-Distributed Mode
  • Fully-Distributed Mode

での動作が可能と書いてあるので、 Local (Standalone) Mode で動かしてみます。

動作確認をしてみる

Local Modeで動かしてみる

とはいえ、インストールしたまま設定変更不要で動かせるのはLocal Modeだけみたいです。

ということで、公式のGetting Startedにあわせて、Local Modeでのサンプルコマンドを動かしてみる。

# テスト処理用にconfigファイルをコピーしてきている
$ cp etc/hadoop/*.xml input
# inputディレクトリ以下にあるdfs..で始まる設定ファイルの名前をoutputディレクトリ以下に出力する
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+'
# 今回みたいにめちゃくちゃ出力が少ないコマンドでも part-r-00000 みたいな形のファイルで出るのかー(独り言)
$ ls output/
part-r-00000  _SUCCESS
# grepの結果は part-r-00000 に出力されている
$ cat output/part-r-00000 
1  dfsadmin

これのあと設定をいじって Pseudo-Distributed Mode を動かそうとしたらうまく動かなかったので、一からインスタンス立て直して試した方が早そう、ということで今日はここまで。