#blog2navi()

Cloudera-ImpaladにODBCで接続する-ubuntu

概要

ネット上に、ODBCからImpalaに接続する場合まともな資料が無いので、自分が、ODBC接続した際に、試した方法を書いて見る。

ネット上にまともな資料は無く、唯一、clouderaの資料があるだけだ。 clouderaの資料はこちらからダウンロードする のInstalling and Using Cloudera Impala のConfiguring Impala to Work with ODBCの項目を参考にすること。

使用OSは、ubuntu-server 12.04 32bit

事前準備

hadoop-imapladの準備

Clouderaの提供しているVMをおとしてくる。 こちら からVMwareを落としてくる。この環境につなぐことを想定。接続元は32bitなので。

落としたVMを普通に起動すれば、Impalaを含むすべてのシステムがたちあがる。 SELinuxが有効になっている場合には、それを切って置く。

  • サンプルデータの準備
    • VM上でサンプルデータを提供している。サンプルをゲットするみたいなボタンをクリックすると、sample07,sample08を準備してくれる。

Ubuntuの準備

  • 時刻を日本時間に合わせる。
    • sudo dpkg-reconfigure tzdata で Asia/Tokyoにあわせておく。ちなみに、ntpを入れておくと良い。

ODBC Driverの準備

ODBCドライバーを準備する。 https://ccp.cloudera.com/display/SUPPORT/Downloads のページから、Cloudera Connector for MicroStrategyを利用する。 落とした後、

tar -zxf ClouderaHiveODBC-v1.20.tar.gz -C /usr

として、/usr/lib以下にodbc のライブラリを置く。

実際に、依存ライブラリを入れる。

$cd /usr/lib
$ldd libhiveodbc.so.1

をして、libhiveodbc.so.1に足りないライブラリが無いか探す。ubuntu32bitの場合は、libssl.so.6が無いと言われる。その場合は、opensslを入れて、

 libssl.so.6 -> /lib/i386-linux-gnu/libssl.so.1.0.0

この様な感じで、シンボリックリンクを貼る。

odbc.ini,odbcinst.iniの準備

接続もとの/etc/以下に、odbc.ini,odbcinst.iniを準備する。 私の環境のodbc.iniは以下の通り。

  • odbc.ini
    • 場所
      shibacow@ubuntu:/usr/lib$ more /etc/odbc.ini
    • 内容
      [ODBC Data Sources]
      ;IMPALA-SERVER=Hive ODBC Driver
      IMPALA-SERVER=Hive Driver
      [IMPALA-SERVER]
      Driver=/usr/lib/libhiveodbc.so.1
      Description=Hive ODBC Driver
      Host=192.168.1.6 <- 先ほど入れてVMの環境に合わせる。
      Port=21000
      Database=
      FRAMED=0
      Trace=Yes
      TraceFile=/tmp/odbc.log
      Type=Beeswax
    • gist -> https://gist.github.com/shibacow/5517157
  • odbcinst.ini
    • 場所
      shibacow@ubuntu:/usr/lib$ more /etc/odbcinst.ini
    • 内容
      [ODBC Drivers]
      Hive Driver=Installed
      [Hive Driver]
      Driver=/usr/lib/libhiveodbc.so.1
      Description=Hive Driver
      Setup=/usr/lib/libhiveodbc.so.1
      APILevel=2
      ConnectFunctions=YYY
      DriverODBCVer=1.0
      FileUsage=0
      SQLLevel=1
    • gist-> https://gist.github.com/shibacow/5517164
  • 確認 ちゃんと入ったか。以下のコマンドを使って確認。
shibacow@ubuntu:/usr/lib$ odbcinst -q -s
[IMPALA-SERVER]
shibacow@ubuntu:/usr/lib$ odbcinst -q -d
[ODBC Drivers]
[Hive Driver]

となることを確認しよう。

接続プログラムの準備

odbc.iniとodbcinst.iniの準備が済んだので、そのodbc.iniとodbcinst.iniを最初に見るように設定しよう。

/.bashrcに

export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc

を追加して、source ~/.bashrcをする。

phpとpythonの準備

sudo aptitude install python-pyodbc
sudo aptitude install php php-odbc php-cli

をインストール。

確認のプログラム

php版の確認プログラムは https://gist.github.com/shibacow/5517129

python版の確認プログラムはこちら https://gist.github.com/shibacow/5517142

になる。

デバックの強い味方

  • 接続その他のログ
  • 接続先の(この場合は、VM)の/var/log/impalad/implad.INFOには、どのような情報が送られてきたかのログが残る。繋がった後きられた場合、そちらのログを確認すれば有益な情報を得られる。

はまりどころ。

TSSocketがlocalhostの10000portに接続しようとする。

次のエラー

Thrift: Sat May  4 20:19:31 2013 TSocket::open() connect() <Host: localhost Port: 10000>Connection refused
DBOpenConnection: connect() failed: Connection refused
Traceback (most recent call last):
  File "./python_impala.py", line 13, in <module>
    if __name__=='__main__':main()
  File "./python_impala.py", line 5, in main
   con=pyodbc.connect('DSN=IMPALA-SERVER;UID=;PWD=;Database=Default;')

pyodbc.Error: ('08S01', '[08S01] [unixODBC][SQLite]Communication link failure (- 1) (SQLDriverConnectW)')

  • デフォルトでは、~/.odbc.iniを見てその後、/etc/odbc.iniを見てしまう。そのため、上手く接続できない。
    export ODBCINI=/etc/odbc.ini
    export ODBCSYSINI=/etc
    を行って、/etc/odbc.iniを見るようにするか、~/.odbc.iniをきちんと作って上げる必要がある。

Default TExceptionエラー

  • Databaseを指定しないまま、接続しようとするとエラーが起こる。 次のようなエラー
    terminate called after throwing an instance of 'HiveException'
     what():  Default TException.
    Aborted
  • pythonの場合は、
    con=pyodbc.connect('DSN=IMPALA-SERVER;UID=;PWD=;Database=Default;')
    とDatabaseを指定するか、odbc.iniにDatabaseの指定を行うと良い
Category: [UNIX,Hadoop,Impala] - 19:20:51

&blog2trackback();

#blog2navi()


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-01 (日) 14:38:24 (3541d)