都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

HDInsight と SQL Server 2012の連携

 最近、体調があまりよくなくブログをサボりがちでした。ゴールデンウィークに入ってからは、子供からウィルス性腸炎をうつされてしまい体調が最悪です。だいぶよくなってきたので、気分転換にHDInsightネタを書きたいと思います。

 HDFS上に展開されたMapReduceで生成されたCSV形式ファイルをSQL Server のテーブルにインポート可能のようなのでちょっと調べてみました。

 Microsoft SQL Server Connector for Apache Hadoop( sqoopというらしい。)というものらしいです。ここからインストールマニュアルがダウンロードできます。さらーとマニュアルを読んでちょっと試してみましょう。

  1. ここからsqoopをダウンロードします。(いくつかミラーサイトがあります。)
  2. 解凍すると、sqoop-1.4.3.bin__hadoop-0.20というフォルダできます。

これをインストールしよう...あれ、HDInsightをインストールした時にHadoop\sqoop-1.4.2というフォルダもできていますね。これを使うことにしましょう。(あ、ダウンロードした意味なし...) この前生成したHDFS上のファイルを使ってやってみます。

おそらく下記のコマンドでSQL Server 上のテーブルにデータをインサートしてくれるのでしょう。

--------

Example 1: Export data from a delimited text on HDFS The following command exports data from a delimited text file  /data/lineitemData  on HDFS to lineitem table in tpch database on SQL Server

$bin/sqoop export --connect 'jdbc:sqlserver://10.80.181.127;username=dbuser;password=dbpasswd;database=tpch'   --table lineitem -- export-dir /data/lineitemData

--------

手順は下記の通りです。

  1. jdbcSQL Serverへアクセスする必要があるので、SQL Serverの認証方式を『SQL Server認証』にしておきます。また、jdbc経由のアクセスは、どうもSQL Browserサービスが起動している必要があるようです。通常のインストールだと停止状態となっているので、サービスの起動をするようにしてください。
  2. ここでは、データベース名:『TESTDB』、テーブル名:『TESTTABLE』と作成します。

    f:id:koogucc11:20130502233243j:plain

  3. HDFS上に展開されているMapReduceした結果より、SQL Server上にテーブルにデータを展開します。コマンドプロンプト上で下記のコマンドを入力し、実行します
    sqoop export --connect jdbc:sqlserver://localhost:1433 --username sa --P --table TESTTABLE --export-dir /user/koo/output/LogFiles --m 1 --fields-terminated-by "\t" --lines-terminated-by "\n"
    ※--fields-terminated-by "\t" --lines-terminated-by "\n"は吐き出したファイル形式によって変更してください。カンマ区切りの場合には、--fields-terminated-by ","です。
     ※--password引数は私の環境ではエラーとなってしまい、受け付けてくれません。--P引数としてコマンドプロンプト上でパスワードを入力するとうまく動作します。(運用ではこれでは何かと使えないので、あとで調査しないと。)
    下図の通り『Exported 4 Records』となっており、SQL Serverのテーブルにレコードが追加されたことがわかります。f:id:koogucc11:20130503140631j:plain
  4. SQL Server Management Studio上から、SELECT * FROM TESTTABLE;を実行します。HDFS上に展開されていたファイルの内容がSQL Server 上のテーブルに反映されているのが確認できます。

    f:id:koogucc11:20130503140742j:plain

Windows上で実行するので、jdbcドライバではなくSNACとかネイティブアクセスできないんですかね。これで、HDInsight, sqoopの基本的な勉強は完了したかな?