<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      dolphinscheduler簡單任務定義及復雜的跨節點傳參

      dolphinscheduler簡單任務定義及跨節點傳參

      轉載請注明出處 http://www.rzrgm.cn/funnyzpc/p/16395094.html

      寫在前面

      dolphinscheduler是一款非常不錯的調度工具,本文我就簡稱ds啦,可單機可集群可容器,可調度sql存儲過程http大數據,也可使用shellpythonjavaflink等語言及工具,功能強大類型豐富,適合各類調度型任務,社區及項目也十分活躍,現在github中已有8.2k的star??
      所以,本篇博文開始會逐步講一些ds相關的東西,也期待各位同行能接觸到此并能實際解決一些生產上的問題~??

      一.準備工作

      閱讀本博文前建議您先閱讀下官方的文檔[https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/parameter/context.html)(https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/parameter/context.html)(雖然也會碰到一些坑??)
      這里,先準備下sql表資源,以下為`postgresql`的`sql`腳本:
      

      (表結構)

      
      CREATE TABLE dolphinscheduler.tmp (
      	id int4 NOT NULL,
      	"name" varchar(50) NULL,
      	"label" varchar(50) NULL,
      	update_time timestamp NULL,
      	score int4 NULL,
      	CONSTRAINT tmp_pkey PRIMARY KEY (id)
      );
      

      (表數據)

      INSERT INTO tmp (id,"name","label",update_time,score) VALUES
      	 (3,'二狗子','','2022-07-06 21:49:26.872',NULL),
      	 (2,'馬云云','',NULL,NULL),
      	 (1,'李思','','2022-07-05 19:54:31.880',85);
      

      因為個人使用的postgresql的數據庫,如果您是mysql或者其他數據的用戶,請自行更改以上表和數據并添加到庫中即可
      表及數據入庫,請將tmp所屬的庫配置到 ds后臺->數據源中心->創建數據源 ,以下是我的配置,記住,這里面的所有數據庫配置均遵守所屬數據庫類型的jdbcdriver的配置參數,配置完成也會在ds的數據庫生成一條jdbc的連接地址,這點要明白~

      二.簡單的項目創建及說明

      因為`ds`的任務是配置在項目下面,所以第一步得新建一個項目,這樣:`ds后臺`->`項目管理`->`創建項目`,這是我創建的,請看:
      

      準備完項目之后,鼠標點進去,并進入到 工作流定義菜單 頁面,如下圖:

      先簡單到解釋下ds的一點兒基本結構,首先,ds一般部署在linux服務器下,創建任務的用戶需要在admin賬戶下創建,重要的是創建的每個工作賬戶需要與操作系統用戶一一對應,比如你創建了一個 test 的ds賬戶,那ds所在的服務器也必須有一個test的賬戶才可行,這是ds的規則,我沒法解釋為什么。
      每個用戶下(除了admin外)所能創建的調度任務均在各自創建的項目下,每個項目又分為多個任務(工作流定義),一個任務下又可分為多個任務節點,下圖為任務定義:

      ok,如果已經準備好以上步驟,下面開始定義一個簡單的調度任務,繼續哈~

      三.簡單的參數傳遞

      先看表:

      我們先做個簡單的,比如圖中,如果二狗子的本名叫:李思,需要我們取id=1name放到id=3label中,并且更新update_time

      • 1.這里第一步 在工作流定義列表,點擊 創建工作流 就進入一個具體的任務(工作流)的定義,同時我們使用的是sql任務,所以就需要從左側拖動一個sql任務到畫布中(右側空白處):

        因為拖動sql任務到畫布會自動彈出節點定義,上圖為當前節點的一個定義,重點是:數據源sql類型sql語句,如官方所說,如果將name傳遞到下游,則需要在自定義參數重定義這個nameout方向 類型varchar

      • 2.因為傳遞到參數需要寫入到表,這里我們再定義一個節點,這個節點負責接收上游傳遞到name,執行update時使用這個name,以下是我的定義:

        看到沒,這里不僅僅要注意sql類型(sql類型sql語句一一對應的,類型不能錯) ,還有就是前置任務一定要選中(上面定義的)node1節點。
        另外,需要注意的是當前任務是上下游傳參,所以在node2中是直接使用node1中定義的name這個參數哈

      • 3.定義完成當前任務就需要保存:點右上角保存,填寫并保存后點關閉以退出定義:

      • 4.因為定義的任務需要上線了才可執行,所以,在工作流定義列表先點該任務的黃色按鈕(任務上線),然后才是點綠色按鈕(執行任務):

      • 5.任務執行成功與否,具體得看任務實例,這是執行node2節點的日志:

        順帶再看看數據庫表是否真實成功:

        完美??

      四.復雜的跨節點傳參

      首先看表:

      思考一個問題:可以看到李思score85,根據score應該被評為 B(>=90的為A)并寫入到label字段,該怎么辦呢,如果這個分數是90分又該怎么辦呢,如果根本沒有score(分值) 這個任務是不是就不需要更新李思的label(評分)呢?
      對于上面問題可以有一些偏門的解決方法,比如在sql中塞一個異常值,這樣看似不錯,不過作為調度工具建議還是在condition節點或者switch節點處理是最好的,不過就目前我用的2.0.5版本的ds對于這兩類任務節點是沒法接收參數的,這是一個遺憾;遂~個人覺得較好的方式是在寫入節點之前增加一個判斷節點,將錯誤拋出(沒有score的)最好~,對于此,我使用了一個shell的中間節點
      下面是我定義的三個節點:

      • node1節點定義:

      • node2節點定義:

      (腳本內容)

      #!/bin/bash
      echo "=====>input param start<====="
      echo "id=${id}"
      echo "score=${score}"
      echo "=====>input param end<====="
      
      id=${id}
      echo '${setValue(id2='$id')}'
      
      if [ "${score}" -ge "90" ];then
      	echo '${setValue(label2=level A)}'
      	echo "level A"
      elif [ "${score}" -ge "80" ];then
      	echo '${setValue(label2=level B)}'
      	echo "level B"
      elif [ "${score}" -ge "60" ];then
      	echo '${setValue(label2=level C)}'
      	echo "level C"
      elif [ "${score}" -ge "0" ];then
      	echo '${setValue(label2=F!)}'
      	echo "F!"
      else
      	echo "NO score ,please check!"
          exit 1
      fi
      
      • node3節點定義:

      • 看一眼結果??:

      五.中間的坑

      對于復雜節點傳參數也碰到一些坑,這些坑大概有這些:

      • 1.對于shell腳本不熟悉的,判斷節點其實還是有一些難度的,這是很重要的一點
      • 2.node2(判斷節點)不能有重復的參數,不管局部的還是node1(上一級)傳遞過來的,均不能重復
      • 3.因為在node2(判斷節點)需要將id以及label繼續往下傳(to node3),這時候就需要給id以及label定義一個映射的out變量(id2label2)
      • 4.node2重新設置參數麻煩,需要在shell中重新定義變量(id2label2),同時需要在shell任務內使用拼接的方式賦值(如:echo '${setValue(id2='$id')}')
      • 5.sql類型以及不同節點下不同參數時常搞錯,不是任何節點都可以接收上級節點參數,以及局部變量傳遞變量以及全局變量優先級區別及可能造成沖突
      • 6.ds列表傳參(2.0是不可以的)很雞肋,對于列表傳參又不能在下一級節點做循環賦值,這點對于ds是有改進的空間的
      • 7.等等...

      對于ds還有很多可擴展的地方(因為實際需要),所以我就做了一些二次開發??,后面會聊...大家期待喲??

      posted @ 2022-07-08 18:21  funnyZpC  閱讀(2751)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 午夜欧美精品久久久久久久| 国产成人精品一区二区三区无码| 高清国产av一区二区三区| 中国老熟妇自拍hd发布| 人妻少妇偷人精品视频| 高潮毛片无遮挡高清视频播放 | 日韩精品中文字幕人妻| 亚洲国产精品久久久天堂麻豆宅男 | 国产午夜福利视频在线| 正蓝旗| 亚洲欧美人成电影在线观看| 欧美成人午夜在线观看视频| 久久美女夜夜骚骚免费视频 | 国产毛片欧美毛片久久久| 亚洲岛国成人免费av| 亚洲综合色成在线观看| 久久久av男人的天堂| 内射一区二区三区四区| 最新精品国偷自产在线美女足| 永久免费AV无码国产网站| 女子spa高潮呻吟抽搐| 91在线视频视频在线| 亚洲成av人片一区二区| 精品国产亚洲一区二区三区| 五月综合激情婷婷六月| 午夜在线观看成人av| 亚洲国产精品一区在线看| 亚洲区综合区小说区激情区| 欧美成人精品| 精品久久久久久无码人妻蜜桃| www亚洲精品| 蓝田县| 一本av高清一区二区三区| 韩国午夜福利片在线观看| 男女啪啪18禁无遮挡激烈| 大香伊蕉在人线国产最新2005| 亚洲精品男男一区二区| 依依成人精品视频在线观看| 人妻系列无码专区69影院| 无码福利写真片视频在线播放| a4yy私人毛片|