#blog2navi()
*Cloudera-ImpaladにODBCで接続する-ubuntu [#l1639922]
** 概要 [#fc219c5d]
ネット上に、ODBCからImpalaに接続する場合まともな資料が無いので、自分が、ODBC接続した際に、試した方法を書いて見る。

ネット上にまともな資料は無く、唯一、clouderaの資料があるだけだ。
clouderaの資料は[[こちら>http://www.cloudera.com/content/support/en/documentation/cloudera-impala/cloudera-impala-documentation-v1-latest.html]]からダウンロードする
のInstalling and Using Cloudera Impala のConfiguring Impala to Work with ODBCの項目を参考にすること。

使用OSは、ubuntu-server 12.04 &color(red){32bit}; 

** 事前準備 [#w44e11e7]
*** hadoop-imapladの準備 [#k816c7a1]
Clouderaの提供しているVMをおとしてくる。
[[こちら>https://ccp.cloudera.com/display/SUPPORT/Downloads]]
からVMwareを落としてくる。この環境につなぐことを想定。接続元は32bitなので。

落としたVMを普通に起動すれば、Impalaを含むすべてのシステムがたちあがる。
SELinuxが有効になっている場合には、それを切って置く。
- サンプルデータの準備
-- VM上でサンプルデータを提供している。サンプルをゲットするみたいなボタンをクリックすると、sample07,sample08を準備してくれる。

** Ubuntuの準備 [#y03e3d9b]
- 時刻を日本時間に合わせる。
--  sudo dpkg-reconfigure tzdata で Asia/Tokyoにあわせておく。ちなみに、ntpを入れておくと良い。
** ODBC Driverの準備 [#ofd03c21]
ODBCドライバーを準備する。
https://ccp.cloudera.com/display/SUPPORT/Downloads
のページから、Cloudera Connector for MicroStrategyを利用する。
落とした後、
 tar -zxf ClouderaHiveODBC-v1.20.tar.gz -C /usr
として、/usr/lib以下にodbc のライブラリを置く。
*** 実際に、依存ライブラリを入れる。 [#e636a0d0]
 $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の準備 [#ed255699]

接続もとの/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]
となることを確認しよう。

** 接続プログラムの準備 [#o877ec18]
odbc.iniとodbcinst.iniの準備が済んだので、そのodbc.iniとodbcinst.iniを最初に見るように設定しよう。
~/.bashrcに
 export ODBCINI=/etc/odbc.ini
 export ODBCSYSINI=/etc
を追加して、source ~/.bashrcをする。

*** phpとpythonの準備 [#ycdf997b]
 sudo aptitude install python-pyodbc
 sudo aptitude install php php-odbc php-cli
をインストール。
** 確認のプログラム [#t391d107]
php版の確認プログラムは
https://gist.github.com/shibacow/5517129

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

になる。

** デバックの強い味方 [#c502bb44]
- 接続その他のログ
- 接続先の(この場合は、VM)の/var/log/impalad/implad.INFOには、どのような情報が送られてきたかのログが残る。繋がった後きられた場合、そちらのログを確認すれば有益な情報を得られる。

** はまりどころ。 [#af7f40e1]
*** TSSocketがlocalhostの10000portに接続しようとする。 [#h2e61d53]

次のエラー
 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エラー [#m0703223]

- 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の指定を行うと良い

RIGHT:Category: &#x5b;[[UNIX,Hadoop,Impala>日記/Category/UNIX,Hadoop,Impala]]&#x5d; - 19:20:51
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS