Distributed computing (Apache Spark, Hadoop, Kafka, ...) Advent Calendar 2019 の 3日目(12/3)の記事になります!
今日は、 昨日 の続編として、GCP環境にCloudera Altus Directorを導入する手順となります。
作成する環境はこんな感じです。
手順1)GCPのプロジェクトを準備
GCPコンソールからプロジェクト名を入力して作成します。ここでは「microadprj」とします。
手順2)GCPのアカウント周りの準備
- IAMからサービスアカウントを作成し、「キーを作成」します。
秘密鍵を含むファイルをJson指定でダウンロードしておきます。(★) - 作成したサービスアカウントに、 役割「Compute 管理者」を付与します。 1
- ssh-keygenコマンドでキーペア(★★)を作成し、作成した公開鍵はGCEのメタデータに登録しておきます。
手順3)Director用GCEインスタンスを作成
GCPコンソールからGCEインスタンスを一つ作成します。
- スペック: お試しにはn1-standard-1以上、本番ならn1-standard-2以上が推奨されています。
- ブートディスク: お試しには標準の永続ディスク、本番ならSSDが推奨です。
- プリエンプティブルVMの利用: 必ずオフ(デフォルト)にしましょう。
という訳で、下記のようなインスタンスを作成しました。
名前 : cloudera-director
リージョン:asia-northeast1
ゾーン: asia-northeast1-b
マシンタイプ:n1-standard-2 (vCPU x 2、メモリ 7.5 GB)
ブートディスク:CentOS7 標準の永続ディスク10GB
IDとAPIへのアクセス:デフォルト(Compute Engine default service account)
ファイアウォール:HTTPもHTTPSもチェックなし
プリエンプティブルVMの利用:オフ
手順4)Director用GCEインスタンスにDirectorServerとClientをインストール
前項で作成したインスタンスにSSHログインしOpenJDKをインストールします。
$ sudo yum install java-1.8.0-openjdk
DirectorServerとClientをインストールしてDirectorServerを起動します。
$ sudo yum -y install wget
$ cd /etc/yum.repos.d/
$ sudo wget "http://archive.cloudera.com/director6/6.2/redhat7/cloudera-director.repo"
$ sudo yum install cloudera-director-server cloudera-director-client
$ sudo systemctl start cloudera-director-server
$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld
無事起動すれば、7189ポートがListenします。起動しない場合は次のようにしてログを見ると良いです。
$ sudo less /var/log/cloudera-director-server/application.log
手順5)ローカルPCからSOCKSプロキシ経由でDirector画面を見る
セキュリティへの配慮でClouderaはSOCKSプロキシ経由でDirector画面を見る事を推奨しています。
まずはMacのTerminalからSOCKSプロキシ起動 2
$ gcloud compute --project "microadprj" ssh --zone "asia-northeast1-b" "cloudera-director" --ssh-key-file=~/ClouderaDirector/ssh/cloudera-director --ssh-flag="-D" --ssh-flag="1080" --ssh-flag="-N"'
MacのTerminalからChrome起動 2
$ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --user-data-dir="$HOME/chrome-proxy-profile" --proxy-server="socks5://localhost:1080"
このChrome画面からhttp://(Director用インスタンスのローカルIP):7189/ のURLを叩くと、 Welcome to Cloudera Altus Director
画面が表示されます。
手順6)DirectorおよびCM用のデータベースサーバを準備
Director及びCMのサービスと、そこで情報を保持するためのデータベースのリソースを分離したいので、外部データベースサーバを準備します。今回はMySQLを利用しました。
- GCEインスタンスを作成
下記のように作成しました。
名前 : cloudera-db
リージョン:asia-northeast1
ゾーン: asia-northeast1-b
マシンタイプ:n1-standard-2(vCPU x 2、メモリ 7.5 GB)
ブートディスク:CentOS7 標準の永続ディスク20GB
IDとAPIへのアクセス:デフォルト(Compute Engine default service account)
ファイアウォール:HTTPもHTTPSもチェックなし
プリエンプティブルVMの利用:オフ
-
MySQLをインストールし起動
手順は[Install and Configure MySQL for Cloudera Software | 6.3.x | Cloudera Documentation]
(https://docs.cloudera.com/documentation/enterprise/6/latest/topics/cm_ig_mysql.html#cmig_topic_5_5) の通りです。 -
MySQLに特権DBアカウントを作成(デプロイ用)
DirectorがCMやCDHクラスタをデプロイする際には、DirectorがMySQLにDBを自動作成するので、特権アカウントを利用します。
mysql> grant all on *.* to 'privilegeduser'@'%' identified by '適宜';
- MySQLにDirector用DBとDBアカウントを作成
Director用に、専用アカウントとDBを用意します。
mysql> create database director_db DEFAULT CHARACTER SET utf8;
mysql> grant all on director_db.* TO 'directoruser'@'%' IDENTIFIED BY '適宜';
手順7)DirectorからCMをデプロイ
ここからDirectorを使ってデプロイを進めます。
Environment の作成
手順5) で表示されたWelcome to Cloudera Altus Director
画面にて、チェックを入れてContinue
を押下します。ログイン画面が出てきたら、Username、Passwordともadminでログインし、Add Environment
ボタンを押下します。Add Environment
画面になりますので、以下のように入力します。
- Environment name: 環境名を適宜入力します。
- Project ID : 手順1)で作成したプロジェクト名「microadprj」を入力。
- Cloud provider: Google Cloud Platform
- Client ID JSON Key :
手順2)でダウンロードしたJsonファイル(★)を選択します。この中にはサービスアカウントの秘密鍵が含まれます。 - SSH credentials:
-
Username
はこれからDirectorが作成するインスタンスにSSHログインする際のアカウント名です。適当なものを入力します。 -
Private Key
は手順2)で作成したキーペア(★★)の秘密鍵です。(GCEのメタデータ に登録した公開鍵と対になるもの)
-
Continue
を押下すると、Environmentが作成されます。
Deployment=CM の作成
次に、Advanced Setup
を選択します。3
CM用のインスタンステンプレートとして、下記の設定で作成します。
- Instance Template name: template_CM など適宜
- Machine Type : n1-standard-4 を選択
- Image Alias or URL:「https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20190515」 4
- Tags : centos7 など適当に
- Zone : asia-northeast1-a などインスタンスを展開したいゾーンを指定
- Instance name prefix: cloudera-manager などGCEインスタンス名のプレフィクスを指定
- Boot Disk Type : Standard ※デフォルトだとローカルSSDなので注意!
- Data Disk Count: 0
- Use Preemptible Instances: オフ
「Save Changes」を押下するとAdd Deployment
画面に戻ります。
-
License Type: Expressを選択
-
Database Server:
Register Existing Database Server
を選択し、手順6)で準備したデータベースサーバ、特権アカウントの情報を入力
Save Database Server
を押下するとAdd Deployment
画面に戻ります。
Cloudera Manager Configurations
ボタンを押下するとCloudera Manager Configurations
画面が出ます。下記のように設定します。
- Host Monitor firehose_heapsize 1073741824
- Service Monitor firehose_heapsize 1073741824
Save Changes
を押下するとAdd Deployment
画面に戻ります。
CMログイン画面に設定したいユーザ名とパスワードを入力します。
Continue
を押し同意画面を同意すると、GCEインスタンスの生成とCMのインストールが始まります。画面はAdd Cluster
画面に遷移します。
GCEインスタンスが追加され、Cloudera ExpressのDirectorバージョン6.2 に合わせた最新版 が入ります。5
手順8)DirectorからCDHクラスタをデプロイ
-
Add Cluster
画面でCluster名を入力、CDHのバージョンを入力します。「6」と入れておくと、Directorバージョンに合わせた最新版 が入ります。6
-
Services
から入れたいサービスを選びます。 -
Instance groups
エリアで、インスタンス作成する台数とインスタンステンプレートを選択します。インスタンステンプレートを作成する場合はCreate New Instance Template
を選択し、手順7)で実施した要領でインスタンステンプレートを作成します。 -
Continue
を押し同意画面を同意すると、GCEインスタンスが追加され、CDHクラスタのデプロイが始まります。
手順9)CDHクラスタの接続確認
Gatewayからhdfsやbeelineコマンドで確認します。
手順10)DirectorのDBをMySQLに載せ替える
デフォルトだと、組み込みのH2というDBに情報を持っていますが、本番利用では推奨されていません。
手順6)で用意したMySQLのDBに載せ替えます。
- cloudera-directorのインスタンスにSSHしDirectorを停止します。
# systemctl stop cloudera-director-server
-
MySQL JDBC Driver のインストール
Installing the MySQL JDBC Driver - Using MySQL for Altus Director Server | 6.3.x | Cloudera Documentation の通りです -
/etc/cloudera-director-server/application.properties を編集
Configuring Altus Director Server to use the MySQL Database - Using MySQL for Altus Director Server | 6.3.x | Cloudera Documentation の通りです -
cloudera-directorでDBコピースクリプトを流す
Migrating the Altus Director Database | 6.3.x | Cloudera Documentation の通りです -
Directorを起動します
# systemctl start cloudera-director-server
あとはDirectorの動作確認をします。
手順としては以上になります。お役に立てれば幸いです。
ここまでお読み頂き有り難うございました。
-
サービスアカウントには権限をつける必要があるはずなのですが、Clouderaのドキュメントには言及が見当たりませんでした。AWSのCreating AWS Identity and Access Management (IAM) Policies | 6.3.x | Cloudera Documentation を参考にし、GCEの管理者権限を持たせれば十分と判断し付与しています。が厳密には権限オーバーと思われます。 ↩
-
Simple SetupはGCPではサポートされていませんでした。
するとAdd Deployment
画面になります。
Deployment名を「CM62」など適宜入力後、Instance Template
でCreate New Instance Template
を選択しインスタンステンプレートを作成します。 ↩ -
Director6.2.0では、Image Aliasの選択肢にはcentos6とrhel6しか出て来なかったので、URLを指定しています。6.3系では解消されていると思われます。
参考:Solved: Re: Deploying Centos 7 on GCE - Cloudera Community ↩ -
CMのバージョンを指定したい場合は、「Override default Cloudera Manager repository」にチェックを入れ、RepositoryのURLを入力します。 ↩
-
CDHのバージョンを指定したい場合は、画面下方の「Configurations (optional)」を展開し、「Override default parcel repositories」にチェックを入れ、RepositoryのURLを入力します。 ↩