#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: [[[UNIX,Hadoop,Impala>日記/Category/UNIX,Hadoop,Impala]]] - 19:20:51
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()