在Node.JS透過ODBC連接impala完整教學(上)

在Node.JS透過ODBC連接Impala完整教學(上)

背景

原本專案的後端,在開發階段時採用Node.js連接MySQL
結果後來到部屬階段時要改連接到impala
原本以為是小事一樁,後來採坑連連
於是產生了本篇筆記
crying

初始想法 node-impala 套件

一開始看到 npm 裡面已經有人做好套件了
連接範例看起來也蠻簡潔的
就直接採用 node-impala
測試後的確也蠻快就能夠連上並且撈取資料
但是!!
過很久之後才發現
他的query一次最多回傳1024筆結果!
他的query一次最多回傳1024筆結果!
他的query一次最多回傳1024筆結果!

看了issue後才發現
是因為底層使用Beeswax來連接,這是Beeswax的限制無法改變

Beeswax limits the query result. It is not possible to increase the size by setting fetch_size here. Let’s use the HiveServer2 #4. 🙈

原討論串

煎熬了一陣子後決定直接放棄另尋他路

解法 ODBC

後來找到的方法是在系統環境下先裝好 ODBC 來連接 Impala
後端 Node.js 再去連 ODBC
我們的作業系統環境是使用Ubuntu 18.04
所以接下來就是有兩個步驟要執行

  1. 在 Ubuntu 上安裝 ODBC Driver
  2. 在 Node.js 上連接到 Ubuntu 上的 ODBC

步驟一,在 Ubuntu 上安裝 ODBC Driver

1. 下載安裝包

cloudera下載連結
Cloudera ODBC Driver for Impala 官方文件說明

2. 設定環境變數

export LD_LIBRARY_PATH=/usr/local/lib:/opt/cloudera/impalaodbc/lib/64
export CLOUDERAIMPALAINI=/opt/cloudera/impalaodbc/lib/64/cloudera.impalaodbc.ini
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libodbcinst.so
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc

3. 設定 ODBC driver 的參數檔

大致上長這樣
比較需要注意的地方是

  1. [impalaodbc] 這是你自己要取的 Data Source Name
  2. PORT要注意一下是21050還是21000
  3. `Drive‵路徑
  4. 帳號密碼、DB位置等等
    其他都是預設值而已,自行參考變化即可
[impalaodbc]

# Description: DSN Description. This key is not necessary and is only to give a description of the data
# source.
Description=Cloudera ODBC Driver for Impala (64-bit) DSN

# Driver: The location where the ODBC driver is installed to.
Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so

# The DriverUnicodeEncoding setting is only used for SimbaDM When set to 1, SimbaDM runs in UTF-16 mode. When
#set to 2, SimbaDM runs in UTF-8 mode. DriverUnicodeEncoding=2

# Values for HOST, PORT, KrbFQDN, and KrbServiceName should be set here. They can also be specified on the
# connection string.
HOST=Impala Server的IP位置
PORT=21050
Database=DB名稱

# The authentication mechanism. 0 - no authentication. 1 - Kerberos authentication 2 - Username
# authentication. 3 - Username/password authentication. 4 - Username/password authentication with SSL.
AuthMech=0

# Kerberos related settings.
KrbFQDN=
KrbRealm=
KrbServiceName=

# Username/password authentication with SSL settings.
UID=DB帳號
PWD=DB密碼
CAIssuedCertNamesMismatch=1
TrustedCerts=/opt/cloudera/impalaodbc/lib/64/cacerts.pem

# Specify the proxy user ID to use. DelegationUID=

# General settings
TSaslTransportBufSize=1000
RowsFetchedPerBlock=1000
SocketTimeout=0

4. 安裝 unixODBC

sudo apt-get install unixODBC unixODBC-dev

5. 測試

  1. 查看你的ODBC設定
     odbcinst -q -s
    如果成功的話應該會顯示你的 Data Source Name
  2. 測試連線
     isql -v impalaodbc
    如果成功的話應該會顯示你的連線後介面

到這部分完成了在 Ubuntu 上安裝 ODBC Driver
\ 恭喜恭喜 / \ 灑花灑花/
congrats
喘口氣,下一篇再來講 步驟二 Node.js 的部分~

參考連結

  1. Installing Impala ODBC Driver in Ubuntu 64 bit
  2. Impala ODBC 安装笔记
  3. ubuntu14.04配置impala的odbc连接