Hadoopが注目されています。皆さんはHadoopにどんなイメージを持っているでしょうか?何だか難しそうですよね。Impalaを使えば既存のRDBと同じようにSQLでデータの取り扱いができます。Impalaからデータを取り出すまでの手順を解説したいと思います。以下の環境で動作確認しました。Impalaを参考にインストールを進めます。依存パッケージおよびドライバまずは依存パッケージとドライバをインストールします。https://downloads.cloudera.com/connectors/impala_odbc_2.5.23.1024/Linux/EL6/ClouderaImpalaODBC-2.5.23.1024-1.el6.x86_64.rpmunixODBCがリンクするライブラリ名がso.1でハードコードされているのでシンボリックリンクを張ります。これをやっておかないとうまく動きません。/usr/lib64/libodbcinst.so.2.0.0設定ファイル設定ファイルは3つあり、それぞれ以下の優先度で配置できます。CLOUDERAIMPALAINI=/etc/cloudera.impalaodbc.ini)/opt/cloudera/impalaodbc/lib/64/cloudera.impalaodbc.ini今回はすべてconfディレクトリにコピーして環境変数で指定します。CLOUDERAIMPALAINI=$PWD/conf/cloudera.impalaodbc.inicloudera.impalaodbc.iniについてODBCInstLibはunixODBCのlibodbcinst.soを設定します。DriverManagerEncodingはGoのためにUTF-16を設定します。iODBCodbcinst.iniは変更なしです。IconvEncoding=UCS-4LEodbc.iniは以下の行を追記します。DriverUnicodeEncodingはcloudera.impalaodbc.iniの説明に従って1を設定します。DriverUnicodeEncoding=11234567[Impala]Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.soHOST=192.168.128.1PORT=21050Database=defaultDriverUnicodeEncoding=1動作確認isqlコマンドでodbc.iniに追加したImpalaを指定してImpalaに接続してみます。このときだけ環境変数LD_PRELOADの設定が必要なので注意してください。クエリの実行結果が返ってくれば正常に動作しています。selectを試してみます。Database?の接続文字列とクエリを変更すればそのまま動きます。db.Close()}実行すると以下のようにクエリ結果が表示されます。CCC接続文字列について接続文字列の指定方法は次のように3つあります。場合によって使い分けるとよいでしょう。onlyodbc.iniに接続先を設定して、接続文字列ではそのカテゴリ名を設定します。"DSN=Impala;"設定ファイルは次の2つが必要です。lessodbc.iniは使用せずに、接続文字列で接続先を設定します。DRIVERはodbcinst.iniのカテゴリ名を設定します。64-bit};HOST=192.168.128.1;PORT=21050;Database=sandbox;"設定ファイルは次の2つが必要です。combineodbc.iniの定義をテンプレートにして、一部の設定を接続文字列で指定します。onlyと同様に次の2つが必要です。Impalaを組み合わせる事によってHadoopの知識がなくてもSQLでデータを取り出す事ができました。Hiveよりも格段に速いので、バッチだけではなくフロントエンドから使う事もできそうです。indexともに世界をアップグレードできる、そんな日を夢見て。