MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2019年5月13日 星期一

EDB Postgres 對 Hadoop 的外部表:hdfs_fdw v2 筆記 — 透過 Hive 界面

EnterpriseDB 提供能夠連線到 Hadoop 平台的 Foreign Data Wrapper,hdfs_fdw,能夠讓 PostgreSQL 資料庫直接把 Hadoop 上面的資料表當成 PostgreSQL 的表格,如此讓 PostgreSQL 直接存取冷資料。

雖然名稱叫做 HDFS 的 FDW,但是 hdfs_fdw 所溝通的是 Hive 跟 Spark 而非 HDFS 本身 ....

EnterpriseDB 對其所提供的 PostgreSQL 發行版和企業版提供 hdfs_fdw 安裝檔,以及社群 YUM Repo 也有提供相關 RPM,不用自己從原始碼編譯。這裡是功能測試的紀錄。

要安裝 hdfs_fdw 的話,EDB Postgres v11 企業版的 YUM Repo 有提供。如果使用 PostgreSQL YUM Repo,在 10/11 的裡面也提供了打包好內容;不然,另外一個 Postgres 發行版有 HadoopFDW 也能考慮看看。

這裡用 EDB 的企業版 EPAS 11 作練習。這邊直接使用一個已經準備好的 EDB 資料庫 Container
[brandon_hsu@labenv-lxc ~]$ sudo ./startenv.sh edb11
 . . . 中間略 . . . 
[brandon_hsu@labenv-lxc ~]$ sudo ./envlogin.sh edb11
 . . . 中間略 . . . 

1. 安裝 Java 以及 hdsf_fdw。hdfs_fdw 的套件裡面有 Hive JDBC Client,找出 JAR 檔案路徑,等下要填寫到參數內
[root@edb11 ~]# yum install -y java edb-as11-hdfs_fdw
 . . . 中間略 . . . 
[root@edb11 ~]# find /usr/edb/as11/ -name *jar
/usr/edb/as11/lib/HiveJdbcClient-1.0.jar
[root@edb11 ~]# 

2. 除了外掛套件提供的 jar 檔案之外,還需要下載 hive-jdbc-x.x.x-standalone.jar。這邊下載 v3.1.1(與來源端版本相同)
[root@edb11 ~]# wget http://central.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.1/hive-jdbc-3.1.1-standalone.jar -P /etc/alternatives/jre/lib/ext/
--2019-05-06 16:35:16--  http://central.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.1/hive-jdbc-3.1.1-standalone.jar
Resolving central.maven.org (central.maven.org)... 151.101.184.209
Connecting to central.maven.org (central.maven.org)|151.101.184.209|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 74324746 (71M) [application/java-archive]
Saving to: '/etc/alternatives/jre/lib/ext/hive-jdbc-3.1.1-standalone.jar'

100%[==================================================>] 74,324,746   201MB/s   in 0.4s   

2019-05-06 16:35:17 (201 MB/s) - '/etc/alternatives/jre/lib/ext/hive-jdbc-3.1.1-standalone.jar' saved [74324746/74324746]

[root@edb11 ~]# 

3. 啟動資料庫
[root@edb11 ~]# service edb-as-11 start
Redirecting to /bin/systemctl start edb-as-11.service
[root@edb11 ~]# 

4. 啟用外掛
若嘗試直接啟用外掛,會遇到錯誤
[root@edb11 ~]# su - enterprisedb
-bash-4.2$ psql -d edb
psql.bin (11.1.7)
Type "help" for help.

edb=# select * from pg_available_extensions where name='hdfs_fdw';
   name   | default_version | installed_version |                   comment                    
----------+-----------------+-------------------+----------------------------------------------
 hdfs_fdw | 2.0.3           |                   | foreign-data wrapper for remote hdfs servers
(1 row)

edb=# 
edb=# CREATE EXTENSION hdfs_fdw;
ERROR:  could not load JVM
HINT:  Add path of libjvm.so to hdfs_fdw.jvmpath
edb=# 

我們需要預先進行以下的參數設定:
由於這邊要設定的兩個 GUC 並沒有明顯紀錄在 Config 檔案內,因此需要先以 SET 指令載入,再使用 ALTER SYSTEM SET 使設定永久生效
edb=# SET hdfs_fdw.jvmpath='/etc/alternatives/jre/lib/amd64/server/';
SET
edb=# ALTER SYSTEM SET hdfs_fdw.jvmpath='/etc/alternatives/jre/lib/amd64/server/';
ALTER SYSTEM
edb=# SET hdfs_fdw.classpath='/usr/edb/as11/lib/HiveJdbcClient-1.0.jar';
SET
edb=# ALTER SYSTEM SET hdfs_fdw.classpath='/usr/edb/as11/lib/HiveJdbcClient-1.0.jar';
ALTER SYSTEM
edb=# 
edb=# select pg_reload_conf();
 pg_reload_conf 
----------------
 t
(1 row)

edb=# 

這時啟用外掛才會生效
edb=# CREATE EXTENSION hdfs_fdw;
CREATE EXTENSION
edb=# 

以上便把 hdfs_fdw 的設定設置完成。

5. 接著就可以建立外部表了。
這邊要連線的 Hive Server 2 服務,是上一篇的 Container 環境中安裝的 hive 3.1.1(位置在 192.168.68.21:10000),以 NOSASL 認證模式的 Hiveserver2。

hdfs_fdw 存取 Hadoop 的方式,透過 Hive 或是 Spark 二擇一。在建立外部表時,需要設置 client_type 這個 FDW Option 來決定。這邊我只測試透過 Hive Server 2 的查詢模式。
此外,由於這個測試環境設定的帳號認證機制為 NOSASL,因此這邊設置 User Mapping 時不用設定遠端帳密。
以下開始從 PostgreSQL 連線到 Hadoop 的 Hive 表格。資料就是上一篇所匯入的 weblogs 測試資料。
edb=# CREATE SERVER hive_server 
FOREIGN DATA WRAPPER hdfs_fdw 
OPTIONS (host '192.168.68.21', 
    port '10000', 
    client_type 'hiveserver2', 
    auth_type 'NOSASL',
    connect_timeout '10000', 
    query_timeout '10000');
CREATE SERVER
edb=# CREATE USER MAPPING FOR enterprisedb 
SERVER hive_server
OPTIONS (username 'hive', password 'hive');
CREATE USER MAPPING
edb=# 
edb=# CREATE FOREIGN TABLE weblogs
(
 client_ip                TEXT,
 full_request_date        TEXT,
 day                      TEXT,
 Month                    TEXT,
 month_num                INTEGER,
 year                     TEXT,
 hour                     TEXT,
 minute                   TEXT,
 second                   TEXT,
 timezone                 TEXT,
 http_verb                TEXT,
 uri                      TEXT,
 http_status_code         TEXT,
 bytes_returned           TEXT,
 referrer                 TEXT,
 user_agent               TEXT
)
SERVER hive_server 
OPTIONS (dbname 'd1', table_name 'weblogs');
CREATE FOREIGN TABLE
edb=# 

然後就可以查詢表格了
edb=# select * from weblogs limit 3;
   client_ip   |     full_request_date      | day | month | month_num | year | hour | minute | second | timezone | http_verb |        uri        | http_status_code | bytes_returned |     referrer      |                                                    user_agent                                                    
---------------+----------------------------+-----+-------+-----------+------+------+--------+--------+----------+-----------+-------------------+------------------+----------------+-------------------+------------------------------------------------------------------------------------------------------------------
 612.57.72.653 | 03/Jun/2012:09:12:23 -0500 | 03  | Jun   |         6 | 2012 | 09   | 12     | 23     | -0500    | GET       | /product/product2 | 200              | 0              | /product/product2 | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
 612.57.72.653 | 03/Jun/2012:09:14:50 -0500 | 03  | Jun   |         6 | 2012 | 09   | 14     | 50     | -0500    | GET       | /product/product3 | 200              | 0              | /product/product2 | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
 612.57.72.653 | 03/Jun/2012:09:15:05 -0500 | 03  | Jun   |         6 | 2012 | 09   | 15     | 05     | -0500    | GET       | /product/product3 | 200              | 0              | /product/product3 | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
(3 rows)

edb=# 


目前 hdfs_fdw v2 還沒有提供資料輸入 Hive 的功能(可能是因為 Hive 要執行 DML 需要額外的設置)。期待以後完成的話,便可以把過期資料輕易的從 Postgres 倒進去 Hadoop,增加舊資料歸檔的彈性。


參考資料:

EDB 原廠客服團隊

其他類似的~

沒有留言:

張貼留言