HDInsight Hadoop #2 Hive クエリ実行 (Apache Ambari編)

こんにちは、サイオステクノロジー 水倉です。

引き続き、HDInsight の Hadoop クラスターです。
前回は CUI で Hive クエリを実行してみましたので、今回は GUI で実行したいと思います。
GUI には Apache Ambari を使用します。

前回と同じクラスター、テストデータを使用します。手順は「HDInsight Hadoop #1 Hive クエリ実行 (CUI編)」を参考にしてください。

screenshot.27-02-2017 16.30.52

Apache Ambari とは?

Hadoop クラスターの運用監視ツールで、クラスターのインストール・構成・監視・ジョブ実行機能等が Web UI、REST API で提供されます。

screenshot.27-02-2017 16.35.09

主な機能を挙げてみます。

  • クラスターのリソース状況が一望できるダッシュボード
  • ノードの起動・停止
  • 設定変更、及び設定のバージョン管理 (ノードの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」を選択します。

screenshot.27-02-2017 16.34.18

認証ダイアログが表示されるので、ユーザー名、パスワードを入力し、「ログイン」します。

この時、資格情報を誤って入力した場合、同一セッションでは認証ダイアログが表示されず、再度アクセスしても 403 エラーとなるのでご注意ください。ブラウザを起動し直すなど、別セッションで再度認証する必要があります。

Ambari認証ダイアログ

資格情報にはクラスター作成時に指定したクラスターログインユーザー名、パスワードを指定します。

HDInsight クラスターの資格情報

無事認証されると、クラスターリソース状況のダッシュボードが表示されます。

Ambari ダッシュボード

 

Hive ビューでのクエリ実行

早速、Hive ビューを使ってクエリを実行してみましょう。「メニュー右端のアイコン > Hive View」を選択して、Hive ビューへアクセスします。

Hiveビューの表示

Database Explorer、Query Editor が表示されます。

screenshot.27-02-2017 17.35.55

表示された 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');

Hiveビュー CREATE TABLE

Query Editor の下に「Status: SUCCEEDED」が表示されたら正常に実行完了です。Database Explorer の 「default」を選択すると作成したテーブルの表示を確認できます。右側のアイコンをクリックすると、100件のデータを取得する SELECT 文が発行され、テーブルデータを簡易に確認できます。

screenshot.27-02-2017 17.36.49

100件分のデータが取得されました。

screenshot.27-02-2017 17.37.41

前回使用したクエリを実行してみます。

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 形式でのダウンロードが可能です。

screenshot.27-02-2017 17.39.36

 

Hive クエリ実行結果の可視化

Hive ビューを利用するメリットとして、クエリ実行結果を手軽に可視化できる点があります。Query Editor 右側のグラフマークの「アイコン」を選択します。

クエリエディタバー

左側の「COLUMNS」から「x」軸、「y」軸へ項目をドラッグ&ドロップするだけでグラフ表示が可能です。

screenshot.27-02-2017 17.53.04

性別毎の名前の件数を表示することも可能です。ただ、この場合は件数でソートできないようです。あくまで簡易なグラフ向きですが、手軽に可視化できるのは嬉しいですね。

screenshot.27-02-2017 17.53.36

 

Hive クエリの保存

Hive クエリに名前をつけて保存しておくことも可能です。

Hiveクエリの保存

「Saved Queries」タブを選択すると保存したクエリが一覧表示されます。クエリ名やデータベース名等でフィルタリング可能になっているのが地味に助かります。

保存Hiveクエリ一覧

Hive クエリ実行履歴

「History」タブを選択すると、Hiveクエリの実行履歴を確認できます。

Hiveクエリジョブステータス

Tez DAG のグラフィカル表示

Query Editor 右横の「TEZ」を選択すると、DAG をグラフィカルに表示してくれます。
※HDInsight の Linux クラスターでの Hive クエリはデフォルトで Tez 上で実行されます (Hive on Tez)。

Tez DAGアイコン

実行したクエリの DAG が表示されます。

Hive on Tez DAG

なお、Tez については、Tez ビューの方がより詳細な情報が確認できます。Tez ビューは「メニュー右端のアイコン > Tez View」を選択することで表示できます。Tezビューへのアクセス

タブ名からも情報の多さがうかがえます。

screenshot.27-02-2017 18.08.22

UDF

Hive ユーザー定義関数 (UDF) が管理できます。UDF を実装した jar ファイルを追加することで、Query Editor から利用可能になります。

Hive UDF

テーブルアップロード

“CREATE EXTERNAL TABLE” のように外部ファイルをアップしてテーブルを作成することが可能です。ファイルはCSV、XML、JSONに対応していて、CSV は区切り文字、クオート文字列、エスケープ文字列を指定可能です。

screenshot.27-02-2017 17.41.51

 

その他の 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 クラスターのヘッドノードホスト名
ローカル/リモート/ダイナミック:「ダイナミック」を選択

screenshot.27-02-2017 16.42.30

SOCKS プロキシ設定 (Firefox編)

次に、Firefox で SOCKS プロキシの設定をします。

「手動でプロキシを設定する」を選択
SOCKS ホスト:localhost、ポート:9876 ※SSHターミナル側で指定した 源ポートと合わせる
SOCKS v4/v5:「SOCKS v5」を選択

Firefox SOKCSプロキシ設定

早速、Firefox で「https://headnodehost:8080」へアクセスしてみましょう。
※「headnodehost」は各環境に合わせたヘッドノードホスト名ではなく、「https://headnodehost:8080」をそのままアクセス URL としてください。

ちなみに、”headnodehost” は HDInsight クラスターのヘッドノードの hosts ファイルで名前解決されているようですね。

hostsファイル

この場合、認証ダイアログが表示されず、ログイン画面が表示されます。同じ資格情報でログインします。

Ambariログイン画面

 

SSH ポートフォワーディングしないとアクセスできない機能の一つである Oozie (Hadoop 用のワークフローエンジン) のWeb UI にアクセスしてみます。

Oozie UIアクセス

Oozie のトップ画面が表示できました。

Oozie トップ画面

この時の FQDN 末尾は “internal.cloudapp.net” となっていて、外部 DNS では名前解決できないものになっていますが、Web ブラウザからのアクセス時に SSH クライアントが SOCKS プロキシとして動作し、転送先がヘッドノードであることで名前解決ができています。

ちなみに、SSH ポートフォワーディングを設定しないでアクセスすると 404 エラーが返ってきます。

404エラー

Ambari 機能概要

最後に簡単に Ambari の機能を見ていきます。

ダッシュボード

クラスター構成ノードのリソース状況が一望できます。
(各ノードのステータス、ネームノードの起動時間/ヒープ使用量、ストレージ使用量、ディレクトリ・ファイル数等々)

Ambariダッシュボード

 

サービス

クラスターで実行中のサービスのステータスや詳細情報の確認、設定の変更が可能です。変更した設定はバージョン管理されるので、一つ前の設定に戻すといったことが可能です。

screenshot.27-02-2017 17.56.43

右上の方の「Service Actions」を選択すると、各ノードの再起動や、再起動時の監視アラートを抑制するためにメンテナンスモードへ切り替える「Turn on Maintenance Mode」等々が利用できます。

screenshot.27-02-2017 18.06.40

左側メニューの「Actions」からはサービス起動・停止が可能です。サービスを追加する「Add Service」は HDInsight では使用が禁止されていますのでご注意ください。

screenshot.27-02-2017 18.04.52

ホスト一覧

クラスター構成ノードの全ホスト一覧です。IPアドレス、スペックの参照をはじめ、ホスト上のコンポーネントの停止・起動、データノードの停止・起動が可能です。

screenshot.27-02-2017 18.03.41

ただし、HDInsight では Ambari からのホストの 追加 (Add)、クラスターからホストの使用停止 (Decommission)、再任命 (Recommission) は推奨されていませんのでご注意ください。

screenshot.27-02-2017 18.03.58

監視

監視メトリクス一覧、監視グループの管理、通知設定が可能です。

screenshot.27-02-2017 17.58.25

通知は E メール、または SNMP が利用可能です。「Actions メニュー > Manage Alert Settings] で何回のアラートで通知するかを設定でき、一時的なエラーは通知しないといった設定が可能です。

screenshot.27-02-2017 18.00.57

管理

導入コンポーネントのバージョン、サービス実行アカウント、Kerberos 認証設定が可能です。

screenshot.27-02-2017 18.02.10

 

HDInsight クラスターを削除する

HDInsight クラスターは処理の実行に関わらず、起動中は課金が発生しますので、使い終わったら忘れずにクラスターを削除しておきましょう。

※手順は「HDInsight Hadoop #1 Hive クエリ実行 (CUI編) > HDInsight クラスターを削除する」を参照

まとめ

今回は Apache Ambari の Hive ビューから クエリの実行と結果を可視化し、駆け足で Ambari の他機能についても確認しました。
次回は MapReduce を Python で実装して動かしてみたいと思います。

最後までご覧いただき、ありがとうございました!^ ^

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です