VagrantでCDHの擬似分散環境を構築するメモ
事前準備
- Virtual Boxのインストール: https://www.virtualbox.org/
- Vagrantのインストール: https://www.vagrantup.com/
- Vagrantの基本コマンド
vagrant box add <BOX_NAME> <URL> # boxの追加
vagrant box remove <BOX_NAME> # boxの削除
vagrant box list # boxのリスト
vagrant init <BOX_NAME> # boxから仮想マシンを初期化(VagrantFile作成)
vagrant up # 仮想マシンの起動
vagrant status # 仮想マシンの状態確認
vagrant halt # 仮想マシンの停止
vagrant destroy # 仮想マシンの削除
vagrant ssh # 仮想マシンにSSHでログイン
- Vagrant box
- box search page(official): https://atlas.hashicorp.com/boxes/search
- box url list: http://www.vagrantbox.es/
仮想マシンの作成
仮想マシン用のディレクトリを作成し、仮想マシンを初期化(Vagrantfile作成)
$ mkdir test
$ cd test
$ vagrant init
Vagrantfileの編集
Vagrant.configure(2) do |config|
config.vm.box = "nrel/CentOS-6.5-x86_64"
config.vm.hostname = "test"
config.vm.provider "virtualbox" do |vb|
vb.name = "test"
vb.memory = "2048"
end
end
仮想マシン起動、SSHログイン
$ vagrant up
$ vagrant ssh
OS基本設定
アップデート
$ sudo yum check-update
$ sudo yum -y update
不要サービス無効化
$ sudo chkconfig iscsi off
$ sudo chkconfig iscsid off
$ sudo chkconfig iptables off
$ sudo chkconfig ip6tables off
$ sudo chkconfig mdmonitor off
$ sudo chkconfig netfs off
$ sudo chkconfig nfslock off
$ sudo chkconfig postfix off
$ sudo chkconfig udev-post off
時刻設定
ハードウェアクロックの設定
$ echo 'zone="Japan"' > ./tmp_clock
$ sudo mv ./tmp_clock /etc/sysconfig/clock
タイムゾーンをJSTに変更
$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
ntpdインストール
$ sudo yum install ntp
ntp.nict.jpに同期するよう設定
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntp.nict.jp iburst
いったん同期
$ sudo ntpdate ntp.nict.jp
サービス起動
$ sudo service ntpd start
状態確認(*がついていればOK)
$ sudo ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-b3.nict.go. .NICT. 1 u 2 64 1 39.534 68.611 0.000
自動起動設定
$ sudo chkconfig ntpd on
ツールのインストール
screen
$ sudo yum install screen
git
$ sudo yum install git
EPEL
epel-releaseというパッケージをインストールすると、拡張パッケージがインストールできるようになる。以下で最新版を確認して使用する。
http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/repoview/epel-release.html
$ wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum localinstall epel-release-6-8.noarch.rpm
Java
OracleのJDKを入れたほうがいいという風潮があるようなので個別に入れる
Oracleのダウンロードページでは"Accept License Agreement"にチェックしないとダウンロードできないので、いったんローカルにダウンロードしてvagrantの仮想マシンとの共有フォルダに配置する
Oracle ダウンロードページ
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Linux x64向けRPMを取得(今回は jdk-8u60-linux-x64.rpm)
ホストマシンでvagrantの共有フォルダにダウンロードしたRPMを配置
(デフォルトではホストマシンでVagrantfileを格納しているディレクトリが仮想マシンの/vagrantとして共有されている)
仮想マシン上でrpmパッケージをインストール
$ sudo yum localinstall /vagrant/share/jdk-8u60-linux-x64.rpm
確認
$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
Scala
CentOSのレポジトリに含まれていないので、公式サイトからrpmをダウンロードしてインストールする
http://www.scala-lang.org/index.html
$ wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.rpm
$ sudo yum localinstall scala-2.11.7.rpm
sbtは以下のページを参考にyumのレポジトリファイルを追加してインストール
http://www.scala-sbt.org/0.13/tutorial/Installing-sbt-on-Linux.html
$ curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
$ sudo mv bintray-sbt-rpm.repo /etc/yum.repos.d/
$ sudo yum install sbt
# bintray--sbt-rpm - packages by from Bintray
[bintray--sbt-rpm]
name=bintray--sbt-rpm
baseurl=http://dl.bintray.com/sbt/rpm
gpgcheck=0
enabled=1
sbtの依存関係でopenjdkのjava(java-1.6.0-openjdk.x86_64)がインストールされてしまうので、alternativesでOracleのjavaが設定されていることを確認しておく
$ alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/java/jdk1.8.0_60/jre/bin/java
2 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
確認
$ scala -version
Scala code runner version 2.11.7 -- Copyright 2002-2013, LAMP/EPFL
Python
CentOS6.5にはpython2.6が入っている。2.7以降は別途個別にインストールする必要があるのでいったんそのまま使う。
$ python --version
Python 2.6.6
pip
EPELからインストール
$ sudo yum install python-pip
R
R本体
EPELからインストール
$ sudo yum install R
R Studio Server
RPMパッケージをダウンロードしてローカルインストール
$ wget https://download2.rstudio.org/rstudio-server-rhel-0.99.484-x86_64.rpm
$ sudo yum localinstall rstudio-server-rhel-0.99.484-x86_64.rpm
ポートフォワード設定 ※ホスト側で作業
Vagrantfile編集
# R Studio Server
config.vm.network "forwarded_port", guest: 8787, host: 8787
仮想マシンを再起動
$ vagrant reload
CDH
Hadoop(擬似分散)
yumレポジトリ追加
$ wget http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.repo
$ sudo mv cloudera-cdh5.repo /etc/yum.repos.d/
hadoop(擬似分散モード)インストール
$ sudo yum install hadoop-conf-pseudo
hdfsフォーマット
$ sudo su - hdfs
$ hdfs namenode -format
$ exit
hdfs起動
for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
hdfs初期設定スクリプト実行
$ sudo /usr/lib/hadoop/libexec/init-hdfs.sh
ファイルディスクリプタ:数の上限を増やす
* soft nofile 65536
* hard nofile 65536
Hive
hiveインストール
$ sudo yum install hive
metastore関連パッケージインストール
$ sudo yum install hive-metastore mysql-server mysql-connector-java
hive metastoreをmysqlに設定(参考)
$ sudo -u hive hdfs dfs -mkdir /user/hive/warehouse
$ sudo -u hive hdfs dfs -chmod 1777 /user/hive/warehouse
$ sudo cp /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/.
$ sudo service mysqld start
$ sudo chkconfig mysqld on
$ sudo /usr/bin/mysql_secure_installation
Enter current password for root (enter for none): <- 空のままENTER
Set root password? [Y/n] y
New password: <- mysqlのrootユーザのパスワード
Re-enter new password: <- 同上
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
$ cd /usr/lib/hive/scripts/metastore/upgrade/mysql
$ mysql -u root -p
mysql> create database metastore;
mysql> use metastore;
mysql> source hive-schema-1.1.0.mysql.sql;
mysql> create user 'hive'@'localhost' identified by 'mypassword';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'localhost';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit;
$ sudo vi /usr/lib/hive/conf/hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
<description>the URL of the MySQL database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mypassword</value>
</property>
hive-server2インストール
$ sudo yum install hive-server2
beeline使い方
$ beeline
beeline> !connect jdbc:hive2://localhost:10000
scan complete in 3ms
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: user
Enter password for jdbc:hive2://localhost:10000: pass
Connected to: Apache Hive (version 1.1.0-cdh5.4.7)
Driver: Hive JDBC (version 1.1.0-cdh5.4.7)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
+----------------+--+
1 row selected (0.213 seconds)
0: jdbc:hive2://localhost:10000> !quit
$
Spark
Sparkインストール
$ sudo yum install spark-core
$ sudo yum install spark-master
$ sudo yum install spark-worker
$ sudo yum install spark-history-server
$ sudo yum install spark-python
Sparkログレベル変更
$ sudo cp -p /etc/spark/conf/log4j.properties.template /etc/spark/conf/log4j.properties
# log4j.rootCategory=INFO, console
log4j.rootCategory=WARN, console
HBase
$ sudo yum install hbase
Mahout
$ sudo yum install mahout
Hue
$ sudo yum install hue
再起動
ポートフォワード設定 ※ホスト側で作業
Vagrantfile編集
# YARN ResourceManager, NodeManager
config.vm.network "forwarded_port", guest: 8088, host: 8088
config.vm.network "forwarded_port", guest: 50060, host: 50060
# HDFS NameNode, DataNode
config.vm.network "forwarded_port", guest: 50070, host: 50070
config.vm.network "forwarded_port", guest: 50075, host: 50075
# Spark Master, Worker, Driver, HistoryServer
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 8081, host: 8081
config.vm.network "forwarded_port", guest: 4040, host: 4040
config.vm.network "forwarded_port", guest: 18080, host: 18080
# Hue
config.vm.network "forwarded_port", guest: 8888, host: 8888
仮想マシンを再起動
$ vagrant reload
box化
vagrantで再利用可能なboxファイルを作成しておく。
※仮想マシン上で作業
$ sudo yum clean all
$ exit
※ホストOS側で作業
$ vagrant halt
$ vagrant package --output test_cdh5.box
boxの利用方法
vagrantにboxを追加
$ vagrant add test_cdh5 test_cdh5.box
仮想マシン用のディレクトリを作成して初期化
$ mkdir test_cdh5
$ cd test_cdh5
$ vagrant init
Vagrantfileを編集
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
# boxの指定
config.vm.box = "tlab_cdh5"
# hostnameの指定
config.vm.hostname = "test2"
# ポートフォワードの指定
## R Studio Server
config.vm.network "forwarded_port", guest: 8787, host: 8787
## YARN ResourceManager, NodeManager
config.vm.network "forwarded_port", guest: 8088, host: 8088
config.vm.network "forwarded_port", guest: 50060, host: 50060
## HDFS NameNode, DataNode
config.vm.network "forwarded_port", guest: 50070, host: 50070
config.vm.network "forwarded_port", guest: 50075, host: 50075
## Spark Master, Worker, Driver, HistoryServer
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 8081, host: 8081
config.vm.network "forwarded_port", guest: 4040, host: 4040
config.vm.network "forwarded_port", guest: 18080, host: 18080
## Hue
config.vm.network "forwarded_port", guest: 8888, host: 8888
# Virtualboxの設定
config.vm.provider "virtualbox" do |vb|
vb.name = "test2"
vb.memory = "2048"
end
end
仮想マシンの起動(初回起動時に仮想マシン作成)
$ vagrant up
SSHログイン
$ vagrant ssh
仮想マシン上で作業
[vagrant@test2 ~]$