目的
centos7にcloudera managerをインストール〜起動までを検証する。
参考
Cloudera Enterprise 6.1.x Cloudera Installation Guide
https://www.cloudera.com/documentation/enterprise/latest/topics/installation.html
検証環境
- AWS Lightsail
- プラットフォーム:Centos7 OSのみ
- リソース
- CPU: 2vCPU、 メモリ:8GB
インストール
SELinuxの無効化
# SELinuxの状態を確認
$ getenforce
- Enforcing:有効
- Disabled:無効
# SELinuxの設定ファイルを変更
$ sudo vi /etc/selinux/config
SELinuxの設定ファイルの内容を変更して保存する。
SELINUX=enforcing
↓
SELINUX=disabled
# 再起動する
$ sudo reboot
# 再起動後にSELinuxの状態を確認する
$ getenforce
Firewallの無効化
firewalldがインストールされていない場合は省略する
# 状態確認
$ systemctl status firewalld
# Firewallが動作している場合、停止する
$ sudo systemctl stop firewalld
# 自動起動を無効化
$ sudo systemctl disable firewalld
# 状態確認
$ systemctl status firewalld
NTPの有効化
centos7ではデフォルトのNTPサービスとしてntpに代わりにchronyが採用されている。
ntpとchronyは同時に利用できないのでどちらかを利用することになる。
chronyの場合、システム時刻とハード時刻を自動で同期できるため便利。
今回はntpを利用する手順とした。
# chronyの状態を確認
$ systemctl status chronyd
# chronyが動作している場合、停止する
$ sudo systemctl stop chronyd
# chronyの自動起動を無効化する
$ sudo systemctl disable chronyd
# chronyの状態を確認
$ systemctl status chronyd
# NTPのインストール
$ sudo yum install ntp -y
# 中略
Installed:
ntp.x86_64 0:4.2.6p5-28.el7.centos
Dependency Installed:
autogen-libopts.x86_64 0:5.18-5.el7
ntpdate.x86_64 0:4.2.6p5-28.el7.centos
Complete!
# NTPの設定
# 設定例:server xxx.xxx.xxx.xxxx iburst
$ sudo vi /etc/ntp.conf
# NTPの開始
$ sudo systemctl start ntpd
# NTPの自動起動有効化
$ sudo systemctl enable ntpd
# 状態確認
$ systemctl status ntpd
# 時刻の同期
$ sudo ntpdate -u xxx.xxx.xxx.xxx
# システム時刻とハードウェア時刻を同期
$ sudo hwclock --systohc
NSCDの設定(任意)
nscdはDNS問い合わせをキャッシュするデーモン。
DNS問い合わせの負荷が減る一方でよく気をつけて利用しないとネットワーク関連の
トラブルが発生することがあるらしい。
今回はnscdを利用しないが、インストール時の手順は以下の通り。
# NSCDのインストール
sudo yum install nscd -y
# 中略
Installed:
nscd.x86_64 0:2.17-260.el7_6.3
Dependency Updated:
glibc.x86_64 0:2.17-260.el7_6.3
glibc-common.x86_64 0:2.17-260.el7_6.3
Complete!
# NSCDの有効化
$ sudo systemctl start nscd
# NSCDの自動起動有効化
$ sudo systemctl enable nscd
# 状態確認
$ systemctl status nscd
スタートアップサービスの確認
よけいなサービスが上がっていないかどうか確認する。
詳しくはインストールガイドを参照。
$ systemctl list-unit-files --type service | grep active
ディスクの確認
$ sudo fdisk -l
Disk /dev/xvda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000acf0a
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 125829086 62913519+ 83 Linux
【参考】ディスクのフォーマット方法
HDFSで使用するファイルシステムとしてextを利用する場合は
性能劣化を抑止するためにオプション指定してフォーマットすることが推奨されている。
xfsであればフォーマット時に特別なオプションは必要としない。
# フォーマット例
mkfs –t xfs /dev/sdb1
ディスクマウントの命名規則
管理を容易にするために、データノードのすべてのディスクは以下のような
名称でマウントすることが推奨されている。
/data1
/data2
/data3
/data4
ホスト名の設定
# ホスト名の確認
$ hostname
# ホスト名の確認2
$ cat /etc/hostname
# ホスト名を設定
# ホスト名をfoo-1.example.comに設定する場合
$ sudo hostnamectl set-hostname foo-1.example.com
# ホスト名を確認
$ hostnamectl
$ cat /etc/hostname
hostsファイルの設定
# hostsファイルの確認
$ cat /etc/hosts
# hostsファイルにクラスタの設定を追加する
# 各ホストをIPとFQDNで設定する
$ sudo vi /etc/hosts
設定例
・/etc/hostsには必ずFQDN名で設定する必要がある
・別名(短い名前)はクラスタ内でユニークとする
1.1.1.1 foo-1.example.com foo-1
2.2.2.2 foo-2.example.com foo-2
3.3.3.3 foo-3.example.com foo-3
4.4.4.4 foo-4.example.com foo-4
# hostnameコマンドの出力と一致することを確認
$ uname -a
# IPを確認する
$ ifconfig
参考:centos7のネットワーク設定方法
https://qiita.com/taro0219/items/8d3be39c5cb882d1ba5d
Pythonの設定
cloudera managerではPython3.xはサポートされていないので
2.7がインストールされていることを確認する。
# 状態確認
$ python --version
# インストールされていなければインストールする
$ sudo yum install python27
wgetのインストール
$ sudo yum install wget -y
...
Installed:
wget.x86_64 0:1.14-18.el7
Complete!
リポジトリの設定
インターネットに接続できない環境では別途イントラ内に
リポジトリサーバを用意する必要がある。
最小限のインストールの場合、cm6とparcelを用意する。
イントラネット内でサーバを用意する方法については公式のインストールガイドに
httpdとSimpleHTTPServerによる方法が紹介されている。
レスポンスの点から推奨はhttpd
# cloudera-managerのrepoファイルの取得
$ sudo wget https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/
# GPG-KEYのインポート
$ sudo rpm --import https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPM-GPG-KEY-cloudera
JDKのインストール
- JDKは64bitのバージョンにする必要がある
- クラスタ内の各ノードは同じバージョンのJDKをインストールする必要がある
- JDKは/usr/java/jdk-versionにインストールする
- 手動でインストールするか、cloudera-managerのリポジトリからJDKをインストールする
# javaのインストール
# cloudera-mangerのリポジトリからJDKをインストールする
$ sudo yum install oracle-j2sdk1.8 -y
Running transaction
Installing : oracle-j2sdk1.8-1.8.0+update141-1.x86_64 1/1
Verifying : oracle-j2sdk1.8-1.8.0+update141-1.x86_64 1/1
Installed:
oracle-j2sdk1.8.x86_64 0:1.8.0+update141-1
Complete!
Cloudera Managerのインストール
$ sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server -y
Installed:
cloudera-manager-agent.x86_64 0:6.1.0-769885.el7
cloudera-manager-daemons.x86_64 0:6.1.0-769885.el7
cloudera-manager-server.x86_64 0:6.1.0-769885.el7
Dependency Installed:
MySQL-python.x86_64 0:1.2.5-1.el7
apr.x86_64 0:1.4.8-3.el7_4.1
apr-util.x86_64 0:1.5.2-6.el7
at.x86_64 0:3.1.13-24.el7
avahi-libs.x86_64 0:0.6.31-19.el7
bc.x86_64 0:1.06.95-13.el7
bind-libs.x86_64 32:9.9.4-73.el7_6
bind-utils.x86_64 32:9.9.4-73.el7_6
centos-logos.noarch 0:70.0.6-3.el7.centos
cups-client.x86_64 1:1.6.3-35.el7
cups-libs.x86_64 1:1.6.3-35.el7
cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7
cyrus-sasl-plain.x86_64 0:2.1.26-23.el7
ed.x86_64 0:1.9-4.el7
fuse.x86_64 0:2.9.2-11.el7
fuse-libs.x86_64 0:2.9.2-11.el7
httpd.x86_64 0:2.4.6-88.el7.centos
httpd-tools.x86_64 0:2.4.6-88.el7.centos
keyutils-libs-devel.x86_64 0:1.5.8-3.el7
krb5-devel.x86_64 0:1.15.1-37.el7_6
libcom_err-devel.x86_64 0:1.42.9-13.el7
libkadm5.x86_64 0:1.15.1-37.el7_6
libselinux-devel.x86_64 0:2.5-14.1.el7
libsepol-devel.x86_64 0:2.5-10.el7
libverto-devel.x86_64 0:0.2.5-4.el7
libxslt.x86_64 0:1.1.28-5.el7
m4.x86_64 0:1.4.16-10.el7
mailcap.noarch 0:2.1.41-2.el7
mailx.x86_64 0:12.5-19.el7
mod_ssl.x86_64 1:2.4.6-88.el7.centos
openssl-devel.x86_64 1:1.0.2k-16.el7
patch.x86_64 0:2.7.1-10.el7_5
pcre-devel.x86_64 0:8.32-17.el7
perl.x86_64 4:5.16.3-294.el7_6
perl-Carp.noarch 0:1.26-244.el7
perl-Encode.x86_64 0:2.51-7.el7
perl-Exporter.noarch 0:5.68-3.el7
perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7
perl-Getopt-Long.noarch 0:2.40-3.el7
perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7
perl-Pod-Escapes.noarch 1:1.04-294.el7_6
perl-Pod-Perldoc.noarch 0:3.20-4.el7
perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7
perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
perl-Socket.x86_64 0:2.010-4.el7
perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7
perl-Time-Local.noarch 0:1.2300-2.el7
perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-294.el7_6
perl-macros.x86_64 4:5.16.3-294.el7_6
perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7
postgresql-libs.x86_64 0:9.2.24-1.el7_5
psmisc.x86_64 0:22.20-15.el7
python-psycopg2.x86_64 0:2.5.1-3.el7
redhat-lsb-core.x86_64 0:4.1-27.el7.centos.1
redhat-lsb-submod-security.x86_64 0:4.1-27.el7.centos.1
spax.x86_64 0:1.5.2-13.el7
time.x86_64 0:1.7-45.el7
zlib-devel.x86_64 0:1.2.7-18.el7
Dependency Updated:
bind-libs-lite.x86_64 32:9.9.4-73.el7_6
bind-license.noarch 32:9.9.4-73.el7_6
e2fsprogs.x86_64 0:1.42.9-13.el7
e2fsprogs-libs.x86_64 0:1.42.9-13.el7
krb5-libs.x86_64 0:1.15.1-37.el7_6
libcom_err.x86_64 0:1.42.9-13.el7
libselinux.x86_64 0:2.5-14.1.el7
libselinux-python.x86_64 0:2.5-14.1.el7
libselinux-utils.x86_64 0:2.5-14.1.el7
libsepol.x86_64 0:2.5-10.el7
libss.x86_64 0:1.42.9-13.el7
openssl.x86_64 1:1.0.2k-16.el7
openssl-libs.x86_64 1:1.0.2k-16.el7
zlib.x86_64 0:1.2.7-18.el7
Complete!
Auto-TLSの設定(任意)
Auto-TLS(https)については、clouderaクラスタ構築後に後から設定することはできない。
Auto-TLSを導入するとcloudera managerへのアクセスがTLSで暗号化された通信となる。
ローカル環境やイントラネット以外では設定すべきだろう。
# TLSの設定を行う
$ sudo JAVA_HOME=/usr/java/jdk1.8.0_141-cloudera /opt/cloudera/cm-agent/bin/certmanager setup --configure-services
Databaseのインストール
各コンポーネントを動作させるためにはDatabaseのインストールが必要
サポートされているDatabaseは以下。今回はmariaDBを利用する。
- MariaDB
- MySQL
- PostgreSQL
- Oracle Database
# MariaDBのインストール
$ sudo yum install mariadb-server -y
Installed:
mariadb-server.x86_64 1:5.5.60-1.el7_5
Dependency Installed:
libaio.x86_64 0:0.3.109-13.el7
mariadb.x86_64 1:5.5.60-1.el7_5
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBD-MySQL.x86_64 0:4.023-6.el7
perl-DBI.x86_64 0:1.627-4.el7
perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7
perl-PlRPC.noarch 0:0.2020-14.el7
Dependency Updated:
mariadb-libs.x86_64 1:5.5.60-1.el7_5
Complete!
# MariaDBが動作していたら停止する
$ sudo systemctl stop mariadb
以下のファイルが存在する場合、/var/lib/mysql以外の場所にファイルをバックアップする
/var/lib/mysql/ib_logfile0
/var/lib/mysql/ib_logfile1
# MariaDBのデフォルト設定ファイルをバックアップ
$ sudo cp /etc/my.cnf /etc/my.cnf.bak
公式の情報をもとにMariaDBの設定ファイルを更新する
- innodb_buffer_pool_sizeのサイズがメモリサイズ以上だとmariadbの起動に失敗する模様
- AWSのコンソールから貼り付けると設定ファイルの先頭の方が切れることがあるので注意
https://www.cloudera.com/documentation/enterprise/6/6.1/topics/install_cm_mariadb.html
# MariaDBの設定ファイル更新
$ sudo vi /etc/my.cnf
# 設定ファイル確認
$ cat /etc/my.cnf
# MariaDBの自動起動を有効化する
$ sudo systemctl enable mariadb
# MariaDBを開始する
$ sudo systemctl start mariadb
# MariaDBのセキュリティ設定をする
$ sudo /usr/bin/mysql_secure_installation
...
Set root password? [Y/n] Y
...
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
...
MariaDBのためにJDBCドライバをインストールする
cloudera managerではversion 5.1のドライバが推奨されている。
# JDBCをダウンロードする
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
# ダウンロードファイルを展開する
$ tar zxvf mysql-connector-java-5.1.46.tar.gz
# JDBCのjarファイルを移動する
$ sudo mkdir -p /usr/share/java/
$ cd mysql-connector-java-5.1.46
$ sudo cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
MariaDBの設定を行う
$ mysql -u root -p
-- Databaseの登録状態を確認
SHOW DATABASES;
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- 任意のパスワード(<password>を置き換え)でユーザを作成する
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON metastore.* TO 'metastore'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '<password>';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '<password>';
-- Database登録結果の確認
SHOW DATABASES;
-- <user>の権限を確認
SHOW GRANTS FOR '<user>'@'%';
exit;
Cloudera Managerデータベースの設定
$ sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
SSHの設定
インストールを実行するノードからクラスタの全ノードへSSHアクセスができるように
しておく必要がある。
クラスタ内のパスワードを同じにするか、同じ公開鍵を受け入れるように設定する。
ここで作成した秘密鍵は以降のCloudera Managerのインストール時に使用する。
# rootユーザで公開鍵を作成する
$ cd
# ssh-keygenを実行した後にパスワードを聞かれるがここではパスワードなしとする
$ ssh-keygen
# homeディレクトリの.sshディレクトリの下にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成される。
$ ls -l ~/.ssh
# id_rsa.pubをクラスタ内の各ノードにコピーする
# 以下はSSHを受け入れる各ノードのrootで実施する
$ cd
# フォルダが無ければ作成する
$ mkdir ~/.ssh
# パーミッションを正しく設定しないとsshが動作しないので設定
$ chmod 700 ~/.ssh
# 公開鍵をauthorized_keysに登録する
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
# 登録結果を確認
$ cat ~/.ssh/authorized_keys
# パーミッションを正しく設定しないとsshが動作しないので設定
$ chmod 600 ~/.ssh/authorized_keys
# SSHの設定ファイルを確認する
# PermitRootLogin yesがコメントアウトされていないことを確認する
$ cat /etc/ssh/sshd_config
# SSHの再起動をする
$ sudo systemctl restart sshd
CDHのインストール
# Cloudera Manger Serverを開始する
$ sudo systemctl start cloudera-scm-server
# Cloudera Manger Serverが完全に起動するまで数分かかるのでログを確認する
$ sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
以下のログが表示されたら準備が完了
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
Cloudera Managerの設定
パブリックIPを確認する
・AWSホーム画面のインスタンス→管理から確認できる
ファイアウォールの設定
・AWSホーム画面のインスタンス→管理→ネットワークタブ→ファイアウォールでアクセスするポート7180を開放
ブラウザからCloudera Manager Serverへアクセスする。
Auto-TLSを設定している場合は、httpsのページにリダイレクトされる。
http://xxx.xxx.xxx.xxx:7180
初期ユーザとパスワードはadmin/admin
ログイン後にパスワードを変更する。