datax開啟hana支援以及dolphinscheduler開啟datax任務

funnyZpC發表於2022-07-10

datax開啟hana支援以及dolphinscheduler開啟datax任務

前面(@,@)

前段時間因為要做異構資料匯入匯出,所以搜了下,發現這類工具收費的居多,使用起來未必趁手~
於是我找了下相關開源工具,目前,對於非開源的,我找到的大概有三種方式:

  • 1.springboot+mybatis寫程式碼做匯入匯出->固定表可以這樣做,換張表結構不一樣又要重新開發
  • 2.使用kattle...一開始同事用的這款工具,不過它太重了,啟動卡半天、操作個欄位也卡半天,換個表還要重新建任務,屎一樣的操作體驗...
  • 3.使用datax,需要配置環境(javapython) ,以及寫任務檔案(json) 似乎也不是很高效快捷,真難為我了

直到最近我發現了一款工具可以配合著dolphinscheduler使用,那體驗簡直了..:爽歪歪?,這次我就講講如何操作~

一.準備


-- 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需要到包管理網站或者對應資料庫廠商官網下載,這裡下hanadriverhttps://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 :


到這裡,dataxhana配置已經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
  • 執行結果:

還有幾個小的注意事項是:

  • dolphinschedulerdatax任務下查詢sql需要將欄位顯式的寫出,不可以用*號代替
  • 查詢的欄位要注意不同的資料庫下會有大小寫區分,比如否用 ` 以及 " 裝飾欄位別名
  • dolphinscheduler下配置datax任務時 環境名稱 (配置的datax環境變數) 這一項為必選,不然任務拋錯我不負責喲?

相關文章