一、目的
經(jīng)過6個(gè)月的奮斗,項(xiàng)目的離線數(shù)倉部分終于可以上線了,因此整理一下離線數(shù)倉的整個(gè)流程,既是大家提供一個(gè)案例經(jīng)驗(yàn),也是對(duì)自己近半年的工作進(jìn)行一個(gè)總結(jié)。
二、項(xiàng)目背景
項(xiàng)目行業(yè)屬于交通行業(yè),因此數(shù)據(jù)具有很多交通行業(yè)的特征,比如轉(zhuǎn)向比數(shù)據(jù)就是統(tǒng)計(jì)車輛左轉(zhuǎn)、右轉(zhuǎn)、直行、掉頭的車流量等等。
三、業(yè)務(wù)需求
(一)預(yù)估數(shù)據(jù)規(guī)模
(二)指標(biāo)查詢頻率
指標(biāo)的實(shí)時(shí)查詢由Flink實(shí)時(shí)數(shù)倉計(jì)算,離線數(shù)倉這邊提供指標(biāo)的T+1的歷史數(shù)據(jù)查詢
四、數(shù)倉技術(shù)架構(gòu)
(一)簡(jiǎn)而言之,數(shù)倉模塊的數(shù)據(jù)源是Kafka,終點(diǎn)是ClickHouse數(shù)據(jù)庫
第一步,用kettle采集Kafka的數(shù)據(jù)寫入到HDFS中;
第二步,在Hive中建數(shù)倉,ODS層、DWD層和DWS層
第三步,把Hive的DWS層處理好的結(jié)果數(shù)據(jù)用kettle同步到ClickHouse數(shù)據(jù)庫中
(二)注意點(diǎn)
1、ETL工具統(tǒng)一使用kettle
2、調(diào)度工具是海豚調(diào)度器
五、數(shù)倉環(huán)境部署
(一)部署原則:易部署、易維護(hù)
(二)部署工具及其版本
1、jdk1.8.0
2、MySQL8.0.31?
3、Kafka_2.13-3.0.0(Kafka自帶ZooKeeper)
4、ClickHouse21.9.5.16
5、Hadoop3.1.3
6、Hive3.1.2(不要用Spark作為計(jì)算引擎,默認(rèn)的mr即可)
7、DolphinScheduler2.0.5
8、Kettle9.2
(三)部署腳本以及部署文檔
由于一開始的數(shù)據(jù)規(guī)模不大以及服務(wù)器資源有限問題,所以目前使用的單機(jī)版部署,沒有部署集群
六、數(shù)倉實(shí)施步驟(搭建好數(shù)倉環(huán)境后)
(一)步驟一、用Kettle從Kafka、MySQL等數(shù)據(jù)源采集數(shù)據(jù)然后寫入HDFS
1、Kettle轉(zhuǎn)換任務(wù)配置
(1)樣例一:維度表數(shù)據(jù)——從MySQL導(dǎo)入數(shù)據(jù)到HDFS
(2)樣例二:事實(shí)表數(shù)據(jù)——從Kafka采集數(shù)據(jù)到HDFS
2、Kettle轉(zhuǎn)換任務(wù)配置注意點(diǎn)
(1)維度表數(shù)據(jù)——從MySQL導(dǎo)入數(shù)據(jù)到HDFS
2.1.1、由于維度表數(shù)據(jù)量少,因此直接overwrite寫入HDFS中,每次都是覆蓋的全量導(dǎo)入
2.1.2、為了減少磁盤資源使用,在Hadoop file output控件中加了gzip壓縮方式
(2)事實(shí)表數(shù)據(jù)——從Kafka采集數(shù)據(jù)到HDFS
2.2.1、由于Kafka的數(shù)據(jù)在不停發(fā)送,所以Kettle任務(wù)就需要一直運(yùn)行。
2.2.2、由于HDFS的特性是以packet為單位寫入,一個(gè)packet是64KB,所以不能根據(jù)日期每天自動(dòng)生成一個(gè)HDFS文件,那樣的話每天都會(huì)丟失一部分?jǐn)?shù)據(jù)。
因?yàn)橹灰刻熳詈笫S嗟臄?shù)據(jù)不滿64KB,那這部分?jǐn)?shù)據(jù)就不會(huì)寫入。kettle任務(wù)直接生成第二天的數(shù)據(jù)文件、寫入第二天的數(shù)據(jù),即使這天的數(shù)據(jù)文件的狀態(tài)還在寫入。
所以就直接生成一個(gè)HDFS文件,一直在這個(gè)文件里寫入數(shù)據(jù)即可。后面先get到Linux本地,然后再overwrite寫入HDFS的ODS層表中,這樣不會(huì)每天丟數(shù)據(jù)。
2.2.3、由于kettle任務(wù)需要一直運(yùn)行,所以Hadoop file output控件不能添加數(shù)據(jù)壓縮方式。
否則雖然顯示HDFS文件有數(shù)據(jù),但只要任務(wù)不停止文件就不會(huì)壓縮,這樣HDFS文件實(shí)際上沒有數(shù)據(jù),所以HDFS文輸出控件不能添加壓縮
3、海豚調(diào)度器調(diào)度kettle轉(zhuǎn)換任務(wù)
(1)首先,為了便于團(tuán)隊(duì)開發(fā),kettle需要配置共享資源庫,把kettle任務(wù)統(tǒng)一放在資源庫中運(yùn)行。
用海豚調(diào)度kettle任務(wù)不需要開啟carte服務(wù),如果是用xxl-job調(diào)度,那可以開啟carte服務(wù)
(2)對(duì)于事實(shí)表數(shù)據(jù)——從Kafka采集數(shù)據(jù)到HDFS
3.2.1、腳本不要加日志文件,因?yàn)閿?shù)據(jù)量太大。
#!/bin/bash
source /etc/profile
/usr/local/hurys/dc_env/kettle/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/kafka_to_hdfs/ -trans=02_Kafka_to_HDFS_evaluation
3.2.2、工作流不需要定時(shí),直接啟動(dòng),一直跑任務(wù)即可
(3)對(duì)于維度表數(shù)據(jù)——從MySQL導(dǎo)入數(shù)據(jù)到HDFS
3.3.1、腳本可以添加日志文件
#!/bin/bash
source /etc/profile
/usr/local/hurys/dc_env/kettle/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/mysql_to_hdfs/ -trans=04_MySQL_to_HDFS_t_team level=Basic >>/home/log/kettle/04_MySQL_to_HDFS_t_team_`date +%Y%m%d`.log?
3.3.2、工作流需要定時(shí),不過需要注意不同工作流的定時(shí)時(shí)間,保留工作流之間充足的定時(shí)區(qū)間
文章來源:http://www.zghlxwxcb.cn/news/detail-732055.html
剩余數(shù)倉部分,待續(xù)!文章來源地址http://www.zghlxwxcb.cn/news/detail-732055.html
到了這里,關(guān)于一百八十二、大數(shù)據(jù)離線數(shù)倉完整流程——步驟一、用Kettle從Kafka、MySQL等數(shù)據(jù)源采集數(shù)據(jù)然后寫入HDFS的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!