こんにちは、サイオステクノロジー 水倉です。
引き続き、HDInsight の Hadoop クラスターです。
前回は CUI で Hive クエリを実行してみましたので、今回は GUI で実行したいと思います。
GUI には Apache Ambari を使用します。
前回と同じクラスター、テストデータを使用します。手順は「HDInsight Hadoop #1 Hive クエリ実行 (CUI編)」を参考にしてください。
Apache Ambari とは?
Hadoop クラスターの運用監視ツールで、クラスターのインストール・構成・監視・ジョブ実行機能等が Web UI、REST API で提供されます。
主な機能を挙げてみます。
- クラスターのリソース状況が一望できるダッシュボード
- ノードの起動・停止
- 設定変更、及び設定のバージョン管理 (ノードのJavaヒープサイズ変更等)
- 監視・通知
- スタック管理 (Spark、Kafka など新たなサービスの導入)
- ビュー
- YARN のキュー管理
- Tez が生成した DAG (Directed Acyclic Graph : 有向非巡回グラフ ) の表示
- Hive クエリの作成、実行、及び実行結果表示
- Pig スクリプトの作成、実行、及び実行結果表示
- プラグインによる機能拡張
HDInsight の Linux クラスター (※1) ではデフォルトで Ambari が導入済みのため、すぐに利用可能です。
今回ははじめに Hive クエリ関連の機能を動かして、その後 Ambari の機能概要を簡単に紹介していきます。
(※1) 余談ですが、Windows クラスターは HDI 3.3 で廃止が発表されています (HDI 3.3 は既にサポート終了し、2017年7月31日で非推奨)
Ambari Hive ビュー
Ambari Web UI へのアクセス
Azure ポータルから 「HDInsight クラスター > Overview>Ambari Views」を選択します。
認証ダイアログが表示されるので、ユーザー名、パスワードを入力し、「ログイン」します。
この時、資格情報を誤って入力した場合、同一セッションでは認証ダイアログが表示されず、再度アクセスしても 403 エラーとなるのでご注意ください。ブラウザを起動し直すなど、別セッションで再度認証する必要があります。
資格情報にはクラスター作成時に指定したクラスターログインユーザー名、パスワードを指定します。
無事認証されると、クラスターリソース状況のダッシュボードが表示されます。
Hive ビューでのクエリ実行
早速、Hive ビューを使ってクエリを実行してみましょう。「メニュー右端のアイコン > Hive View」を選択して、Hive ビューへアクセスします。
Database Explorer、Query Editor が表示されます。
表示された Query Editor にクエリを入力し、「Execute」を選択します。前回と同様 BLOB ストレージ上のデータを使って、テーブルを作成します。
CREATE EXTERNAL TABLE top_baby_names_by_state ( state string, gender string, year int, first_name string, occurrences int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 'wasbs:///mydata/' tblproperties ('skip.header.line.count'='1');
Query Editor の下に「Status: SUCCEEDED」が表示されたら正常に実行完了です。Database Explorer の 「default」を選択すると作成したテーブルの表示を確認できます。右側のアイコンをクリックすると、100件のデータを取得する SELECT 文が発行され、テーブルデータを簡易に確認できます。
100件分のデータが取得されました。
前回使用したクエリを実行してみます。
select state, gender, rank, first_name, occurrences from ( select state, gender, first_name, rank() over ( partition by state, gender order by state, gender, sum(occurrences) desc ) rank, sum(occurrences) occurrences from top_baby_names_by_state group by state, gender, first_name ) a where rank < 4 order by state, gender, rank
結果が表示されました。結果は HDFS への保存か、 CSV 形式でのダウンロードが可能です。
Hive クエリ実行結果の可視化
Hive ビューを利用するメリットとして、クエリ実行結果を手軽に可視化できる点があります。Query Editor 右側のグラフマークの「アイコン」を選択します。
左側の「COLUMNS」から「x」軸、「y」軸へ項目をドラッグ&ドロップするだけでグラフ表示が可能です。
性別毎の名前の件数を表示することも可能です。ただ、この場合は件数でソートできないようです。あくまで簡易なグラフ向きですが、手軽に可視化できるのは嬉しいですね。
Hive クエリの保存
Hive クエリに名前をつけて保存しておくことも可能です。
「Saved Queries」タブを選択すると保存したクエリが一覧表示されます。クエリ名やデータベース名等でフィルタリング可能になっているのが地味に助かります。
Hive クエリ実行履歴
「History」タブを選択すると、Hiveクエリの実行履歴を確認できます。
Tez DAG のグラフィカル表示
Query Editor 右横の「TEZ」を選択すると、DAG をグラフィカルに表示してくれます。
※HDInsight の Linux クラスターでの Hive クエリはデフォルトで Tez 上で実行されます (Hive on Tez)。
実行したクエリの DAG が表示されます。
なお、Tez については、Tez ビューの方がより詳細な情報が確認できます。Tez ビューは「メニュー右端のアイコン > Tez View」を選択することで表示できます。
タブ名からも情報の多さがうかがえます。
UDF
Hive ユーザー定義関数 (UDF) が管理できます。UDF を実装した jar ファイルを追加することで、Query Editor から利用可能になります。
テーブルアップロード
“CREATE EXTERNAL TABLE” のように外部ファイルをアップしてテーブルを作成することが可能です。ファイルはCSV、XML、JSONに対応していて、CSV は区切り文字、クオート文字列、エスケープ文字列を指定可能です。
その他の Ambari 機能を見てみる
「その他」といっても Ambari の機能としてはむしろメインです (^_^;)
注意点として、HDInsight クラスターの場合には利用が禁止、あるいは推奨されていない Ambari 機能がありますので、ご注意ください。
※基本的にクラスターやサービスの構成を変える機能の利用が NG です。
※HDinsight での制限については確認できた範囲での記載になります。詳細は Microsoft 公式ドキュメント等をご参照ください。
外部非公開機能を使用するための事前準備
ここにきていきなりですが、一部の Ambari 機能 (※2) はインターネット外部へ公開されていないため、SSH ダイナミックポートフォワーディングでトンネリングして SOCKS プロキシを使ってアクセスする必要があります。
(※2) 外部非公開となっている機能
サービス名 | 機能 |
---|---|
MapReduce2 | ジョブ履歴 |
YARN | リソース マネージャー UI |
HDFS | NameNode UI |
Oozie | Web UI |
SSH ダイナミックポートフォワーディング設定 (Putty 編)
ここでは Windows 環境で SSHターミナルとして Putty、Web ブラウザに Firefox を利用します。
まず、Putty で SSH ダイナミックポートフォワーディングの設定をします。
源ポート:9876 ※任意のハイポートで構いません
送り先:HDInsight クラスターのヘッドノードホスト名
ローカル/リモート/ダイナミック:「ダイナミック」を選択
SOCKS プロキシ設定 (Firefox編)
次に、Firefox で SOCKS プロキシの設定をします。
「手動でプロキシを設定する」を選択
SOCKS ホスト:localhost、ポート:9876 ※SSHターミナル側で指定した 源ポートと合わせる
SOCKS v4/v5:「SOCKS v5」を選択
早速、Firefox で「https://headnodehost:8080」へアクセスしてみましょう。
※「headnodehost」は各環境に合わせたヘッドノードホスト名ではなく、「https://headnodehost:8080」をそのままアクセス URL としてください。
ちなみに、”headnodehost” は HDInsight クラスターのヘッドノードの hosts ファイルで名前解決されているようですね。
この場合、認証ダイアログが表示されず、ログイン画面が表示されます。同じ資格情報でログインします。
SSH ポートフォワーディングしないとアクセスできない機能の一つである Oozie (Hadoop 用のワークフローエンジン) のWeb UI にアクセスしてみます。
Oozie のトップ画面が表示できました。
この時の FQDN 末尾は “internal.cloudapp.net” となっていて、外部 DNS では名前解決できないものになっていますが、Web ブラウザからのアクセス時に SSH クライアントが SOCKS プロキシとして動作し、転送先がヘッドノードであることで名前解決ができています。
ちなみに、SSH ポートフォワーディングを設定しないでアクセスすると 404 エラーが返ってきます。
Ambari 機能概要
最後に簡単に Ambari の機能を見ていきます。
ダッシュボード
クラスター構成ノードのリソース状況が一望できます。
(各ノードのステータス、ネームノードの起動時間/ヒープ使用量、ストレージ使用量、ディレクトリ・ファイル数等々)
サービス
クラスターで実行中のサービスのステータスや詳細情報の確認、設定の変更が可能です。変更した設定はバージョン管理されるので、一つ前の設定に戻すといったことが可能です。
右上の方の「Service Actions」を選択すると、各ノードの再起動や、再起動時の監視アラートを抑制するためにメンテナンスモードへ切り替える「Turn on Maintenance Mode」等々が利用できます。
左側メニューの「Actions」からはサービス起動・停止が可能です。サービスを追加する「Add Service」は HDInsight では使用が禁止されていますのでご注意ください。
ホスト一覧
クラスター構成ノードの全ホスト一覧です。IPアドレス、スペックの参照をはじめ、ホスト上のコンポーネントの停止・起動、データノードの停止・起動が可能です。
ただし、HDInsight では Ambari からのホストの 追加 (Add)、クラスターからホストの使用停止 (Decommission)、再任命 (Recommission) は推奨されていませんのでご注意ください。
監視
監視メトリクス一覧、監視グループの管理、通知設定が可能です。
通知は E メール、または SNMP が利用可能です。「Actions メニュー > Manage Alert Settings] で何回のアラートで通知するかを設定でき、一時的なエラーは通知しないといった設定が可能です。
管理
導入コンポーネントのバージョン、サービス実行アカウント、Kerberos 認証設定が可能です。
HDInsight クラスターを削除する
HDInsight クラスターは処理の実行に関わらず、起動中は課金が発生しますので、使い終わったら忘れずにクラスターを削除しておきましょう。
※手順は「HDInsight Hadoop #1 Hive クエリ実行 (CUI編) > HDInsight クラスターを削除する」を参照
まとめ
今回は Apache Ambari の Hive ビューから クエリの実行と結果を可視化し、駆け足で Ambari の他機能についても確認しました。
次回は MapReduce を Python で実装して動かしてみたいと思います。
最後までご覧いただき、ありがとうございました!^ ^