DockerとMac IDEAにスタンドアロンHadoop環境をインストールする

23620 ワード

今後の使いやすいように、スタンドアロン版のHadoopをDockerに配備する予定です.私たちは主に2つのチュートリアルに基づいています.1つはHadoopインストールチュートリアルです.スタンドアロン/擬似分散構成_Hadoop2.6.0/Ubuntu14.04もう一つはHadoop:Settings up a Single Node Cluster.です.
まずリモート制御ソフトウェアをインストールします.主にdockerにファイルを転送するためです.もちろんdocker自身のコマンドを使ってもいいので、このリモート制御ソフトウェアのインストールは必要ありません.docker cpコマンドを直接使用してファイルのコピーを行うことができます.だからこのステップは直接スキップすることができます.

Java環境のインストール


hadoopはJavaに依存しています.Openjdkをインストールします.jdkとjreを同時にインストールしました.
sudo apt-get install openjdk-7-jre openjdk-7-jdk

次に、環境変数を設定するためのルートディレクトリを探します.ここではdpkg-Lコマンドを使用しています.
root@244ca27dce99:/# dpkg -L openjdk-7-jdk
/.
/usr
/usr/lib
/usr/lib/jvm
/usr/lib/jvm/java-7-openjdk-amd64
/usr/lib/jvm/java-7-openjdk-amd64/lib
/usr/lib/jvm/java-7-openjdk-amd64/lib/ir.idl
/usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar
/usr/lib/jvm/java-7-openjdk-amd64/lib/jconsole.jar
/usr/lib/jvm/java-7-openjdk-amd64/lib/ct.sym
/usr/lib/jvm/java-7-openjdk-amd64/lib/dt.jar
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
/usr/lib/jvm/java-7-openjdk-amd64/lib/sa-jdi.jar
/usr/lib/jvm/java-7-openjdk-amd64/lib/orb.idl
/usr/lib/jvm/java-7-openjdk-amd64/man
/usr/lib/jvm/java-7-openjdk-amd64/man/man1
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/extcheck.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jhat.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/native2ascii.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jdb.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jar.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jrunscript.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jinfo.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/wsimport.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jstatd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/javah.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/idlj.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jarsigner.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/schemagen.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jstack.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/javac.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/javap.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/serialver.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/wsgen.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/apt.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jstat.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jconsole.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jmap.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jsadebugd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/rmic.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jcmd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/appletviewer.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/xjc.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/javadoc.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/man1/jps.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/extcheck.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jhat.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/native2ascii.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jdb.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jar.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jrunscript.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jinfo.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/wsimport.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jstatd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/javah.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/idlj.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jarsigner.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/schemagen.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jstack.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/javac.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/javap.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/serialver.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/wsgen.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/apt.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jstat.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jconsole.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jmap.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jsadebugd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/rmic.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jcmd.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/appletviewer.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/xjc.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/javadoc.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/man/ja_JP.UTF-8/man1/jps.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/include
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jvmti.h
/usr/lib/jvm/java-7-openjdk-amd64/include/classfile_constants.h
/usr/lib/jvm/java-7-openjdk-amd64/include/linux
/usr/lib/jvm/java-7-openjdk-amd64/include/linux/jawt_md.h
/usr/lib/jvm/java-7-openjdk-amd64/include/linux/jni_md.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jawt.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jvmticmlr.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jdwpTransport.h
/usr/lib/jvm/java-7-openjdk-amd64/bin
/usr/lib/jvm/java-7-openjdk-amd64/bin/jps
/usr/lib/jvm/java-7-openjdk-amd64/bin/jstat
/usr/lib/jvm/java-7-openjdk-amd64/bin/xjc
/usr/lib/jvm/java-7-openjdk-amd64/bin/idlj
/usr/lib/jvm/java-7-openjdk-amd64/bin/jsadebugd
/usr/lib/jvm/java-7-openjdk-amd64/bin/jarsigner
/usr/lib/jvm/java-7-openjdk-amd64/bin/appletviewer
/usr/lib/jvm/java-7-openjdk-amd64/bin/jdb
/usr/lib/jvm/java-7-openjdk-amd64/bin/jmap
/usr/lib/jvm/java-7-openjdk-amd64/bin/javap
/usr/lib/jvm/java-7-openjdk-amd64/bin/jcmd
/usr/lib/jvm/java-7-openjdk-amd64/bin/jhat
/usr/lib/jvm/java-7-openjdk-amd64/bin/jrunscript
/usr/lib/jvm/java-7-openjdk-amd64/bin/javah
/usr/lib/jvm/java-7-openjdk-amd64/bin/jinfo
/usr/lib/jvm/java-7-openjdk-amd64/bin/apt
/usr/lib/jvm/java-7-openjdk-amd64/bin/serialver
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac
/usr/lib/jvm/java-7-openjdk-amd64/bin/wsimport
/usr/lib/jvm/java-7-openjdk-amd64/bin/jconsole
/usr/lib/jvm/java-7-openjdk-amd64/bin/jar
/usr/lib/jvm/java-7-openjdk-amd64/bin/rmic
/usr/lib/jvm/java-7-openjdk-amd64/bin/schemagen
/usr/lib/jvm/java-7-openjdk-amd64/bin/wsgen
/usr/lib/jvm/java-7-openjdk-amd64/bin/native2ascii
/usr/lib/jvm/java-7-openjdk-amd64/bin/jstack
/usr/lib/jvm/java-7-openjdk-amd64/bin/jstatd
/usr/lib/jvm/java-7-openjdk-amd64/bin/javadoc
/usr/lib/jvm/java-7-openjdk-amd64/bin/extcheck
/usr/share
/usr/share/doc
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/openjdk-7-jdk
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli/libjli.so
/usr/lib/jvm/java-7-openjdk-amd64/lib/jexec
/usr/lib/jvm/java-7-openjdk-amd64/include/jawt_md.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jni_md.h
/usr/lib/jvm/java-7-openjdk-amd64/THIRD_PARTY_README
/usr/lib/jvm/java-7-openjdk-amd64/ASSEMBLY_EXCEPTION
/usr/lib/jvm/java-7-openjdk-amd64/src.zip
/usr/share/doc/openjdk-7-jdk
root@244ca27dce99:/# 

このソフトウェアのルートディレクトリは/usr/lib/jvm/java-7-openjdk-amd64であることがわかります.このjava環境の環境変数を設計します.プロファイル~/.bashrcを開きます.次にexportコマンドを使用してjavaの環境変数を設定し、検証を行います.
root@244ca27dce99:/# java -version
java version "1.7.0_131"
OpenJDK Runtime Environment (IcedTea 2.6.9) (7u131-2.6.9-0ubuntu0.14.04.2)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
root@244ca27dce99:/# 

hadoopのインストール


現在の最新版hadoopをダウンロードします.2.8バージョンです.
ローカルでダウンロードして解凍し、docker cpコマンドを使用してhadoopのコンテナにコピーします.
localhost:~ zhendu$ docker cp ~/Downloads/hadoop-2.8.0 hadoop:/

次に、このディレクトリをusr/localの下に置きます.このディレクトリには、通常、ローカルにインストールしたソフトウェアが置いてあります.そして私たちは名前を変更し、ファイルを実行可能にしました.
hadoopコマンドを簡単に実行して、いいかどうか見てみましょう.
root@244ca27dce99:/usr/local/hadoop# ./bin/hadoop version
Hadoop 2.8.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 91f2b7a13d1e97be65db92ddabc627cc29ac0009
Compiled by jdu on 2017-03-17T04:12Z
Compiled with protoc 2.5.0
From source with checksum 60125541c2b3e266cbf3becc5bda666
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.8.0.jar
root@244ca27dce99:/usr/local/hadoop

hadoopは最初はデフォルトでスタンドアロン版に設計されていましたが、hadoopのインタフェースを使ってhadoopプログラムを開発することができます.実際には、スタンドアロン版はhadoopの唯一のスタンドアロン導入方法ではありません.
Hadoopは単一ノード上で擬似分散方式で実行でき、Hadoopプロセスは分離されたJavaプロセスで実行され、ノードはNameNodeとしてもDataNodeとしても、同時にHDFS内のファイルが読み込まれる.
もちろんhadoopプログラムを実行することができます.

hadoopプログラムの実行


hadoopは多くのケースプログラムを提供しています.私たちは今、コマンドを使用してサンプルプログラム:grepを実行し、inputとoutputのパスをそれぞれ設定してから、サンプルプログラムの実行を行うことができます.
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

これが私たちが運行するものです.

IDEAでhadoopの開発を行う


hadoopはjavaに完全に基づいているので、このhadoopはmac物理マシンで実行できると考えられるので、IDEAにhadoopの環境を直接配置しました.
私たちが主に従ったチュートリアルはIntelliJ IDEA 16.1を使ってhadoopプログラムを書くことです.
主にhadoopのすべてのjavaパッケージをインポートし、コンパイルパラメータに入力ファイルと出力ファイルを宣言します.