用海豚調度器定時調度從Kafka到HDFS的kettle任務腳本

来源:https://www.cnblogs.com/DolphinScheduler/p/18136188
-Advertisement-
Play Games

在實際項目中,從Kafka到HDFS的數據是每天自動生成一個文件,按日期區分。而且Kafka在不斷生產數據,因此看看kettle是不是需要時刻運行?能不能按照每日自動生成數據文件? 為了測試實際項目中的海豚定時調度從Kafka到HDFS的Kettle任務情況,特地提前跑一下海豚定時調度這個任務,看看 ...


在實際項目中,從Kafka到HDFS的數據是每天自動生成一個文件,按日期區分。而且Kafka在不斷生產數據,因此看看kettle是不是需要時刻運行?能不能按照每日自動生成數據文件?

為了測試實際項目中的海豚定時調度從Kafka到HDFS的Kettle任務情況,特地提前跑一下海豚定時調度這個任務,看看到底什麼情況,也給大家提供一個參考!

海豚調度任務配置

(一)SHELL腳本配置

!/bin/bash

source /etc/profile

/opt/install/kettle9.2/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/kafka_to_hdfs/ -trans=04_Kafka_to_HDFS_turnratio level=Basic >>/home/log/kettle/04_Kafka_to_HDFS_turnratio_`date +%Y%m%d`.log

file

(二)定時任務設置

定時任務設置為每天的零點,零點一到開始執行任務

file

(三)最後工作流情況

file

啟動工作流

file

工作流啟動,成功!工作流一直在跑

file

相應的任務實例也在跑!

啟動工作流每天HDFS情況

(一)第一天為2023/8/30日

由於第一天開始執行任務,因此自動生成2023/08/30的HDFS文件

(二)第二天為2023/8/31日

2023/08/31早上更新

(1)04_Kafka_to_HDFS_turnratio任務

file

第二天的海豚任務自動調度,自動生成2023/08/31的HDFS文件

但問題是,除了再跑31日的任務外,30日的任務還在跑,可能是定時配置有問題,需要優化

而且這樣搞容易把kettle搞出問題!

file

2023/08/31晚上更新

(1)04_Kafka_to_HDFS_turnratio任務

不設置定時任務,kettle任務一直運行,已經生成8月31日的文件,觀察明天會不會自動生成9月1日的數據文件

file

已生成的8月31日文件

file

(2)01_Kafka_to_HDFS_queue任務

不設置定時任務,kettle任務一直運行,已經生成8月31日的文件,觀察明天會不會自動生成9月1日的數據文件

file

已生成的8月31日文件

file

如果明早不能自動生成9月1日的文件,那就要設置海豚定時為每天的執行時間為0時0分0秒到23時59分59秒  或者在腳本里設置時間  或者在kettle里設置時間?我們試試看!

(三)第三天為2023/9/1日

2023/09/01早上更新

昨晚海豚調度的兩個kettle任務以失敗告終,沒有自動生成9月1日的數據文件

file

今日再嘗試其他的方式

2023/09/01下午更新

下午嘗試用Crontab定時任務調度Kettle腳本

\[root@hurys22 kettle\_job\_sh\]# crontab -l  
SHELL=/bin/bash

\#  */1 * * * * /bin/sh  /opt/install/kettle9.2/kettle\_job\_sh/test2.sh

06-07 17 * * * /bin/sh  /opt/install/kettle9.2/kettle\_job\_sh/01\_Kafka\_to\_HDFS\_queue.sh  

設置每天的17點的6分到7分中執行

file

但是日誌文件顯示kettle任務卻一直再跑

file

當然,HDFS中確實生成了9月1日今日的文件,而且任務運行時間是我設置的17點7分

file

這個方法不行,後面再試試其他方法?怎麼就不會設置任務停止呢

(四)第四天為2023/9/4日

2023/09/04早上更新

由於Kafka里有時間戳欄位,因此在kettle任務里獲取當前系統時間戳的日期欄位、然後文件名直接從這個日期欄位獲取

(1)當前系統時間戳的日期欄位

file

(2)HDFS輸出中文件名直接獲取這個日期欄位,這樣kettle任務運行時,是不是能自動生成每天的數據文件?

file

(3)測試結果,任務可以跑通,但是HDFS生成的文件不知卻在哪?

file

終於查到了,原來這樣導出的文件不在HDFS,而在kettle的安裝文件里,即在本地

file

而且這麼直接以日期命名也有問題,因為有多個Kafka,不可能僅僅以日期命名區分

2023/09/04晚上更新

因為上午的思路有問題,導出的文件沒有在HDFS中,反而在本地,於是下午又換了種思路。

file

還是從系統獲得時間day,但是文件路徑直接寫成HDFS的文件路徑+day,這樣的url欄位才是HDFS輸出控制項中的文件名欄位

file

(1)用海豚調度對比,定時調度01_Kafka_to_HDFS_queue任務

file

目前已生成生成9月4日的文件

(2)用海豚調度對比,不加定時調度04_Kafka_to_HDFS_turnratio任務

file

目前已生成生成9月4日的文件

file

(五)第五天為2023/9/5日

2023/09/05早上更新

雖然自動生成了9月5日的文件,但是由於數據量過大、加上把hadoop.tmp.dir放在了/opt/soft/hadoop313/hadooptmp,導致opt文件夾磁碟溢出,使得namenode處於安全模式。

花了一上午時間終於解決NameNode的安全模式問題,發現應該把HADOOP 運行時存儲路徑放在home目錄下,因為home的磁碟空間最大

file

2023/09/05晚上更新

驚喜!!!

可能已經找到瞭解決方法,直接對Kafka里的時間戳欄位進行截取,然後拼接文件路徑,從而形成一個可以根據時間戳欄位的日期變動的HDFS文件,即每天自動生成一個數據文件

(1)通過Java自定義文件名  欄位url(HDFS路徑+截取的可變的時間戳欄位)

var url="hdfs://root:***@hurys22:8020/rtp/queue\_dynamic/queue\_dynamic"+substr(create_time,0,10)

file

(2)在HDFS輸出控制項的文件就選擇url欄位

file

(3)結果

已經生成了9月5日的數據文件,不需要海豚定時調度,只需要海豚一直跑kettle任務即可!

雖然還是生成了9月5日的數據文件,不過我今天下午按照生成每小時維度的數據文件測試過

file

下午16時運行任務,生成了16時的數據文件,然後到17時,又生成了17時的數據文件,這兩個數據文件都在跑,而且HDFS里大小顯示都為0。

不過區別是,16時的數據是完整的,17時的數據文件是不斷增加的。因為Kafka是實時的,17時只會發送17時的數據,不會發送16時數據。下麵是16時的文件數據

file

16時的數據文件是有固定的數據,17點後就沒有再寫入數據。之所以看不到這個這個block的大小,是因為寫入數據的規模太小了,等到這個寫入的數據規模達到128MB,即一個塊大小後才會看到這個block的數據。

file

所以只要一直運行這個kettle任務、不斷寫入數據即可,只要寫入的數據規模達到128MB,第一個block就會被看到。

已用海豚調度一個kettle任務,沒有定時,就一直跑。目前HDFS已生成了9月5日的數據文件,明天就可以觀察幾點

1、有沒有自動生成明天9月6日的數據文件

2、今天9月5日的數據文件裡面的數據是不是固定的、完整的,晚上12點之後不再寫入

3、等到寫入數據規模達到128MB看第一個block的數據大小可不可看到?

明天9月6日除了看這幾點外,還用flume去做Kafka到HDFS的採集工作,以防萬一,這兩天被這個問題搞得頭疼,kettle真是一個易入門難精通的工具!

(六)第六天為2023/9/6日

2023/09/06早上更新

由於昨晚Kafka突然有問題,導致kettle沒能導入數據到HDFS的文件,今早已重新啟動Kafka服務

file

(1)目前已重新啟動海豚調度的kettle服務

file

(2)目前已自動生成9月6日的數據文件

file

(3)只能明天9月7日看一下昨晚的3個問題

1、有沒有自動生成明天9月7日的數據文件

2、今天9月6日的數據文件裡面的數據是不是固定的、完整的,晚上12點之後不再寫入

3、等到寫入數據規模達到128MB看第一個block的數據大小可不可看到?

2023/09/06下午更新

(1)為了以防萬一,加了個對比測試。看看如果一天的數據放不滿一個block或者部分多餘數據放不滿一個block,可不可以正常顯示?即使它總的寫入數據量大於128MB

不僅多加了幾台模擬設備推送數據,還對動態排隊數據和靜態排隊數據兩個kettle任務進行對比

(2)動態排隊數據有自動日期分區,可以自動分成不同日期的文件,就是昨晚跑的kettle任務

file

(3)而靜態排隊數據沒有日期分區,就往第一個日期文件里寫入數據

目前靜態排隊數據也已經生成了9月6日的數據文件,後面會一直寫入這個文件

file

明早對比這兩個kettle任務的數據文件看看情況

(七)第七天為2023/9/7日

2023/09/07早上更新

A、HDFS文件有日期分區的動態排隊數據kettle任務狀況

(1)首先是自動生成9月7日的文件

file

(2)然後是6日的數據文件固定,沒有7日的數據

file

(3)6日的數據這一塊由於只有62.8MB,因此HDFS的塊沒有顯示大小

file

B、HDFS文件沒有日期分區的靜態排隊數據kettle任務狀況

由於寫入的HDFS文件沒有日期分區,而且數據量寫入超過了128MB,所以這一塊的數據雖然在不斷寫入,但是這一塊的文件顯示大小為128MB

file

疑問:現在任務依然運行,我想看看這個塊已經有128MB後,會不會在其他block寫入數據?

2023/09/07晚上更新

A、HDFS文件有日期分區的動態排隊數據kettle任務狀況

(1)今日9月7日寫入的數據量超過128MB,因此HDFS已顯示文件大小

file

總結一下:用kettle採集Kafka數據寫入HDFS這條路是可行的,只要設置變動的文件名、生成每日的數據文件,然後一直跑任務就好!!!

file

本文由 白鯨開源 提供發佈支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這幾天系統更新,顯卡驅動由525.147.05升級到了535.171.04(tested),終端運行watch -n 1 nvidia-smi 實時顯示顯卡占用情況時,偶爾出現 Failed to initialize NVML: Driver/library version mismatch 問題 ...
  • 溫馨提示 不同的組件需要不同的docker配置(例如容器捲,埠,環境變數等),使用你懂得工具看hub.docker.com官方手冊。 不要死記硬背,因為這種東西不是天天要寫,過段時間就忘了,很容易引起挫敗感。 Dockerfile或者Docker-compose的編寫,可以安裝一些編輯器插件輔助編 ...
  • 鏡像分層的簡單直觀體現 在執行docker pull時,會發現多個Pull complete 字樣,就能體現分層,如果是一個文件,只會有一個Pull complete 。 docker pull redis Using default tag: latest latest: Pulling from ...
  • 極簡概括 官網:https://www.docker.com 利用比虛擬機更加輕量級的容器化虛擬技術,能夠低成本的把當前環境快速打包或在新環境部署相同子環境的運維工具,基於Go語言實現,跨平臺(支持Linux、Windows、MacOS)。 通俗類比:無論什麼牌子什麼價位的主機,都可以利用同一個的W ...
  • ESP32 Arduino開發 MQTT 目錄ESP32 Arduino開發 MQTT1. 安裝程式庫2. 編寫相關程式2.1. 引入頭文件2.2. 定義MQTT相關參數2.3. 創建對象2.4. 連接網路2.5. 連接MQTT伺服器2.6. MQTT回調函數3. 完整的代碼常式4. MQTT連接測 ...
  • 參考 參考閃客的系列,將開機到執行shell的整個過程濃縮成本文。 https://github.com/dibingfa/flash-linux0.11-talk bootsect.s 當按下開機鍵的那一刻,在主板上提前寫死的固件程式 BIOS 會將硬碟中啟動區的 512 位元組的數據,原封不動複製 ...
  • 目錄 目錄目錄購買伺服器環境要求硬體配置CPU記憶體磁碟網路軟體環境JRE(Java Runtime Environment)MySQL(可選)Web 伺服器(可選)Wget(可選)VIM(可選)瀏覽器支持名詞解釋~(符號)運行包工作目錄購買功能變數名稱伺服器安裝配置遠程連接阿裡雲網頁連接Xshell程式連接 ...
  • 以Flink為主的計算引擎配合OLAP查詢分析引擎組合進而構建實時數倉**,其技術方案的選擇是我們在技術選型過程中最常見的問題之一。也是很多公司和業務支持過程中會實實在在遇到的問題。 很多人一提起實時數倉,就直接大談特談Hudi,Flink的流批一體等,但實際上,**實時數倉包括任何架構體系的構建如... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...