クラヴィスエンジニアブログ

CLAVIS Engineer Blog

Hadoopの体験

web 2017/10/21 by ishiage

今回は実際にHadoopをインストールしてHDFSとMapRedudeを体感してみましょう!

HDFSはHadoopで利用されるFS(ファイルシステム)です。

MapReduceとは分散処理されるプログラミングモデルです。

では早速動かしてみましょう!

 

vagrantでCentOS7の用意

(VagrantとVM環境(VirtualBox)などのインストールは用意しておいて下さい。ここで書くとそれだけで記事が終わってしまうので・・)

 

VagrantでCentOS7の準備

ディレクトリ作成

local$ mkdir hadoop
local$ cd hadoop

centos7を追加

local$ vagrant box add centos/7

(その後利用しているvmを選択)

boxのダウンロードなどがあり時間がかかるので少し待ちましょう。

local$ vagrant init centos/7

centos7を起動

local$ vagrant up

どうやらWindows7だとVagrantのバージョンが1.97以降は動かないようです。

下記のWindows7の方は下記のURLからバージョン1.96をダウンロードしてインストールしましょう。

https://releases.hashicorp.com/vagrant/

 

vagrantでcentos7が立ち上がったあとはログインしてみましょう。

local$ vagrant ssh

ログインできれば問題無しです!

ログアウトしておきましょう。

local$ exit

 

Hadoopの準備

JDKのインストール

HadoopはJava製です。

なのでJavaのインストールが必要になります。

 

JDKをインストールしましょう。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

JDKをダウンロード

    Accept License Agreementをチェック

    jdk-x_linux-x64_bin.rpmをクリック

おすすめは8系。9系は色々とエラーが出るので・・。

 

scpでファイルを送るためにssh.configをvagrant用ssh.confgを作成

local$ vagrant ssh-config > ssh.config

 

jdkのrpmをvagrant側にコピー

local$ scp -F ssh.config jdk-x_linux-x64_bin.rpm vagrant@default:~/

vm上のCentOS7にログイン

local$ vagrant ssh

vagrant sshでログインしJDKをインストール

vagrant$ sudo rpm -ivh jdk-8xxxx_linux-x64_bin.rpm

 

Hadoopインストール

http://ftp.jaist.ac.jp/pub/apache/hadoop/common/

からダウンロード

vagrant$ curl -L -O http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-2.8.3/hadoop-2.8.3.tar.gz

vagrant$ tar xzvf hadoop-2.8.3.tar.gz

 

Hadoop設定

とりあえず最低限の動作で動かしてみます。

Hadoopの動作に必要な設定ファイルを編集します。

vagrant$ vi hadoop-*/etc/hadoop/core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

 

HDFSの設定をします。

vagrant$ vi hadoop-*/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/vagrant/var/lib/hdfs/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/vagrant/var/lib/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

 

環境設定を設定しましょう。

vagrant$ vi .bashrc
export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/home/vagrant/hadoop-2.8.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

現在のコンソールで反映

vagrant$ source .bashrc

 

Hadoopを動かす場合、動かすユーザーはパスワード無しでのsshログインが必要となるので、

パスワード無しの公開鍵を作成します。

vagrant$ ssh-keygen
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:j6R5DKw4CodWaBn87FUibtnRkwsAcNaDH+5IgliBH6w vagrant@localhost.localdomain
The key's randomart image is:

    そのままエンターを3回押してパスワード無しの公開鍵を作成

 

鍵の設置

vagrant$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

一度ログインしておきます。

vagrant$ ssh localhost

yesと押してそのまま進む。

 

HDFSのフォーマット

vagrant$ hdfs namenode -format

 

そしてhadoopを起動。

vagrant$ start-all.sh

このコマンドだけで各サービスが自動的に立ち上がります。

ちなみに止めるときは

vagrant$ stop-all.sh

 

HDFSとMapReduceの体験

HDFS編

では次にHDFSを使ってみましょう。

まずはローカルに適当なファイルを用意しそのファイルをHDFS上に置きます。

vagrant$ touch data

vagrant$ vi data

この後英単語のカウントを行うので英語で適当に書いて下さい。どっかのサイトのコピーでも!

 

用意が終わったらhadoopコマンドでHDFSにファイルを置きます

vagrant$ hadoop fs -put data /

 

置き終わったら、ファイルの確認をしましょう。

vagrant$ hadoop fs -ls /data

 

ついでに中身も見てみましょう

vagrant$ hadoop fs -cat /data

 

ではこのdataファイルをもう一度Linuxのローカル上に持ってきてみましょう

vagrant$ hadoop fs -get /data ./data.txt

ファイルを見るとdataとdata.txtは同じ物だと思います。

 

HDFSは基本的にこのようにファイルのやりとりを行います。

Linux上のFSと比べて反応が遅く使い勝手もいまいちですよね・・。

一般的なFSと比べて使いづらいものの、HDFSはHadoopに最適化されておりHadoop上では非常に良いパフォーマンスを出してくれます。

 

MapReduce編

では次にMapReduceを試してみましょう。

今回は先ほどのdataファイルを利用して単語のカウントを行います。

MapReduceでプログラミングしたい所ですが、それだけでまた記事が終わってしまうので、

今回はHadoopが用意しているプログラムを利用します。

 

vagrant$ hadoop jar hadoop-2.8.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /data /result

 

おそらくいろいろなログがでて来るかと思います。

最終的にHDFS上の/resultに結果ファイルが出来ます。

では結果を見てみましょう。

vagrant$ hadoop fs -cat /result/*

ズラズラと出て分かりづらいのでファイルで落としましょう。

vagrant$ hadoop fs -cat /result/* > result

vagrant$ vi result

 

終わりに

これでHDFSとMapReduceの体験は終わりです。

いかがだったでしょうか?

Hadoopはバッチ処理として利用することが多いので、通常のバッチ作成と比べると非常に面倒くさいですね。

ただこのシステムを使い、ノードを増やすことにより非常に大きなデータでも通常のバッチとは比べものにならないほどの

速い処理を行ってくれます。

今回はお試しだったのでMapReduceのプログラミングを行いませんでしたが、正直MapReduceのプログラミングは面倒くさいです。

正直言うと私も殆どMapReduceでのプログラミングは書いたことありません。

ではどうやって動かすかというとHiveというSQL形式でジョブが動かせるエコシステムを使っています。

 

次回はこのHiveの動かし方を紹介しようと思います。

そのため引き続きこのVagrantの環境を利用しようと思うので、消さずにそのままお使い下さい!

tag :  Hadoop  HDFS  MapReduce 
clavis logo