ブロックチェーン・AI・システム開発の株式会社INDETAIL

GoからCloudera Impalaに繋いでみた

2015.02.19
INDETAIL

近年、ビッグデータというキーワードと共にApache Hadoopが注目されています。
皆さんはHadoopにどんなイメージを持っているでしょうか?何だか難しそうですよね。
ですが、Cloudera Impalaを使えば既存のRDBと同じようにSQLでデータの取り扱いができます。
今回はGoとSQLでCloudera Impalaからデータを取り出すまでの手順を解説したいと思います。

環境

以下の環境で動作確認しました。

機能 OS IPアドレス
ODBCクライアント CentOS6.5 64bit 192.168.128.2
Cloudera Impala QuickStart VMs for CDH 5.3.x 192.168.128.1
ソフト名 バージョン
Go 1.4.1
unixODBC 2.2.14-14.el6
Cloudera ODBC Driver for Impala 2.5.23

インストール手順

Installation Guide for Cloudera ODBC 2.5.23 Driver for Impalaを参考にインストールを進めます。

依存パッケージおよびドライバ

まずは依存パッケージとドライバをインストールします。

unixODBCがリンクするライブラリ名がso.1でハードコードされているのでシンボリックリンクを張ります。
これをやっておかないとうまく動きません。

設定ファイル

設定ファイルは3つあり、それぞれ以下の優先度で配置できます。

  • odbc.ini
    1. 環境変数ODBCINIのファイル (例: ODBCINI=/etc/odbc.ini)
    2. ~/.odbc.ini
    3. /etc/odbc.ini
  • odbcinst.ini
    1. 環境変数ODBCSYSINIのフォルダにodbcinst.iniを配置 (例: ODBCSYSINI=/etc)
    2. ~/.odbcinst.ini
    3. /etc/odbcinst.ini
  • cloudera.impalaodbc.ini
    1. 環境変数CLOUDERAIMPALAINIのファイル (例: CLOUDERAIMPALAINI=/etc/cloudera.impalaodbc.ini)
    2. /opt/cloudera/impalaodbc/lib/64/cloudera.impalaodbc.ini

今回はすべてconfディレクトリにコピーして環境変数で指定します。

cloudera.impalaodbc.iniについて

  • ODBCInstLibはunixODBCのlibodbcinst.soを設定します。
  • DriverManagerEncodingはGoのためにUTF-16を設定します。

odbcinst.iniは変更なしです。

odbc.iniは以下の行を追記します。
DriverUnicodeEncodingはcloudera.impalaodbc.iniの説明に従って1を設定します。

動作確認

isqlコマンドでodbc.iniに追加したImpalaを指定してImpalaに接続してみます。
このときだけ環境変数LD_PRELOADの設定が必要なので注意してください。
クエリの実行結果が返ってくれば正常に動作しています。

create table, insert, selectを試してみます。

GoとSQLでImpalaに接続

How do I connect Go on Linux to an ODBC Database?の接続文字列とクエリを変更すればそのまま動きます。

実行すると以下のようにクエリ結果が表示されます。

接続文字列について

接続文字列の指定方法は次のように3つあります。
場合によって使い分けるとよいでしょう。

DSN only

odbc.iniに接続先を設定して、接続文字列ではそのカテゴリ名を設定します。

設定ファイルは次の2つが必要です。

  • cloudera.impalaodbc.ini
  • odbc.ini

DSN less

odbc.iniは使用せずに、接続文字列で接続先を設定します。
DRIVERはodbcinst.iniのカテゴリ名を設定します。

設定ファイルは次の2つが必要です。

  • cloudera.impalaodbc.ini
  • odbcinst.ini

DSN combine

odbc.iniの定義をテンプレートにして、一部の設定を接続文字列で指定します。

設定ファイルはDSN onlyと同様に次の2つが必要です。

  • cloudera.impalaodbc.ini
  • odbc.ini

まとめ

このようにCloudera ImpalaODBC Drivers & Connectors for Impalaを組み合わせる事によってHadoopの知識がなくてもSQLでデータを取り出す事ができました。
意外と簡単ではないでしょうか?

また、Apache Hiveよりも格段に速いので、バッチだけではなくフロントエンドから使う事もできそうです。

参考リンク

関連タグ:

「いいね」ボタンを押すと、最新情報をすぐに確認できます。