數棧-離線數據開發學習筆記

個人博客原文鏈接

離線任務開發

離線任務開發模塊主要是設計數據計算流程,並實現爲多個相互依賴的任務,供調度系統自動執行的主要操作頁面。

對象

在數據開發階段,DTinsightBatch提供了4種對象:任務、腳本、資源和函數。它們之間的項目關係如下圖所示:

數棧對象之間的關係
任務:數據開發的主要對象,包含週期屬性和依賴關係,是數據計算的主要載體,支持多種類型的任務和節點適應不同場景,詳情請參見任務類型。
腳本:數據開發的輔助對象,不包含週期屬性和依賴關係,主要用於實現非週期的臨時數據處理,如臨時表的增刪改等,詳情請參見腳本開發。
函數和資源:任務中的代碼運行時需要引用的一些文件和計算函數,在任務正式執行前需要上傳,詳情請參見資源管理和函數管理。

流程

一個任務的開發和使用流程如下圖所示:

數棧任務開發流程

任務類型

  1. SQL任務
    SQL任務支持直接在Web端編輯和維護SQL代碼,並可方便地調試運行和協作開發。DTinsightBatch還支持代碼內容的版本管理和上下游依賴自動解析等功能。
    DTinsightBatch的SQL任務的代碼內容遵循Hive的語法。
  2. MR任務
    MR任務用於在Spark的MapReduce編程接口(Java API)基礎上實現的數據處理程序的週期運行。
    DTinsightBatch完全按照Spark官方的編程接口,將代碼打包成爲JAR類型的資源文件上傳到DTinsightBatch中,然後配置MR任務。
  3. 數據同步任務
    數據同步任務主要完成數據在不同存儲單元之間的遷移。
  4. PySpark任務
    Python任務用於在Spark的Python編程接口(Python API)基礎上實現的數據處理程序的週期運行。
    DTinsightBatch完全按照Spark官方的編程接口,您可以將代碼打包,並以資源文件的形式上傳到DTinsightBatch中,然後配置Python任務。
  5. 虛節點任務
    虛擬節點屬於控制類型節點,它不產生任何數據的空跑節點,常用於多個任務統籌節點的根節點。
  6. shell
    Shell類型任務支持標準的Shell語法,不支持交互式語法。
  7. 深度學習
    目前支持TensorFlow、MXNet2種深度學習框架,用戶可編寫基於深度學習框架的代碼,由DTinsightBatch提交到對應的框架中運行,並可以與DTinsightBatch中的其他任務配合形成調度依賴關係。
  8. 原生Python
    目前支持Python2、Python3的代碼,由DTinsightBatch提交運行,支持在頁面中直接運行Python代碼或打包上傳運行,可以與DTinsightBatch中的其他任務配合形成調度依賴關係。

新建任務

1.新建SQL任務
進入“數據開發”菜單,點擊“新建離線任務”按鈕,並填寫新建任務彈出框中的配置項。
任務名稱:需輸入英文字母、數字、下劃線組成,不超過64個字符。
任務類型:可選擇SQL、MR、數據同步、Python、虛節點。
存儲位置:此任務在頁面左側的任務存儲結構中的位置。
描述:此任務的描述,可輸入長度不超過200個的任意字符。
如下圖所示:
數棧-新建SQL任務

2.編輯SQL任務代碼
SQL任務創建好後,可以在代碼編輯器中編寫SQL語句(該SQL的語法爲Hive SQL)。

3.配置節點任務的調度屬性
DTinsightBatch提供了豐富的時間週期和依賴關係支持,並提供了基於時間的系統參數和自定義參數支持。
代碼和參數配置調試完畢後,一個週期任務需要發佈以後纔會觸發調度系統按配置週期定時產生運行實例並執行代碼。
爲使週期任務運行並在每次運行時適應上下文環境,需要配置時間週期和參數。

注:由於節點任務有周期調度屬性,因此內容建議以計算類語句爲主,表操作語句建議使用可視化建表和腳本開發等其他功能來運行和維護。
如下圖所示:
數棧-調度屬性

創建表

1.可視化建表
進入項目以後,數據模型>模型設計>建表

2.SQL建表
新建一個類型爲SQL的腳本文件,在編輯區填寫任意SQL語句(包括新建或修改表的DDL語句)並單擊直接運行。
建表語法如下:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
lifecycle N;

注:DTinsightBatch的建表語句與通用的Hive不同,建表時需要指定生命週期。

3.查找數據
點擊數據模型>模型設計,搜索表名,找到新建的表進行查詢。
如圖所示:
數棧-查找數據

表查詢

在數據開發頁面,表查詢模塊下,默認會展示當前項目的表,單擊表名即可看到表的列信息、分區信息以及數據預覽。

注:表查詢中不支持新建目錄,將表放到目錄下分類。
注:數據預覽的數據是實時的。
如圖所示:
數棧-表查詢

任務運行

DTinsightBatch提供了3種運行方式,以使任務中的計算語句生效,適用場景和限制條件如下:
數棧任務運行說明

發佈任務

提交任務操作,使得一個週期任務的代碼和週期配置進入調度系統,從第二天開始,調度系統將根據該任務的週期配置每天生成實例並定時運行,直到該任務被刪除,調度系統纔會停止爲該任務生成實例並運行。

注:新增或修改任務時,如果當天22:00前發佈成功,則在第二天的實例中即可看到結果;如果當天22:00後發佈成功,則在第三天的實例中才會看到結果。
注:一個週期任務只有發佈成功後纔會進入調度系統,從而使得調度系統按配置週期定時產生實例並運行。

  1. 發佈SQL任務
    單擊打開該任務,在右上角點擊“提交”按鈕,可輸入發佈的備註信息,點擊“確定”。
  2. 查看任務歷史版本
    發佈任務之後,系統會產生一條版本記錄,通過點擊任務開發-任務屬性-歷史發佈版本中查看發佈的時間和備註信息的。
    如圖所示:
    數棧-任務屬性
  3. 對比任務版本
    在SQL任務的歷史發佈版本中,可以查看到曾經提交過的代碼。選擇查看某個代碼版本,點擊代碼,系統可對比當前代碼與選中版本的代碼的差別。
凍結任務

如果需要讓某個任務停止運行一段時間,可以在任務開發模塊打開某任務,在右側調度依賴面板中勾選凍結,表示此任務進入凍結狀態。
數棧-調度屬性

  1. 處於凍結狀態的任務,其週期實例依然會生成,但不會運行。
  2. 對於存在依賴關係的多個任務,如果將上游任務A凍結,則下游任務B也會進入“凍結”狀態,B任務的實例也會產生,但不會運行,在B任務的執行日誌中會打印出是由於A任務被凍結纔沒有運行的。
  3. 週期任務的凍結,是第二天生效的,且凍結狀態的任務,生成的實例也是凍結狀態,不會直接運行,必須將實例解凍後再單擊重跑,纔會運行;如果需要緊急凍結任務,可以在週期實例中進行凍結操作。

注:依然可以對凍結狀態的任務執行補數據,補數據實例會正常運行。

刪除任務

如果在編輯過程中想要放棄一個任務編輯版本,或者週期任務提交後想從調度系統中去掉該任務的自動運行,可以在左側的任務面板中右鍵點擊此任務,選擇刪除。
數棧-刪除任務

  1. 如果此任務被其他任務依賴(是其他任務的上游任務),則此任務不能被刪除,您需要先解除依賴關係再進行刪除。
  2. 任務刪除後,已生成的任務實例不會被刪除,但會運行失敗。
搜索任務

當任務數量很多時,可以在數據開發界面中的上方點擊搜索,或按下Ctrl+P快捷鍵,通過輸入任務名稱並按下回車搜索並打開任務。

調度屬性配置

任務的時間屬性目前支持月、周、天、小時和分鐘5種配置方式。

注1:上游依賴的實例沒有全部運行成功並且定時運行時間已到,則實例不會運行。
注2:上游依賴的實例全部運行成功並且定時運行時間還未到,則實例不會運行。
注3:上游依賴的實例全部運行成功並且定時運行時間已到,則實例具備了運行的條件,待其獲得集羣的計算資源後即可以開始運行,集羣資源的分配由Spark集羣分配,用戶不可干預。

調度屬性

調度屬性的配置包括如下內容:此任務接受調度還是停止調度?此任務在什麼時間生效?多長時間間隔運行一次?具體什麼時候運行?如下圖所示:

數棧-調度屬性

  1. 調度狀態
    選中“凍結”,表示此任務停止調度,不會進行實際的計算(通常此功能用於暫時不需要運行,但也不想刪除的任務); 若勾選“凍結”,任務每天仍會產生實例,但調度時會直接返回失敗狀態,不會真正運行任務邏輯。
  2. 生效日期:任務只在生效日期內執行;
  3. 調度週期:分爲{天;周;月;小時;分鐘},若選中“天”,則表示此任務每天執行一次;
  4. 起調時間:用戶設定調度週期後,還需要設定具體在哪個時刻點啓動任務。根據用戶選擇的調度週期不同,起調時間需要配置不同的參數。
任務實例的生成

DTinsightIDE在每天22:00統一生成第二天所有需要的任務實例,基於以上設計,任務開發時需要注意任務的提交時間,這裏以一個天週期調度任務A爲例:

數棧-任務實例的生成

任務被配置爲凍結是否生成實例?
答:處於凍結狀態的任務,其週期實例依然會生成,但不會運行。
對於存在依賴關係的多個任務,如果將上游任務A凍結,則下游任務B也會進入“凍結”狀態,B任務的實例也會產生,但不會運行,在B任務的執行日誌中會打印出是由於A任務被凍結纔沒有運行的。

任務被刪除是否會影響實例的運行?
答:如果此任務被其他任務依賴(是其他任務的上游任務),則此任務不能被刪除,您需要先解除依賴關係再進行刪除。
任務刪除後,已生成的任務實例不會被刪除,但會運行失敗 。

想在每月的最後一天計算當月數據怎麼辦?
答:目前系統不支持配置每月最後一天,因此如果時間週期選擇每月31日,那麼在有31日的月份會有一天調度,其他日期都是生成實例然後直接設爲運行成功。
需要統計每個月的數據時,建議選擇每月的1日運行,計算上個月的數據。

參數配置

爲使任務自動週期運行時能動態適配環境變化,DTinsightIDE提供了參數配置的功能。
應用場景:某任務爲每天調度一次,需要統計昨天的歷史數據,那麼可以在SQL或MR任務中添加業務日期變量,此變量需要隨着系統時間而變化,即實現“今天的任務處理昨天的數據”。

1.系統參數
DTinsightIDE提供了4個系統參數,定義如下:
${bdp.system.cyctime}:一個實例的定時運行時間,默認格式爲:yyyyMMddHHmmss。
${bdp.system.bizdate}:一個實例計算時對應的業務日期,業務日期默認爲定時運行日期的前一天,以yyyyMMdd的格式顯示。
${bdp.system.currmonth}:一個實例的定時運行時間所在的月份,默認以yyyyMM的格式顯示。
${bdp.system.premonth}:一個實例的定時運行時間的上一個月,以yyyyMM的格式顯示。

從定義可知,運行時間和業務日期有如下計算公式:運行時間=(業務日期+1)+定時時間。

注:若使用系統參數,無需在編輯框設置,直接在代碼中引用bdp.system.bizdate{bdp.system.bizdate}和{bdp.system.cyctime}即可,系統將自動替換代碼中對這兩個參數的引用字段。

2.自定義參數
使用自定義參數的使用方式:需要先在代碼中編輯key1,{key1},{key2},然後在任務參數面板中輸入“key1=value1 key2=value2”方可生效。

常量:直接替換的字符串或數字,例如“key1=123 key2=abc”。

變量:基於bdp.system.cyctime取值計算出的取值,例如“key1=${yyyy}”表示按bdp.system.cyctime的值取年的部分作爲結果替換該參數。
變量的格式:變量的格式支持yyyyMMddHHmmss,其中MM表示月份,mm表示分鐘,HH表示24小時制的小時。
常用變量參數配置列表:
後N周:yyyyMMdd+7N
前N周:yyyyMMdd-7
N
後N天:yyyyMMdd+N
前N天:yyyyMMdd-N
後N小時:HHmmss+N/24
前N小時:HHmmss-N/24
後N分鐘:HHmmss+N/24/60
前N分鐘:HHmmss-N/24/60

依賴關係

在調度配置中,會需要配置兩個任務級別的依賴:任務間依賴和跨週期依賴。

1.任務間依賴
若某任務B必須在任務A完成後運行,則A爲B的上游任務,這種依賴關係可通過如下方式配置:在“上游任務”輸入框,輸入任務關鍵字,在列出的可選任務中選中某個任務,此任務被添加到上游任務列表中,即完成了A、B間的依賴關係配置。

注:一個任務可以依賴多個上游任務,同樣,一個任務可被多個任務依賴。依賴屬性爲非必填項,當下遊任務需依賴上游任務產出數據,則可配置依賴關係。
注:上游任務失敗後,下游任務不會運行,但其狀態會被置爲失敗狀態。

2.跨週期依賴
配置任務的跨週期依賴,如:天調度任務中,今天需要執行的數據依賴本任務昨天執行的數據,那麼可以配置依賴昨天任務的週期,這樣一來,昨天的實例必須先執行成功,今天的實例纔可以調度起來,這種依賴主要是體現在任務調度實例的依賴。

注:依賴屬性配置的調度依賴是同週期依賴和跨週期依賴不衝突。任務A可以配置依賴屬性依賴任務B,也可以配置跨週期依賴依賴B,如此任務A既依賴任務B,本週期也依賴任務B上週期。

腳本開發

腳本文件是對週期任務的補充,通常用於輔助數據開發過程,主要用於實現非週期的臨時數據處理,如臨時表的增刪改等,因此不包含週期屬性和依賴關係。

腳本文件僅支持SQL類型,並且僅支持頁面直接運行生效,不支持發佈,主要使用流程如下圖所示:

數棧-腳本開發流程

1.新建腳本
選中左側的腳本管理面板,點擊新建腳本按鈕,填寫新建腳本文件彈出框中的配置,如圖所示:

數棧-創建腳本

腳本名稱:需輸入英文字母、數字、下劃線組成,不超過20個字符。
任務類型:目前僅支持SQL類型的腳本,不支持其他類型腳本。
存儲位置:此任務在頁面左側的任務存儲結構中的位置。
描述:此任務的描述,可輸入長度不超過200個的任意字符。

腳本信息輸入完畢後,單擊確認,腳本文件創建成功。打開創建好的腳本文件,即可進行腳本編輯。

2.編輯腳本
腳本文件通常用於實現非週期的臨時數據處理,如臨時表的增刪改,一次性的數據初始化或查詢任務等。腳本編輯完成後,單擊保存,下次打開網頁時即可看到最近一次保存的內容。

3.運行代碼
保存完畢後,可以選中部分代碼單擊運行。也可以不選中任何代碼而直接運行,那麼將運行全部代碼。

4.查看日誌
任務觸發運行後,在編輯區下方會顯示日誌頁,如果有語句的運行結果返回了數據集,則在日誌頁旁顯示結果頁,也支持結果下載。

無論運行幾次,日誌頁只有一個,僅顯示最近一次觸發運行的日誌信息,之前的日誌會被覆蓋。結果頁可以存在多個,按語句執行順序依次顯示,最多可以顯示20個結果頁,方便您進行對比數據等操作。

多個語句觸發執行時,這些語句將串行執行,日誌內容依次顯示在日誌頁中。結果則按每個語句的執行順序分別顯示在不同的結果頁中。

5.刪除腳本
右鍵單擊選中的腳本,選擇刪除即可。

資源管理

如果在代碼或函數中需要使用.jar等資源文件,那麼需要先將資源上傳至該項目的項目空間下,然後在函數中進行引用,如圖所示:

數棧-資源管理

注:資源管理通常使用在UDF等自定義函數的場景中,因此可以將資源管理理解爲函數管理的一個步驟。

1.上傳資源
可上傳jar/Python類型的資源,上傳後資源會同步至DTinsightIDE中。
資源名稱:需輸入英文字母、數字、下劃線組成,不超過20個字符。
資源類型:目前僅支持jar或Python類型的資源,不支持其他類型資源。
存儲位置:此資源在頁面左側的資源管理存儲結構中的位置。
描述:此資源的描述,可輸入長度不超過200個的任意字符。

注:DTinsightIDE不支持批量上傳資源,同時也請您注意上傳資源的大小,超過100M的文件,無法上傳。

2.在函數中引用資源
如果現有的系統內置函數無法滿足您的需求,DTinsightIDE支持創建自定義函數,實現個性化處理邏輯。將實現邏輯的Jar包上傳至項目空間下,便可在創建自定義函數的時候進行引用。

3.不支持在代碼中引用資源
DTinsightIDE不支持在代碼中引用資源,只支持在函數中引用資源。

4.刪除資源
如果需要刪除一個資源,在資源管理中右鍵單擊該資源,選擇刪除即可。

注:刪除資源後,引用該資源的函數或代碼在運行時會報錯,故請慎重操作。如有改動,儘量通知到依賴該資源的其他對象的負責人。

函數管理

1.函數的使用
目前DTinsightIDE的工作對象大部分爲SQL類型的腳本和任務。在編輯SQL類型的腳本和任務的代碼時,常需要使用各種函數對數據做標準化處理。

函數管理,是DTinsightIDE提供的專用於對SQL 編輯時需要的系統函數和自定義函數進行管理的功能,在此頁面可以進行新建目錄、新建函數的操作。

函數管理模塊下顯示的全部函數,無論是系統默認的還是自定義函數,僅用於SQL類型的任務和腳本。

函數的具體應用場景:

數棧-函數應用流程

2.系統函數
系統默認提供以下幾類系統函數:
1.日期函數
2.數學函數
3.字符函數
4.聚合函數

3.自定義函數
用戶自定義函數(User Defined Function,簡稱 UDF),是用戶除了使用 DTinsightIDE提供的內建函數外,自行創建的函數,用於滿足個性化的計算需求。自定義函數在使用上與普通的內建函數類似。

創建自定義函數流程:

數棧-創建自定義函數流程

具體操作步驟:

  • 在本地編寫代碼並編譯爲Jar包
    在本地Java環境中按照Spark的UDF框架編寫Java代碼實現函數,本示例的代碼如下所示
    import org.apache.hadoop.hive.ql.exec.UDF;
    public class HelloUDF extends UDF{
        public String evaluate(String str){
            try{
                return "helloWorld" + str;
            }catch (Exception e){
                return null;
            }
        }
    }
    
    將以上代碼編譯成Jar包。
  • 上傳資源到DTinsightIDE
    在任務開發模塊,點擊左側的資源管理面板並上傳資源文件。在目錄樹中選擇一個文件夾,然後右鍵選擇上傳資源。
    填寫資源上傳彈出框中的各配置項,提交後資源創建成功。
  • 新建自定義函數並引用資源
    進入DTinsightIDE的數據開發模塊,打開左側的函數管理面板。在目錄樹中選擇一個文件夾,然後右鍵選擇新建函數,填寫彈出框中的各配置項。
    數棧-註冊自定義函數
  • 在SQL任務或腳本中使用函數

4.查看函數
單擊函數名,可以查看函數的類型、命令格式以及參數說明,如下圖所示:

數棧-查看函數

5.刪除函數
在函數管理頁面找到需要刪除的函數,右鍵單擊,在菜單欄選擇刪除,即可刪除該函數。僅自定義函數可以被刪除,系統函數無法被刪除。

導入本地數據

DTinsightIDE支持將保存在本地的文本文件中的數據上傳到項目空間的表中。

本地文本文件上傳的限制如下:

  • 文件類型:僅支持.txt、.csv和.log格式。
  • 文件大小:不超過100M。
  • 操作對象:導入分區表時,分區不允許爲中文。

操作步驟
1.單擊導入,選擇導入本地數據。
2.選擇本地數據文件,配置導入信息,單擊下一步。
3.如果導入數據的表已存在,搜索表名即可。
4.如果沒有創建導入數據的表,則可以單擊去新建表,輸入建表語句後,單擊確認。
5.選擇導入數據的表名後,選擇字段匹配方式(按位置匹配或按名稱匹配)。選擇按位置匹配以後,如果是分區表,則會提示分區的選擇,同時可以點擊檢測按鈕,測試分區是否存在,檢測後單擊導入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章