最近、体調があまりよくなくブログをサボりがちでした。ゴールデンウィークに入ってからは、子供からウィルス性腸炎をうつされてしまい体調が最悪です。だいぶよくなってきたので、気分転換にHDInsightネタを書きたいと思います。
HDFS上に展開されたMapReduceで生成されたCSV形式ファイルをSQL Server のテーブルにインポート可能のようなのでちょっと調べてみました。
Microsoft SQL Server Connector for Apache Hadoop( sqoopというらしい。)というものらしいです。ここからインストールマニュアルがダウンロードできます。さらーとマニュアルを読んでちょっと試してみましょう。
これをインストールしよう...あれ、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
--------
手順は下記の通りです。
- jdbcでSQL Serverへアクセスする必要があるので、SQL Serverの認証方式を『SQL Server認証』にしておきます。また、jdbc経由のアクセスは、どうもSQL Browserサービスが起動している必要があるようです。通常のインストールだと停止状態となっているので、サービスの起動をするようにしてください。
- ここでは、データベース名:『TESTDB』、テーブル名:『TESTTABLE』と作成します。
- 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のテーブルにレコードが追加されたことがわかります。 - SQL Server Management Studio上から、SELECT * FROM TESTTABLE;を実行します。HDFS上に展開されていたファイルの内容がSQL Server 上のテーブルに反映されているのが確認できます。
Windows上で実行するので、jdbcドライバではなくSNACとかネイティブアクセスできないんですかね。これで、HDInsight, sqoopの基本的な勉強は完了したかな?