用海豚調度器定時調度從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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...