かざん技術ブログ

Python, Unity, Deep Q Network, 強化学習

Vagrantを使ってMac上にHadoop擬似分散環境を構築

Mac上でHadoopの擬似分散モードを試す環境を構築したので、その備忘録

参考

[1]VagrantでCDH擬似分散環境構築
[2]Macのローカル環境でhadoopを1から勉強する
[3]bash 起動時の環境ファイルについて調べてみた
[4]2017.03.21 CDH5で擬似分散モードのHadoopクラスタを構築する - hellosungbum’s diary

VM起動、接続

$ vagrant up
$ vagrant ssh
  • ※以下はVM上での作業

不要サービス無効化

  • ローカルからSSHする際に邪魔になりそうなのでfirewallを切ったり
[vagrant@cdh-train ~]$ sudo service iptables stop
[vagrant@cdh-train ~]$ sudo chkconfig iscsi off
[vagrant@cdh-train ~]$ sudo chkconfig iscsid off
[vagrant@cdh-train ~]$ sudo chkconfig iptables off
[vagrant@cdh-train ~]$ sudo chkconfig ip6tables off
[vagrant@cdh-train ~]$ sudo chkconfig mdmonitor off
[vagrant@cdh-train ~]$ sudo chkconfig netfs off
[vagrant@cdh-train ~]$ sudo chkconfig nfslock off
[vagrant@cdh-train ~]$ sudo chkconfig postfix off
[vagrant@cdh-train ~]$ sudo chkconfig udev-post off

wgetをインストール

[vagrant@cdh-train ~]$ sudo yum install wget

JDKインストール

前準備(ローカル上にて)
インストール
[vagrant@cdh-train vagrant]$ sudo su -
[root@cdh-train ~]# cd /vagrant
[root@cdh-train ~]# chmod 777 jdk-8u181-linux-x64.rpm
[root@cdh-train ~]# rpm -ivh jdk-8u181-linux-x64.rpm
確認
[root@cdh-train ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
パス通す
  • $PATH に値を追加する場合、システムグローバルに適用する場合は /etc/profile.d/ 配下にファイルを追加、個人毎の適用の場合は ~/.bashrc(bash_profile)に追記するのが良さそう
    • ログイン時、profile.shの中に入っている.shファイルが全て実行されるので、そこで環境変数が代入される
[root@cdh-train ~]# echo "export JAVA_HOME=/usr/java/default" > /etc/profile.d/jdk.sh
[root@cdh-train ~]# source /etc/profile.d/jdk.sh
[root@cdh-train ~]# exit

CDH5をインストール

[vagrant@cdh-train ~]$ wget http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.repo
[vagrant@cdh-train ~]$ sudo mv cloudera-cdh5.repo /etc/yum.repos.d/
  • RPMをダウンロードするやり方(今回やってない)
    • 鍵を追加
[vagrant@cdh-train ~]$ sudo rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
[vagrant@cdh-train ~]$ wget http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm
[vagrant@cdh-train ~]$ yum -y --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm
[vagrant@cdh-train ~]$ yum clean all

擬似分散モードの設定のHadoopをインストール

インストール
  • 擬似分散環境用の設定ファイルhadoop-conf-pseudoをインストール
  • 依存関係のあるモジュールも自動でインストールされるため、HDFSやYARNも含まれる
  • インストールすることで自動的にhdfsユーザ、mapredユーザが作られる
[vagrant@cdh-train ~]$ sudo yum install hadoop-conf-pseudo
確認
[vagrant@cdh-train ~]$ sudo yum list installed | grep hadoop
hadoop.x86_64                        2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-0.20-mapreduce.x86_64         2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-client.x86_64                 2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-conf-pseudo.x86_64            2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-hdfs.x86_64                   2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-hdfs-datanode.x86_64          2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-hdfs-namenode.x86_64          2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-hdfs-secondarynamenode.x86_64 2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-mapreduce.x86_64              2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-mapreduce-historyserver.x86_64
hadoop-yarn.x86_64                   2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-yarn-nodemanager.x86_64       2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6
hadoop-yarn-resourcemanager.x86_64   2.6.0+cdh5.15.1+2822-1.cdh5.15.1.p0.4.el6

[vagrant@cdh-train ~]$ hadoop version
Hadoop 2.6.0-cdh5.15.1
Subversion http://github.com/cloudera/hadoop -r 2d822203265a2827554b84cbb46c69b86ccca149
Compiled by jenkins on 2018-08-09T16:23Z
Compiled with protoc 2.5.0
From source with checksum 96bc735f7d923171f18968309fa3c477
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.15.1.jar

HDFSフォーマット

  • 注意点はhdfsユーザで実行するところ
[vagrant@cdh-train ~]$ sudo su -
[root@cdh-train ~]# sudo -u hdfs hdfs namenode -format

各デーモン起動

[root@cdh-train ~]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

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

  • たくさんのファイルが出来上がっていたのでログも残していく
[root@cdh-train ~]# sudo /usr/lib/hadoop/libexec/init-hdfs.sh
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /tmp'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 1777 /tmp'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /var'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /var/log'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 1775 /var/log'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown yarn:mapred /var/log'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /tmp/hadoop-yarn'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /tmp/hadoop-yarn/staging/history/done_intermediate'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn/staging'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 1777 /tmp'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /var/log/hadoop-yarn/apps'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 1777 /var/log/hadoop-yarn/apps'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown yarn:mapred /var/log/hadoop-yarn/apps'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /hbase'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown hbase /hbase'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /benchmarks'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 777 /benchmarks'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/history'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown mapred /user/history'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/jenkins'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 777 /user/jenkins'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown jenkins /user/jenkins'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/hive'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 777 /user/hive'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown hive /user/hive'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/root'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 777 /user/root'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown root /user/root'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/hue'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chmod -R 777 /user/hue'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -chown hue /user/hue'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib/hive'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib/mapreduce-streaming'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib/distcp'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib/pig'
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -mkdir -p /user/oozie/share/lib/sqoop'
+ ls '/usr/lib/hive/lib/*.jar'
+ ls /usr/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.15.1.jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar
+ su -s /bin/bash hdfs -c '/usr/bin/hadoop fs -put /usr/lib/hadoop-mapreduce/hadoop-streaming*.jar /user/oozie/share/lib/mapreduce-streaming'
作成されたディレクトリの確認
[root@cdh-train ~]# sudo -u hdfs hdfs dfs -ls -R /

YARNの起動

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

サンプルプログラムの実行(Word Count)

HDFSユーザに変更
sudo su - hdfs
データを作成し、HDFS上に配置
-bash-4.1$ echo "hoge fuga bar foo hoge fuga" > wordcount.txt
-bash-4.1$ hdfs dfs -mkdir -p /user/hdfs/input
-bash-4.1$ hdfs dfs -put wordcount.txt /user/hdfs/input
-bash-4.1$ hdfs dfs -cat /user/hdfs/input/wordcount.txt
hoge fuga bar foo hoge fuga
実行
-bash-4.1$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /user/hdfs/input/wordcount.txt /user/hdfs/output_wc
-bash-4.1$ hdfs dfs -text /user/hdfs/output_wc/*
bar 1
foo 1
fuga    2
hoge    2

Vagrantfileの編集

  • ブラウザから管理画面をみるための設定
#HDFS
config.vm.network "forwarded_port", guest: 50070, host: 50070
#ResourceManager
config.vm.network "forwarded_port", guest: 8088, host: 8088
#NodeManager
config.vm.network "forwarded_port", guest: 8042, host: 8042
#JobHistory
config.vm.network "forwarded_port", guest: 19888, host: 19888
問題

JobHistoryのポート、アドレスが違うのか、接続できない...