LoginSignup
9
9

More than 5 years have passed since last update.

PrestoをCloudera Manager上で管理できるようにしてみた話

Last updated at Posted at 2015-12-13

こちらの記事はCloudera Manager Advent Calendar 2015の13日目です。

はじめに

Cloudera Manager(以下CMと記述)を利用するとHadoopやHive, HBaseはもちろん、SparkやKafkaなどHadoopエコシステムを支える様々なプロダクトを簡単にインストール、運用できて大変便利ですね。
とはいえ、Hadoop上で動くプロダクトはどんどん新しい物が出ておりまして、中には使ってみたいものがCMでインストール出来ないものがあるのも事実です。
例えばPrestoなんかとても便利に使えますが、CMでは管理ができません。まぁChefやPuppetなどを使って構成管理をするのもいいのですが、普段からCMを使っているとそこでなんでも管理したくなるものではないでしょうか?
実はCloudera Managerではそのような要望を満たすために、独自のParcel、CSDを作成できる機能を擁しています。
今回、簡単ではありますがPrestoをCM上で運用できるようにしてみたので、そちらを紹介します。

なぜPrestoを使いたくなったか

ふだんHadoopに蓄積したログなどを分析するのにはHue上からHive、Impala等を利用して分析するので十分なのですが、re:dashを使って日々のKPI確認を可視化しようとした場合、グラフや表にIDとその値だけ表示させてもぱっと見で何を表しているのか分かりづらかったりします。なのでMySQLにあるマスターデータとjoinしたいなと考えるとHiveとMySQLを同時にjoinできるPrestoへ白羽の矢が立ちました。

Parcelとは

CMでdeployされるHadoopなどは、rpmやdebパッケージではなく、独自の(といってもtgzで固めたやつ)Parcelというものが使われています。ドキュメントはこちらです。
ParcelはCloudera Manager Serverの/opt/cloudera/parcel-reposで管理されており、それが各サーバー配布されます。
ちなみに、Parcel解凍先である/opt/cloudera/parcelsを眺めていると、バージョンアップ、ダウングレードの際には解凍したParcelのディレクトリのSymlinkを貼り替えているのだなぁというのが見て取れます。

CSDとは

CSDはCustom Service Descriptorsの略でして、CM上で前述のオリジナルParcelを利用してシステムを起動や停止、再起動を行ったり、設定を行うための内容が定義されたものです。定義はjsonやシェルスクリプトで書いていきます。
ドキュメントはこちら

Cloudera Manager版Prestoを使ってみる

というわけで、機能はかなり制限されておりますが、拙作のCM版Prestoを実際に使ってみるための手順です。

Presto-Parcelの作成と設置

こちらのリポジトリ(presto-parcel)をcloneしてmvn packageとしてあげるとtarget/repositoryディレクトリ以下にparcelができています。

設置

本来であれば何らかのwebサーバをたててあげて、Cloudera公式のように各ディストリビューションのparcelとmanifest.jsonを参照できるようにし、CMのRemote Parcel Repository URLsに追加してあげるとDLが可能となります。
この画面です
54836557abceff6480e8258fd256f478.png

わざわざwebサーバをたてるのが面倒な場合、Cloudera Manager Serverの/opt/cloudera/parcel-repo/に自分のディストリビューションのparcelと、ファイル名.shaというsha1sumが書かれたファイルの2つを設置すれば、CMのParcel一覧画面に表示されます。

$ ls -lah /opt/cloudera/parcel-repo/
略
-rw-rw-r-- 1 cloudera-scm cloudera-scm 576M Dec 13 22:18 PRESTO-0.125.presto0.1-el6.parcel
-rw-rw-r-- 1 cloudera-scm cloudera-scm   41 Dec 13 22:39 PRESTO-0.125.presto0.1-el6.parcel.sha
$ cat PRESTO-0.125.presto0.1-el6.parcel.sha
489a91986a6dc8c27d3317bc61adc3cc157da85d

追加がうまくいくと下記のように配布可能Parcelに表示されるはずです。
1fd89bb5cad447e6396ef1cc8fac0526.png

表示されましたら他のparcelと同様に、配布してあげればOKです

Presto-CSDの作成と設置

parcel同様にこちらのリポジトリ(presto-csd)をcloneしてmvn packageしてあげるとtargetディレクトリ以下にCSD用のJARが出来上がります。

CSDは/opt/cloudera/csdにJARを設置し、cloudera-scmユーザーで読み込み可能にしてあげます。

$ ls -la /opt/cloudera/csd/
total 16
drwxr-xr-x 2 cloudera-scm cloudera-scm 4096 Dec 13 06:34 .
drwxr-xr-x 6 cloudera-scm cloudera-scm 4096 Dec 13 06:34 ..
-rwxr-x--- 1 cloudera-scm cloudera-scm 5515 Dec 13 06:34 PRESTO-0.1.jar

Cloudera Manager Serverを再起動すると、サービス追加が可能となります。

10a9cae57fc0e51d159639ade23b50e8.png

Prestoの文字が見えますね。
あとはよしなに設定するとPrestoが実行可能となるはずです。

ParcelとCSDの開発について

Parcelの用意についてはわりと単純で、配布したいプロダクトに必要なものをまるっとgzで固めてあげればOKです。
(ちょっとJSONや環境変数を書く必要がありますが…)
今回Presto用のPacelを作る上で、JDK8が必要だったため、Parcel内にJDK8も同梱するようにしました。
CDH5.3からCDHもJDK8をサポートするようになったので、すでにJDK8下でCloudera Managerが実行されていれば同梱しなくても良いかもしれません。
CSDの準備については、CM上で各種設定などを定義するservice.sdlの作成と各コマンドの内容を定義するシェルスクリプトの作成がかなり複雑になります。
今回作成した際の条件として、元のPrestoをいじらないでどうにかする、というのを掲げていたのでかなり無理をしています。また、現時点でこのPrestoで参照できるCatalogはHiveとMySQLのみなので、もうちょいなんとかしないとなぁという感じです。
なお、CSDのサンプルとしてClouderaのcm_csdsというリポジトリが大変参考になりましたので、見てみると良いかなと思います。
開発中に、作成したParcelとCSDの構成が問題ないかどうかは、Clouderaのcm_extリポジトリのvalidatorが利用可能ですので、ビルド→validateを繰り返して見るといいのではないかと思います。

最後に

今回CMで管理できるPrestoを作ろうと思ったきっかけはCloudera Managerで手軽にNorikraを試す | nagaseyasuhito Daily works.という記事を見て思いつきました。今回のParcel, CSDを作成するにあたってかなり参考にさせていただきまして、この場を借りて御礼申し上げます。
また、最近のCSD事情としてChange Logを見てみると、CM 5.4からモニタリングの定義ができるようになったようですよ!(申し訳ありませんが現時点でこちらは対応していません…)
使ってみた感想、プルリクエストなどお待ちしております。また、StormのParcel, CSDを作った方とかいらっしゃいましたらぜひ教えて下さい!

9
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9