Azure HDInsight Spark を試してみた3

Posted on

JMT西森です。

今回はデフォルトで用意されているサンプルデータを用いて、
Apache Hive(以後、Hive)を使用して色々と遊んでみたいと思います。

まず、Hiveについて少しだけ説明します。

HiveはHadoop上で動作可能な、データの集約・問い合わせ・分析が可能なデータウェアハウスソフトウェアです。
SQLによく似た記述方式(厳密にはサポートしていません)であるHiveQLを使用し、Select文をMapReduce方式に
置き換えて実行することができます。

但しあくまでもSQL”ライク”なだけなので、RDBMS上で使用するSQLクエリがそのまま使用できるわけではありません。

詳細については下記が非常に参考になります。
# 本ブログ作成にあたっても非常に参考とさせて頂いています
・Wikipedia: https://ja.wikipedia.org/wiki/Apache_Hive
・Hiveメモ: http://www.ne.jp/asahi/hishidama/home/tech/apache/hive/index.html

それでは本題。サンプルデータで遊んでみましょう。

Azure Console 画面から「SPARK DASHBOARD」を選択(ID/Pass入力)し、
表示される画面のタブから「Hive Editor」を開きます。

20151127_001

デフォルトではサンプルデータのSelect文が記載されています。サンプルデータは
既にテーブルとして作成されており、「hivesampledata」という名前になっています。

なお前回も記載しましたが、実体はStorage Account上にあるテキストファイルです。
先程の「File Browser」から辿っていくことで、実体ファイルが確認出来ます。
「File Browser」⇒「アカウント名」⇒「コンテナ名」⇒「hive」⇒「warehouse」⇒「hivesampletable」
と辿ることで「HiveSampleData.txt」が見つけられると思いますので、
まずはそれを開いて中身を見てみましょう。なお、約5MB程度のデータです。

20151127_002

20151127_003

時間や文字コード、iPhoneやSamsung、California、United States等があります。
各データ列がどのような意味を持っているのか、テーブル構造を調べます。
Hive Editorにて以下クエリを発行し、完了後に結果を見てみましょう。
> desc hivesampletable

20151127_004

ジョブが完了した(StatusがComplated)ら、「View Details」を選択します。
20151127_005

Job Outputで列の情報が色々と取得できたかと思います。
「querydwelltime」や「sessionid」、「sessionpagevieworder」等があることから、
あるWebサイトで、ページごとの接続元デバイス情報、処理時間等をまとめた
ログデータであるように読み取れるかと思います。

それでは色々とやってみましょう。以後は
HiveQLを入力 ⇒ Submitをクリック ⇒ 完了を待つ ⇒ 完了したらView Detailsで確認
という流れが続きますので、上記手順は割愛して記載します。

まず、クライアントの数を数えることにします。ただのカウントだと重複レコードもそのまま
カウントされてしまうため、clientidをdistinctしてみたいと思います。以下HiveQLを発行してみましょう。
> select count(distinct clientid) from hivesampletable;

結果は「14517」でした。ちなみに全件数は「59793」です。

20151127_006

ちなみに、どれくらい処理に時間がかかったのでしょうか?
Job Logの最後のほうを参照すると、
Time taken: 60.285 seconds, Fetched: 1 row(s)
とあるので、全体の処理時間としては約1分程だったようです。

次は、en-US以外のマーケット(国?)からのアクセスしてきたデバイス数を、
それぞれのマーケットごとに集計してみます。以下HiveQLを発行してみましょう。
> select market, count(distinct clientid) from hivesampletable where market “en-US” group by market;

20151127_007

en-GBが一番多く、616件でした。ちなみにこれ、イギリスです。

次は、querydwelltimeの平均値を取得してみます。
以下HiveQLを発行してみましょう。
> select avg(querydwelltime) from hivesampletable where querydwelltime is not null;

20151127_008

26821…単位がms(マイクロ秒)だとしても、長すぎる気がしますね。

前のテキストを眺めてみても1桁2桁が多くあるので、一部の巨大な値の影響でしょうか。

querydwelltimeが本値以上となっているレコードを探します。
以下HiveQLを発行してみましょう。
> select * from hivesampletable where querydwelltime > 26821

20151127_009

16件もありました。そりゃぁ平均値が押し上げられるわけですね…。
querydwelltime の値の分布を力技で調べてみます。
以下HiveQLを発行してみましょう。
> select 1, count(*) from hivesampletable where querydwelltime > ‘1’;
> select 10, count(*) from hivesampletable where querydwelltime > ’10’;
> select 50, count(*) from hivesampletable where querydwelltime > ’50’;
> select 100, count(*) from hivesampletable where querydwelltime > ‘100’;
> select 500, count(*) from hivesampletable where querydwelltime > ‘500’;
> select 1000, count(*) from hivesampletable where querydwelltime > ‘1000’;
> select 5000, count(*) from hivesampletable where querydwelltime > ‘5000’;
> select 10000, count(*) from hivesampletable where querydwelltime > ‘10000’;
ちなみに複数行を一度に実行することが可能です。その場合は、最後にセミコロンを入れましょう。

20151127_010

値が500より大きいレコードの総数が 827 と全体(59793)の約2%に相当するようです。
では、値が500未満のものを対象として、改めて平均値を調べてみます。
以下HiveQLを発行してみましょう。
select avg(querydwelltime) from hivesampletable where querydwelltime < 500;

20151127_011

約18と、なんとなくそれっぽい値が取得できたように思えます。

如何でしょうか。基本的なSQL構文さえ理解していれば、テキストデータに対して
様々な視点からデータ分析・調査できることが分かったかと思います。

なお今回はHiveQLを使って情報を取得しましたが、前回記載したJUPYTER NOTEBOOKや
ZEPEPLIN NOTEBOOK を使うことで、もう少しスマートに解析が出来て、かつグラフ化等の
可視化も出来るようになります。

今回はサンプルデータを使いましたが、出来れば手元にある実データを使いたいですよね。
次回は実データをこの環境にどう取り込むのか、HiveQLで実現する方法を記載したいと思います。

LINEで送る

Azure HDInsight Spark を試してみた2

Posted on

JMT西森です。

今回は、話題をAzure HDInsight Sparkに戻して、
前回作成した Azure HDInsight Spark 環境が
どんな状態になっているのか見てみます。

Azure Consoleの画面下にある、「SPARK DASHBOARD」を選択します。
20151112_001

IDとパスワードの入力を求められるため、
前回指定したIDとパスワードを入力してください。
認証に成功すると下記画面が表示されます。
20151112_002
ここでSpark環境の状態確認や、Storage Account上の
データの確認、Hiveを使用したクエリ実行が可能です。
他にもJUPYTER NOTEBOOKやZEPEPLIN NOTEBOOKへのリンクがあり、
Webブラウザ上からPythonやSparkSQLを使ったグラフ化等が可能です。

1. Resource Manager
Spark環境の様々なパラメータを確認、変更することが可能です。
20151112_003

2. Notebooks
Jupyter Notebook 及び Zeppelin Notebook へのリンクがあります。
また Azure Console 画面下にもリンクがあります。
20151112_004

3. File Browser
Spark環境が使用している、Azure Storage Account が表示されます。
アカウントをクリックするとコンテナが表示され、さらにそのコンテナを
クリックすると各フォルダが確認できます。
20151112_005

アカウント名をクリックすると、コンテナが表示されます。
20151112_006

コンテナをクリックすると、各フォルダが表示されます。
20151112_007

4. Hive Editor
Hive(リンク)を使ったSQL(HiveQL)の発行、及び結果の参照が可能です。
デフォルトではサンプルテーブルに対するSelect文が埋め込まれており、
この状態のまま右下の「Submit」をクリックすることで処理が実行されます。
20151112_008

ジョブが完了した(StatusがComplated)ら、「View Details」を選択します。
20151112_009

サンプルデータを確認することができます。
「Job Queue」が発行したHiveQL文になります。
「Job Output」が実行結果になります。
「Job Log」がHiveQL実行ログになります。
20151112_010
なおどちらも、Download Filesボタンで出力をファイルでダウンロード可能となっています。

ちなみにサンプルデータとなる hivesampletable の実体は、Storage Account上にあるテキストファイルです。
先程の「File Browser」から辿っていくことで、実体ファイルを確認することが可能です。
20151112_011

5. Quick Links
各種ドキュメントへのリンク集です。

今回説明したのはWebブラウザ上で出来ることのみ記載しましたが、
中身はWindows Serverなので、RDPでOS環境に接続することも可能です。

次回はサンプルデータを使って、Hiveを使用した解析を行ってみたいと思います。

LINEで送る

AzureActiveDirectoryDomainServicesを試してみる2

Posted on

JMT西森です。

前回に続き、今回は何がどこまで出来るのか、
色々とAADDSの環境を見ていきたいと思います。

 

なお Azure Console 上では、Domain Services に関する操作はほぼ何もできません。

そこで、普段ADを管理する上で使用する各種ツール群が使えるのかどうかを試してみます。

新たにAD管理用でVMを作るのは面倒なので、前回使用したVMをAD管理用として使いたいと思います。

なお画像内の名称等、前回と一部異なる部分がありますが、大人の事情で環境をリビルドしたせいです、察してください。

 

最初にまず訂正があります…。
AADDSの機能をフルで活用するには、AAD用の管理者グループを作成し、
さらにユーザーをその管理者グループに追加する必要がありました…。

Azure Console上で、管理者グループの作成及びユーザーの登録を行います。

20151026_001

名称は必ず「AAD DC Administrators」と指定する必要があります。

20151026_901

グループの詳細画面に入り、メンバーの追加でユーザーを追加します。

20151026_902

ほんとはこれを前回の最初にすべきだったんですけど…結果オーライ!

 

次にVM上でAD管理ツール群が使えるようにしましょう。
サーバーマネージャーから機能を追加していきます。

サーバーマネージャーの右上にある「管理」から
「役割と機能の追加」を選び、以下の機能を追加します。
・Remote Server Administration Tools -> Role Administration Tools
-> AD DS and AD DS Tools -> AD DS Tools
・Group Policy Management

以後、ログインユーザーは上記「AAD DC Administratos」に追加したユーザーで実施する必要があります。

そのため、上記ユーザーでリモートデスクトップログインして以下を実施します。

 

ちなみに余談ですが、ドメイン参加したマシンでは、「AAD DC Administratos」に
ローカルのAdministorator権限を付与することになっています。

20151026_999

そのため、上記で追加したユーザーは、ドメイン参加しているマシンすべての
管理者権限を持っている ということに注意してください。

 

インストールが完了したら、管理ツールを開きます。
試しに「Active Directory Users and Computers」を起動します。

20151026_007

「Domain Controllers」や「System」等のOUオブジェクトが表示されません。
参照権限が与えられていないようです。

20151026_008

20151026_009
「AAD DC Computers」にComputerオブジェクトがありますね。
なお通常の「Computers」OUには何もオブジェクトがありません。

20151026_010

20151026_011

Azure Console で作成したユーザーオブジェクトが「AAD DC Users」OU以下にあります。
逆に通常の「Users」OU以下によく見るユーザーやグループオブジェクトがあります。

AADDSのユーザーやグループ、コンピューターオブジェクトは、この「AAD DC XXX」の
OUの下に作成されているようです。

なおユーザーやグループ、OU等のオブジェクトを、ここで作成・更新することはできません。

これはAADDSの仕様上、そうなっているようです。

※追記:再度確認したところ、「AAD DC Computers」OU以下に、「Computer」オブジェクトのみ作成することが出来ました

 

次は「Active Directory Sites and Services」を起動してみましたが、エラーが出ました。
詳細はここでは載せませんがattribute云々言われたので、上と同じく権限周りかなと。

 

今度は「Active Directory Domains and Trusts」を起動してみました。
正常に起動したので、そのままプロパティを確認してみました。

20151026_012

ドメインの機能レベルは「Windows Server 2012 R2」のようですが、
フォレストの機能レベルは表示されません。これも仕様でしょうね。

 

次は気になるグループポリシー!起動させましょう。
デフォルトのグループポリシーに加え、「AADDC Computers GPO」
「AADDC Users GPO」があるみたいですので、中身をみてみます。

20151026_013

administratorsというグループが存在するだけですね。
「AADDC Computers」というOUにリンクされています。

20151026_014

何も設定されていませんでした。
「AADDC Users」というOUにリンクされています。

なお、デフォルトのGPOである「Default Domain Controller Policy」及び
「Default Domain Policy」には、変更権限がありません。
右クリックしても、「Edit」の部分がグレーアウトされています。
また、新しいGPOを作成することもできません。

しかし「AADDC Computers GPO」「AADDC Users GPO」については
右クリック->Editで変更が可能です。

またドメインコントローラについてですが、本環境ですと1台構成のようです。

20151026_015

他に検証されている方のブログでは4つと記載があるようなので、今回とは違うようです。
またこのブログを書く前に一回ためしに作った環境だと、ADは2サーバーありました。
リージョンやタイミングによって変わるのか?…でも1台だと耐障害性が…うーん…。

 

今回はここまで。最後に軽くまとめてみると…
・Azure VMをドメイン参加させることは可能
・ユーザーやグループの作成はAzure Consoleのみ
・GPOの新規作成やデフォルトGPOの更新は不可
・AADDC用のGPOは更新可能、但しコンピューターやユーザーごとに1つのみ
という感じでした。

 

シンプルなGPOで管理されている事業者様であれば、十分使えそうな印象ですが…。
やはりOUやGPOは複数作成したいところです。今後に期待ですね。

LINEで送る

AzureActiveDirectoryDomainServicesを試してみる

Posted on

JMT西森です。

個人的に非常に待望していた、Azure Active Directory に
ドメイン機能がパブリックプレビューされました!!!

ということで、Spark?ナニソレ??といわんばかりに予告をスルーして、
こちらの機能を色々と試してみたいと思います。

今回はとりあえず、Azure Active Directory Domain Services
(以下、AADDS)を有効にして、Azure VMのマシンをドメイン参加
させるところまでやってみたいと思います。

長い説明となってしまうので、最初に流れだけ説明すると…
 1. AAD作成
 2. ユーザ作成&管理者権限付与
 3. 仮想ネットワーク作成
 4. ドメインサービスを有効可
 5. 仮想ネットワークでDNS設定
 6. ユーザーのパスワードリセット
 7. VM作成し、ドメイン参加
という感じです。それでは、やってみましょう。

 

1. AAD作成
AADを作成します。
20151022_001

20151022_002

20151022_003

 

2. ユーザー作成&管理者権限付与
AADでユーザーを作成します。

20151022_004
画面下の「ユーザーの追加」をクリック。

20151022_005

20151022_006

20151022_007

20151022_008
パスワードは後半で使うので忘れないようにしましょう。

20151022_009
画像では5つ作っていますが、とりあえず1つで大丈夫です。

今度は作成したユーザーに管理者権限を付与します。ユーザの詳細画面に移動します。

20151022_010

上の画面を下にスクロールすると、【ロール】があります。
ここが通常は「組織のロール:ユーザー」になっていますが、
これを「サービス管理者」に変更して、保存してください。

20151022_011

 

3. 仮想ネットワーク作成
AADDSが所属するための仮想ネットワークを作成します。

20151022_012

20151022_013

20151022_014

20151022_015

 

4. ドメインサービスを有効可
AADにて、ドメインサービスを有効にします。
1.で作成したAADの画面に移動して、「構成」を選択します。

20151022_016

下にスクロールすると、【ドメインサービス(プレビュー)】がありますね。
これを有効にし、DNSドメイン名を指定(デフォルトのままにしました)し、
有効にする仮想ネットワーク(2.で作ったネットワーク)を指定します。
指定したら忘れずに保存してください。

20151022_017

なお結構時間がかかります。私の環境では30分から40分程度でした。
正常に完了すると、下記のような画面になります。

20151022_018
IPアドレスが付与されています。2つあるようです。
ここだけ見ると、ADが2台あるように見えます。

 

5. 仮想ネットワークでDNS設定
3.で作った仮想ネットワークの画面に移動して、「構成」を選びます。
DNSサーバの設定箇所があるので、上で表示された、IPアドレスを付与します。
なお名称は任意で構いません。

20151022_019

 

6. ユーザのパスワードリセット
この手順が大事です。※2.以降であればいつ実施しても構いません
オンプレADとAADが連携している環境の場合は、再度パスワードをsyncする必要があるようです。
# AADDS上のユーザーのパスワードハッシュが生成されていないから?

今回はシンプルに、ログイン画面からリセットします。
IDは<アカウント名>@<AD名>.onmicrosoft.com、パスワードは2.で表示されるものでログインします。
するとパスワードの有効期限切れで再入力を求められるので、設定を実施してください。

 

7. VM作成し、ドメイン参加
Azure VMを作成し、2.で作ったネットワーク上で起動させます。
なお手順は割愛します。

VM作成完了後、コマンドプロンプトでipconfigの情報をみてみました。

20151022_020

DNS Servers としてADのIPが設定されていることが分かります。

それでは、いつもの手順でドメインに参加してみます。
ドメイン名は 4. で表示されるDNSドメイン名です。
今回の場合だと、【testadjmt001.onmicrosoft.com】になります。
すると、認証画面が出てきました!!!

20151022_021

2. で作成したIPとパスワードを入力します。
すると…

20151022_022

ドメイン参加することが出来ました!
再起動後にコンピュータの情報を見ると、参加できていることが分かります。

20151022_023

今回はここまで。次回はAADDSどのような環境となっているか、色々と調べてみたいと思います。

LINEで送る