一、目的
在實際項目中,從Kafka到HDFS的數(shù)據(jù)是每天自動生成一個文件,按日期區(qū)分。而且Kafka在不斷生產(chǎn)數(shù)據(jù),因此看看kettle是不是需要時刻運行?能不能按照每日自動生成數(shù)據(jù)文件?
為了測試實際項目中的海豚定時調(diào)度從Kafka到HDFS的kettle任務(wù)情況,特地提前跑一下海豚定時調(diào)度這個任務(wù),看看到底什么情況。
二、海豚調(diào)度任務(wù)配置
(一)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?
(二)定時任務(wù)設(shè)置
定時任務(wù)設(shè)置為每天的零點,零點一到開始執(zhí)行任務(wù)
(三)最后工作流情況
三、啟動工作流
工作流啟動,成功!工作流一直在跑
相應(yīng)的任務(wù)實例也在跑!
四、啟動工作流每天HDFS情況
(一)第一天為2023/8/30日
由于第一天開始執(zhí)行任務(wù),因此自動生成2023/08/30的HDFS文件
(二)第二天為2023/8/31日
1、2023/08/31早上更新
(1)04_Kafka_to_HDFS_turnratio任務(wù)
第二天的海豚任務(wù)自動調(diào)度,自動生成2023/08/31的HDFS文件
但問題是,除了再跑31日的任務(wù)外,30日的任務(wù)還在跑,可能是定時配置有問題,需要優(yōu)化
而且這樣搞容易把kettle搞出問題!
2、2023/08/31晚上更新
(1)04_Kafka_to_HDFS_turnratio任務(wù)
不設(shè)置定時任務(wù),kettle任務(wù)一直運行,已經(jīng)生成8月31日的文件,觀察明天會不會自動生成9月1日的數(shù)據(jù)文件
已生成的8月31日文件
(2)01_Kafka_to_HDFS_queue任務(wù)
不設(shè)置定時任務(wù),kettle任務(wù)一直運行,已經(jīng)生成8月31日的文件,觀察明天會不會自動生成9月1日的數(shù)據(jù)文件
已生成的8月31日文件
如果明早不能自動生成9月1日的文件,那就要設(shè)置海豚定時為每天的執(zhí)行時間為0時0分0秒到23時59分59秒? 或者在腳本里設(shè)置時間? 或者在kettle里設(shè)置時間????
(三)第三天為2023/9/1日
1、2023/09/01早上更新
昨晚海豚調(diào)度的兩個kettle任務(wù)以失敗告終,沒有自動生成9月1日的數(shù)據(jù)文件
今日再嘗試其他的方式
2、2023/09/01下午更新
下午嘗試用Crontab定時任務(wù)調(diào)度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
設(shè)置每天的17點的6分到7分中執(zhí)行
但是日志文件顯示kettle任務(wù)卻一直再跑
當(dāng)然,HDFS中確實生成了9月1日今日的文件,而且任務(wù)運行時間是我設(shè)置的17點7分
這個方法不行,后面再試試其他方法?怎么就不會設(shè)置任務(wù)停止呢
(四)第四天為2023/9/4日
1、2023/09/04早上更新
由于Kafka里有時間戳字段,因此在kettle任務(wù)里獲取當(dāng)前系統(tǒng)時間戳的日期字段、然后文件名直接從這個日期字段獲取
(1)當(dāng)前系統(tǒng)時間戳的日期字段
(2)HDFS輸出中文件名直接獲取這個日期字段,這樣kettle任務(wù)運行時,是不是能自動生成每天的數(shù)據(jù)文件?
(3)測試結(jié)果,任務(wù)可以跑通,但是HDFS生成的文件不知卻在哪?
終于查到了,原來這樣導(dǎo)出的文件不在HDFS,而在kettle的安裝文件里,即在本地
而且這么直接以日期命名也有問題,因為有多個Kafka,不可能僅僅以日期命名區(qū)分
2、2023/09/04晚上更新?
因為上午的思路有問題,導(dǎo)出的文件沒有在HDFS中,反而在本地,于是下午又換了種思路。
還是從系統(tǒng)獲得時間day,但是文件路徑直接寫成HDFS的文件路徑+day,這樣的url字段才是HDFS輸出控件中的文件名字段
(1)用海豚調(diào)度對比,定時調(diào)度01_Kafka_to_HDFS_queue任務(wù)
目前已生成生成9月4日的文件
(2)用海豚調(diào)度對比,不加定時調(diào)度04_Kafka_to_HDFS_turnratio任務(wù)
目前已生成生成9月4日的文件
(五)第五天為2023/9/5日
1、2023/09/05早上更新
雖然自動生成了9月5日的文件,但是由于數(shù)據(jù)量過大、加上把hadoop.tmp.dir放在了/opt/soft/hadoop313/hadooptmp,導(dǎo)致opt文件夾磁盤溢出,使得namenode處于安全模式。
花了一上午時間終于解決NameNode的安全模式問題,發(fā)現(xiàn)應(yīng)該把HADOOP 運行時存儲路徑放在home目錄下,因為home的磁盤空間最大
2、2023/09/05晚上更新
驚喜?。。?/span>
可能已經(jīng)找到了解決方法,直接對Kafka里的時間戳字段進行截取,然后拼接文件路徑,從而形成一個可以根據(jù)時間戳字段的日期變動的HDFS文件,即每天自動生成一個數(shù)據(jù)文件
(1)通過Java自定義文件名? 字段url(HDFS路徑+截取的可變的時間戳字段)
var url="hdfs://root:***@hurys22:8020/rtp/queue_dynamic/queue_dynamic"+substr(create_time,0,10)
(2)在HDFS輸出控件的文件就選擇url字段
(3)結(jié)果
已經(jīng)生成了9月5日的數(shù)據(jù)文件,不需要海豚定時調(diào)度,只需要海豚一直跑kettle任務(wù)即可!
雖然還是生成了9月5日的數(shù)據(jù)文件,不過我今天下午按照生成每小時維度的數(shù)據(jù)文件測試過
下午16時運行任務(wù),生成了16時的數(shù)據(jù)文件,然后到17時,又生成了17時的數(shù)據(jù)文件,這兩個數(shù)據(jù)文件都在跑,而且HDFS里大小顯示都為0。
不過區(qū)別是,16時的數(shù)據(jù)是完整的,17時的數(shù)據(jù)文件是不斷增加的。因為Kafka是實時的,17時只會發(fā)送17時的數(shù)據(jù),不會發(fā)送16時數(shù)據(jù)。下面是16時的文件數(shù)據(jù)
16時的數(shù)據(jù)文件是有固定的數(shù)據(jù),17點后就沒有再寫入數(shù)據(jù)。之所以看不到這個這個block的大小,是因為寫入數(shù)據(jù)的規(guī)模太小了,等到這個寫入的數(shù)據(jù)規(guī)模達到128MB,即一個塊大小后才會看到這個block的數(shù)據(jù)。
所以只要一直運行這個kettle任務(wù)、不斷寫入數(shù)據(jù)即可,只要寫入的數(shù)據(jù)規(guī)模達到128MB,第一個block就會被看到。
已用海豚調(diào)度一個kettle任務(wù),沒有定時,就一直跑。目前HDFS已生成了9月5日的數(shù)據(jù)文件,明天就可以觀察幾點
1、有沒有自動生成明天9月6日的數(shù)據(jù)文件
2、今天9月5日的數(shù)據(jù)文件里面的數(shù)據(jù)是不是固定的、完整的,晚上12點之后不再寫入
3、等到寫入數(shù)據(jù)規(guī)模達到128MB看第一個block的數(shù)據(jù)大小可不可看到?
明天9月6日除了看這幾點外,還用flume去做Kafka到HDFS的采集工作,以防萬一,這兩天被這個問題搞得頭疼,kettle真是一個易入門難精通的工具!
(六)第六天為2023/9/6日
1、2023/09/06早上更新
由于昨晚Kafka突然有問題,導(dǎo)致kettle沒能導(dǎo)入數(shù)據(jù)到HDFS的文件,今早已重新啟動Kafka服務(wù)
(1)目前已重新啟動海豚調(diào)度的kettle服務(wù)
(2)目前已自動生成9月6日的數(shù)據(jù)文件
(3)只能明天9月7日看一下昨晚的3個問題
1、有沒有自動生成明天9月7日的數(shù)據(jù)文件
2、今天9月6日的數(shù)據(jù)文件里面的數(shù)據(jù)是不是固定的、完整的,晚上12點之后不再寫入
3、等到寫入數(shù)據(jù)規(guī)模達到128MB看第一個block的數(shù)據(jù)大小可不可看到?
2、2023/09/06下午更新
(1)為了以防萬一,加了個對比測試??纯慈绻惶斓臄?shù)據(jù)放不滿一個block或者部分多余數(shù)據(jù)放不滿一個block,可不可以正常顯示?即使它總的寫入數(shù)據(jù)量大于128MB
不僅多加了幾臺模擬設(shè)備推送數(shù)據(jù),還對動態(tài)排隊數(shù)據(jù)和靜態(tài)排隊數(shù)據(jù)兩個kettle任務(wù)進行對比
(2)動態(tài)排隊數(shù)據(jù)有自動日期分區(qū),可以自動分成不同日期的文件,就是昨晚跑的kettle任務(wù)
文章來源地址http://www.zghlxwxcb.cn/news/detail-699985.html
(3)而靜態(tài)排隊數(shù)據(jù)沒有日期分區(qū),就往第一個日期文件里寫入數(shù)據(jù)
目前靜態(tài)排隊數(shù)據(jù)也已經(jīng)生成了9月6日的數(shù)據(jù)文件,后面會一直寫入這個文件
明早對比這兩個kettle任務(wù)的數(shù)據(jù)文件看看情況
(七)第七天為2023/9/7日
1、2023/09/07早上更新
A、HDFS文件有日期分區(qū)的動態(tài)排隊數(shù)據(jù)kettle任務(wù)狀況
(1)首先是自動生成9月7日的文件
(2)然后是6日的數(shù)據(jù)文件固定,沒有7日的數(shù)據(jù)
(3)6日的數(shù)據(jù)這一塊由于只有62.8MB,因此HDFS的塊沒有顯示大小
B、HDFS文件沒有日期分區(qū)的靜態(tài)排隊數(shù)據(jù)kettle任務(wù)狀況
由于寫入的HDFS文件沒有日期分區(qū),而且數(shù)據(jù)量寫入超過了128MB,所以這一塊的數(shù)據(jù)雖然在不斷寫入,但是這一塊的文件顯示大小為128MB
疑問:現(xiàn)在任務(wù)依然運行,我想看看這個塊已經(jīng)有128MB后,會不會在其他block寫入數(shù)據(jù)?
2、2023/09/07晚上更新
A、HDFS文件有日期分區(qū)的動態(tài)排隊數(shù)據(jù)kettle任務(wù)狀況
(1)今日9月7日寫入的數(shù)據(jù)量超過128MB,因此HDFS已顯示文件大小
總結(jié)一下:用kettle采集Kafka數(shù)據(jù)寫入HDFS這條路是可行的,只要設(shè)置變動的文件名、生成每日的數(shù)據(jù)文件,然后一直跑任務(wù)就好!?。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-699985.html
到了這里,關(guān)于一百六十八、Kettle——用海豚調(diào)度器定時調(diào)度從Kafka到HDFS的kettle任務(wù)腳本(持續(xù)更新追蹤、持續(xù)完善)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!