Macのローカル環境でhadoopを1から勉強する


とりあえずローカルのmac上で試しにhadoopを動かしてみたいということで、
virtualboxをインストールして、vagrantでcentosを入れて疑似分散環境を作ってみました。

homebrewをインストール

virtualboxやvagrantをコマンドラインからインストールするためこいつを入れます。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

virtualboxのインストール

brew cask search /^virtualbox$/
brew cask install virtualbox

信じられないかもしれませんがこれで、アプリケーションフォルダにvirtualboxがインストールされます。

さくっとこのままvagrantを使っていきます

vagrantのインストール

brew cask search vagrant
brew cask install vagrant
これでvagarantがインストールされました。

vagrantを使ってcentosを立ててみる

立てたいOSのBOXを落としてくる

BOXというのは構築するサーバのOSイメージみたいなやつと思えばいいと思います。

ここからお好みのOSのURLをゲッチュする。
http://www.vagrantbox.es/
今回は僕はcentos6系のを選びました。

上でコピーしたOSのURLを下記コマンドの一番最後の引数に指定
vagrant box add <name> <boxのURL>
といった具合

vagrant box add centos6 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box
↑でcentos6のboxがDLできる。

DLが終わったら、
vagrant box list
で確認してみましょう。
<name>で指定した名前のBOXが表示されるはずです。

落としてきたBOXをもとにVMを起動させる

mkdir centosVM
cd centosVM
vagrant init centos6
と打ちます。
すると、
Vagrantfile
というものが出来上がります。
ちょこっと書き換えます。
vi Vagrantfile
で開き。
#config.vm.network "forwarded_port", guest: 80, host: 80
という行があると思うので、
コメントアウトを外して、
config.vm.network "forwarded_port", guest: 50070, host: 50070
と書き換えます。
何をしているかというと、
vagrantサーバ上でHDFSを起動させた後、ブラウザから管理画面をみるための設定です。
こうしておくことで、
Macのブラウザから、
localhost:50070
と打つことで、
vagrant上の50070ポートのプロセスにアクセスすることができるのです。便利。
もちろんvagrantのサーバにプライベートIPをつけることも可能ですがこれで事足ります。

Vagrantfileを編集し終わったら、
vagrant up
でVMが立ち上がります。

SSHで接続してhadoopとして必要なものをインストールしていく

vagrant ssh
で立ち上げたVMに接続することができます。
※vagrant upを叩いたときに、127.0.0.1:2222で上がったよってログがでるので、
ssh [email protected] -p 2222
といった形でも接続可能です。
パスワードは「vagrant」です

wgetのインストール

素の状態だとwgetが入っていないので入れます。
sudo su -
でrootになり。
yum install wget
で簡単に入ります

JDKのインストール

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm" -O jdk-8u45-linux-x64.rpm
長いコマンドですがこれで引っ張ってこれます。
rootのまま作業しましょう。
yum -y localinstall jdk-8u45-linux-x64.rpm
でインストールされます。
java -version
でバージョン情報が表示されるのを確認できればOK

CDHをインストール

wget http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm
yum -y --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm
でCDH5が入ります。

疑似分散環境の設定

yum -y install hadoop-conf-pseudo
詳しいことはわかりませんがこれが必要なそうです。(これからわかっていくのです)

ローカルからSSHする際に邪魔になりそうなのでfirewallを切っておきます。
service iptables stop
chkconfig iptables off

HDFSのフォーマット

sudo -u hdfs hdfs namenode -format
注意点はhdfsユーザで実行するところです。
※CDHのパッケージをインストールすることで自動的にhdfsユーザ、mapredユーザは作られています。

上記コマンドを打つとどわーーっとでてきます。

最終的に、

17/04/11 09:57:01 INFO util.ExitUtil: Exiting with status 0
17/04/11 09:57:01 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/

的なメッセージがでればOKかと。

サービス起動

service hadoop-hdfs-namenode start
service hadoop-hdfs-datanode start
namenodeとdatanodeのプロセスを起動させます。

この状態でMacのブラウザから、
localhost:50070
にアクセスするとHDFSの管理画面が閲覧できるかと思います。

HDFSに必要なディレクトリの作成

スクリプトが用意されています。
sudo /usr/lib/hadoop/libexec/init-hdfs.sh
これを実行しないとYARNがコケるそうです。よくわかっていません。

sudo -u hdfs hadoop fs -ls -R /
で、作成されたディレクトリなどを確認できます。

sudo service hadoop-yarn-resourcemanager start
sudo service hadoop-yarn-nodemanager start
sudo service hadoop-mapreduce-historyserver start

これでYARNが起動しました。
ResourceManager - http://192.168.33.100:8088/
NodeManager - http://192.168.33.100:8042/
JobHistory - http://192.168.33.100:19888/
にアクセスすると、webから管理画面が見えるそうです。
※VagrantFileに↑ポートへのフォワード設定が必要です。

サンプルプログラムの実行

sudo su - hdfs
echo "hoge fuga bar foo hoge fuga" > wordcount.txt
hadoop fs -mkdir -p /user/hdfs/input
hadoop fs -put wordcount.txt /user/hdfs/input
hadoop fs -cat /user/hdfs/input/wordcount.txt

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /user/hdfs/input/wordcount.txt /user/hdfs/output

実行結果の確認
hadoop fs -ls -R /user/hdfs/output
hadoop fs -cat /user/hdfs/output/part-r-00000

これで一通りhadoopを動かす環境が整いました

疑似分散環境という形ですが、以上でhadoop環境の構築から実行までできたと思います。
ここからhiveだとかを投げて見たりしていきたいです。