datax開啟hana支援以及dolphinscheduler開啟datax任務
前面(@,@)
前段時間因為要做異構資料匯入匯出,所以搜了下,發現這類工具收費的居多,使用起來未必趁手~
於是我找了下相關開源工具,目前,對於非開源的,我找到的大概有三種方式:
- 1.
springboot
+mybatis
寫程式碼做匯入匯出->固定表可以這樣做,換張表結構不一樣又要重新開發 - 2.使用
kattle
...一開始同事用的這款工具,不過它太重了,啟動卡半天、操作個欄位也卡半天,換個表還要重新建任務,屎一樣的操作體驗... - 3.使用
datax
,需要配置環境(java
、python
) ,以及寫任務檔案(json
) 似乎也不是很高效快捷,真難為我了
直到最近我發現了一款工具可以配合著dolphinscheduler
使用,那體驗簡直了..:爽歪歪?,這次我就講講如何操作~
一.準備
- 1.
java
環境(預設您已經安裝) - 2.
python
環境(預設您已經安裝),我這邊使用linux
自帶的2.7
版本 - 3.
dolphinschedule
(預設您已經安裝) - 4.下載並解壓
datax
安裝版(我使用的是2022年3月份左右的版本)https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/20220530/datax.tar.gz - 5.測試表及資料:
-- postgresql(pg)
CREATE TABLE TMPP (
ID int8 primary key,
NUM int4,
NAME VARCHAR(20) ,
EXT1 date ,
EXT2 timestamp ,
EXT3 timestamp ,
EXT4 DECIMAL(20, 4) ,
EXT5 text ,
EXT6 CHAR(1) ,
EXT7 float4
);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-3,33,'這是名稱',NULL,NULL,NULL,830.9123,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-2,22,'n_22','2021-10-28','2021-10-27 11:46:25.000','2021-10-29 11:46:33.000',999.1230,'hello youth!','2',19.8799991607666);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-1,11,'n_11',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (0,1000,'NAME_1000',NULL,'2021-10-28 16:23:30.000',NULL,NULL,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (1,1001,'NAME_1001','2021-10-28',NULL,'2021-10-28 16:22:41.000',177.3330,'你好啊~','0',NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-99,99,'hello hana','2021-11-02','2021-11-02 14:56:45.758','2021-11-02 14:56:45.758',99.9900,'HELLO TEXT','9',22.329999923706055);
-- hana(sap db)
CREATE ROW TABLE "TMPP" ( "ID" INT CS_INT NOT NULL, "NUM" INT CS_INT, "NAME" NVARCHAR(20) CS_STRING, "EXT1" DAYDATE CS_DAYDATE, "EXT2" LONGDATE CS_LONGDATE, "EXT3" LONGDATE CS_LONGDATE, "EXT4" DECIMAL(20, 4) CS_FIXED, "EXT5" CLOB MEMORY THRESHOLD 1000 , "EXT6" CHAR(1) CS_FIXEDSTRING, "EXT7" DOUBLE CS_DOUBLE );
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-3,33,'這是名稱',NULL,NULL,NULL,830.9123,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-2,22,'n_22','2021-10-28','2021-10-27 11:46:25.000','2021-10-29 11:46:33.000',999.1230,NULL,'2',19.8799991607666);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-1,11,'n_11',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (0,1000,'NAME_1000',NULL,'2021-10-28 16:23:30.000',NULL,NULL,NULL,NULL,NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (1,1001,'NAME_1001','2021-10-28',NULL,'2021-10-28 16:22:41.000',177.3330,NULL,'0',NULL);
INSERT INTO TMPP (ID,NUM,NAME,EXT1,EXT2,EXT3,EXT4,EXT5,EXT6,EXT7) VALUES (-99,99,'hello postgres','2021-11-02','2021-11-02 14:56:45.758','2021-11-02 14:56:45.758',99.9900,NULL,'9',22.329999923706055);
二.datax
(通用rdbms
方式)開啟hana
支援
首先,要說明的是一般datax
支援hana
有兩種方式:
- 1.二次開發,寫
hana
專屬的writer
以及reader
外掛->配置jdbc
->編譯上線 - 2.直接使用
datax
提供的rdbmswriter
以及rdbmsreader
外掛->新增jdbc
->配置對應的plugin.json
中的driver
路徑即可
這裡我使用的是第二種方式,當然下面也會講到這中間碰到的坑哈?
2.1 datax
的基本結構
上圖為datax
解壓後的主目錄.
bin
:啟動指令碼,主要是python指令碼,啟動一個任務例項時會用到conf
: 一些基本的配置檔案,很少用到job
: 任務配置檔案(json格式),這個目錄是可選的,一般手寫任務配置檔案會放到這個目錄lib
: 通用及基本的jar包依賴log
: 任務日誌目錄,這個目錄也是可選的,一般是啟動任務時指定log_perf
: 也是任務執行統計日誌檔案,一般是空的plugin
: 裡面包含具體的writer以及reader外掛及外掛配置script
: 指令碼目錄,這也是可選的,一般指令碼檔案是統一採用git等版本管理tmp
: 臨時目錄,個人建的哈??
2.2 新增jdbc
驅動檔案(jar)
一般這個jdbc
需要到包管理網站或者對應資料庫廠商官網下載,這裡下hana
的driver
:https://mvnrepository.com/artifact/com.sap.cloud.db.jdbc/ngdbc
這裡的主要操作是將下載好的jar
包放到lib
目錄內,這裡需要特別說明的是:網上有部落格寫的是放入的plugin
目錄,可能我的版本較新或者和他們的整合方式不同吧,對我來說這個jar
放入到plugin
目錄肯定是不行的!!!
以下是我的lib
目錄:
2.3 給通用rdbms
新增hana
支援
這個操作在plugin目錄下,對應其中的plugin/writer/rdbmswriter
以及 plugin/reader/rdbmsreader
目錄下的plugin.json
檔案 ,修改drivers
這一項,這個一定不能錯!!!
下圖為我新增的 hana
driver
:
到這裡,datax
的hana
配置已經ok了,下面是dolphinscheduler
內的datax
相關配置~
三.dolphinscheduler
中配置datax
環境變數
其實這一步很簡單,主要是在dolphinscheduler
的->安全中心
->環境管理
選單下配置datax
的位置,這步操作一定要在管理員賬號
(admin
)下操作,一般普通使用者是沒有許可權的,這個很重要!!!
如果您是多機叢集部署,建議將datax
放在相同的目錄位置,不然統一的環境變數找不到,同時JAVA_HOME
這個環境變數也建議配置下,不然會有些莫名其妙的問題發生就不好了??
以下是我的配置:
oh,我忘記了,dolphinscheduler預設是沒有hana的資料來源支援的,需要的可以找我哦(後面會有部落格聊到的,關注喲~)?
四.小測一下?
我的測試的是postgresql
內的資料抽取到hana
以及 hana
的資料抽取到postgresql
兩個任務,由於dolphinscheduler
的基本使用上一篇部落格已經講過了(具體看這個:https://www.cnblogs.com/funnyzpc/p/16395094.html ),這裡我只給出具體的任務節點配置哈?
(dolphinscheduler
任務具體配置,表sql
指令碼上文有)
- postgresql to hana
- hana to postgresql
- 執行結果:
還有幾個小的注意事項是:
dolphinscheduler
的datax
任務下查詢sql
需要將欄位顯式的寫出,不可以用*號代替- 查詢的欄位要注意不同的資料庫下會有大小寫區分,比如否用 ` 以及 " 裝飾欄位別名
dolphinscheduler
下配置datax
任務時環境名稱
(配置的datax
環境變數) 這一項為必選,不然任務拋錯我不負責喲?