Azure HDInsightを使って、大量テキストの集計(2)

シェアする

目次
(1)HDInsight環境準備
(2)データの準備、SQL実行方法の確認
(3)データのロードと、抽出・集計の実行

前回は、HDInsightの利用環境の準備が終わりましたので、今回はデータの準備と、SQLの実行方法の確認を行っていきます

データの準備

簡単なGUI操作ができるツールで、今回はファイルをAzureストレージへコピーします。

個人的なおすすめは、Cerebrata の Azure Explorerです。
(シンプルかつ機能十分。疑似的なフォルダー階層の件も、意識する必要ありません)

  1. 下記サイトより、インストーラーをダウンロードして実行しますhttp://www.cerebrata.com/products/azure-explorer/introduction
  2. Azureポータルで、キーを確認します左端のメニューより、「ストレージ」をクリックします
    次に、「ダッシュボード」をクリックします下段メニューより「アクセスキーの管理」をクリックします表示されたダイアログで、「ストレージ アカウント名」と、「プライマリー アクセス キー」をコピーします
  3. Azure Explorerへ、ストレージアカウントを追加します「Add Account」をクリックしますAccount Nameには、先ほど調べた「アカウント名」を、
    Access Keyには「プライマリーキー」を入力します。
  4. データ格納用にフォルダーを作成します。今回は、MyDataというフォルダーを作成し、その配下にロードしたい単位でフォルダーを作成しました。Hiveでデータをロードするときに指定するのが、ファイル名ではなくフォルダー名となります。そのため、ロードしたい単位にフォルダーを作成しておきます。たとえば、ホスト名やIPセグメント、年月等でフォルダー名決めて作成すると便利だと思います。また、親フォルダー、子フォルダー、孫フォルダーという構成をとった場合ですが、Hiveで指定するときに、親フォルダーを指定した場合に、子や孫フォルダーにあるファイルは含まれません。今回の例でいうと、Hiveで「MyData」を指定した場合に、その配下にあるフォルダー「2015-03」等にあるファイルは含まれません。

    個別に、MyData/2015-03/SV02等の指定する必要があります。

  5. データをコピーしますローカルドライブから、集計対象のテキスト形式ファイルを、先ほど作成したフォルダーへ、ドラッグアンドドロップし、コピーします。

Azcopyコマンドでもいいのですが、注意点として、HDInsightで扱うフォルダー階層が、ファイル名に「/」を含めることで表現された疑似的なものなので、そこを意識する必要がたぶんあります(試してません)

フォルダー階層の説明
https://azure.microsoft.com/ja-jp/documentation/articles/hdinsight-upload-data/

SQL実行方法の確認

HiveQLと呼ばれる、Hiveで使えるSQLは、通常のRDBがサポートするSQLのサブセットになっています。今回は、テキストデータから、ある条件にマッチするデータを抽出(select)します。

まず、HDInsightで、HiveQLを簡単に実行する方法は、2通りあります。
(より自動化を望む場合は、PowershellやREST APIを使う方法もあるようですが試してません)

SQLの実行方法(その1) リモートデスクトップ接続

  1. クラスターのヘッドノードへリモートデスクトップ接続をします。接続に使用するユーザーは、Hadoopクラスター作成時に指定した、リモートデスクトップ接続用にユーザーになります。
  2. デスクトップにある、「Hadoop Command Line」のアイコンを実行し、以下コマンドを実行します。%hive_home%\bin\hive詳しくはこちら

SQLの実行方法(その2) Webコンソール

以上で、データの準備と、SQL実行ができるところまで来ました。次回は、実際の集計を行っていきたいと思います