《大型綜合項目-基於大數據平臺的數據倉庫》學習筆記(14):任務腳本篇兼任務調度篇

本項目教程筆記源自多易教育《Titan綜合數據倉庫與數據運營系統》,在CSDN學院有相關視頻教程購買鏈接,大數據企業級項目實戰–Titan大型數據運營系統
本項目課程是一門極具綜合性和完整性的大型大數據項目實戰課程,課程項目的業務背景源自各類互聯網公司對海量用戶瀏覽行爲數據和業務數據分析的需求及企業數據管理、數據運營需求。
學完本課程,你將很容易就拿到大數據數倉建設或用戶畫像建設等崗位的OFFER

本課程項目涵蓋數據採集與預處理數據倉庫體系建設、用戶畫像系統建設、數據治理(元數據管理、數據質量管理)、任務調度系統、數據服務層建設、OLAP即席分析系統建設等大量模塊,力求原汁原味重現一個完備的企業級大型數據運營系統。

跟隨項目課程,歷經接近100+小時的時間,從需求分析開始,到數據埋點採集,到預處理程序代碼編寫,到數倉體系搭建…逐漸展開整個項目的宏大視圖,構建起整個項目的摩天大廈。


一、任務腳本篇

1、Spark任務】調度腳本開發

# 預處理任務腳本示例:
#!/bin/bash

############################################
#
#   author: hunter.d
#   date  : 2019-11-28  
#   desc  : 預處理spark任務提交到yarn計算腳本
#
############################################  

SPARK_HOME=/opt/app/spark-2.4.0

# 獲取當前時間的前一天日期
DT=`date -d'-1 day' +'%Y-%m-%d'`

# 如果腳本傳入了參數,則計算參數所指定的日期
if [ $1 ]
then
 DT=$1
fi


${SPARK_HOME}/bin/spark-submit  \
 --master yarn \
 --deploy-mode cluster \
 --num-executors 3 \
 --executor-memory 1g \
 --executor-cores 1 \
 --class cn.doitedu.titan.dw.pre.AppEventLogPreprocess \
 /root/dw.jar /titan/applog/${DT} /titan/areadict /titan/output/applog/${DT} yarn


if [ $? -eq 0 ]
then 
 echo "任務執行成功....."
else
 echo "出了點莫名其妙的問題......"
fi
 
#可能遇到的問題:
#  集羣時間不同步,提交失敗
#  yarn的resourcemanager宕機,提交失敗
#  hdfs工作狀態不正常,提交失敗
#  沒指定隊列或指定的隊列不存在,提交失敗
#提交雖然成功,但運行錯誤:
#  appmaster就失敗: NoClassDefineFound
#  executor失敗:	NoClassDefineFound

《詳見項目代碼》

2、【Sql任務】調度腳本開發

# sql運算任務腳本示例:
#!/bin/bash

############################################
#
#   author: hunter.d
#   date  : 2019-11-28  
#   desc  : ADS_USR_ITV 訪問間隔分佈統計報表
#
############################################  

HIVE_HOME=/opt/app/hive-2.1.0

# 獲取當前時間的前一天日期
DT=`date -d'-1 day' +'%Y-%m-%d'`

# 如果腳本傳入了參數,則計算參數所指定的日期
if [ $1 ]
then
DT=$1
fi

echo "準備計算的日期: $DT  ...................."

SQL="
with tmp1 AS(
SELECT
1,
datediff(if(end_dt='9999-12-31','${DT}',end_dt),if(start_dt<date_sub('${DT}',30),date_sub('${DT}',30),start_dt)) as cnts
FROM titan.DWS_USR_CAC WHERE dt='${DT}'  and end_dt>=date_sub('${DT}',30)
),
tmp2 AS(
SELECT
datediff(lead(start_dt,1,null) over(partition by gid order by start_dt),end_dt) as itv_days,
1 as cnts
FROM titan.DWS_USR_CAC WHERE dt='${DT}' and end_dt>=date_sub('${DT}',30)
)

INSERT INTO TABLE titan.ADS_USR_ITV
SELECT
'${DT}'  as dt,
1 as itv_days,
sum(cnts) as cnts
FROM tmp1

UNION ALL

SELECT
'${DT}'  as dt,
itv_days,
sum(cnts) as cnts
FROM tmp2 WHERE itv_days is not null
group by itv_days
;
"
echo "準備執行SQL  ...................."

${HIVE_HOME}/bin/hive -e "${SQL}"

if [ $? -eq 0 ]
then 
 echo "任務執行成功....."
else
 echo "出了點莫名其妙的問題......"
fi

《詳見項目代碼》

3、【Sqoop任務】調度腳本開發

# sqoop數據抽取腳本示例:
#!/bin/bash

############################################
#
#   author: hunter.d
#   date  : 2019-11-28  
#   desc  : 訂單主要信息表sqoop抽取任務
#
############################################  

SQOOP_HOME=/opt/app/sqoop-1.4.7

# 獲取當前時間的前一天日期
DT=`date -d'-1 day' +'%Y-%m-%d'`

# 如果腳本傳入了參數,則計算參數所指定的日期
if [ $1 ]
then
DT=$1
fi

echo "準備抽取日期: $DT  ...................."


$SQOOP_HOME/bin/sqoop import \
--connect jdbc:mysql://h3:3306/ry \
--username root \
--password haitao.211123 \
--table doit_jw_stu_zsgl \
--target-dir '/sqoopdata/doit_jw_stu_zsgl'  \
--incremental lastmodified \
--check-column stu_updatetime \
--last-value "${DT} 23:59:59"  \
--fields-terminated-by ',' \
--merge-key id   \
-m 1 

if [ $? -eq 0 ]
then 
 echo "任務執行成功....."
else
 echo "出了點莫名其妙的問題......"
fi

《詳見項目代碼》

二、任務調度篇

1、【crontab】定時任務執行調度

crontab 是linux系統中自帶的一個定時任務調度工具
它通過一個簡單的配置文件,來按照需求定時執行用戶所指定的程序(腳本)

示例:
crontab -e


30  0  *  *  *  sh /root/jobs/0-pre.sh
40  0  *  *  *  sh /root/jobs/1-load_data.sh
........

2、【Azkaban】定時任務執行調度

azkaban工具的使用,請參考《【多易教育-azkaban實戰教程】》


本項目教程筆記源自多易教育《Titan綜合數據倉庫與數據運營系統》,在CSDN學院有相關視頻教程購買鏈接,大數據企業級項目實戰–Titan大型數據運營系統
本項目課程是一門極具綜合性和完整性的大型大數據項目實戰課程,課程項目的業務背景源自各類互聯網公司對海量用戶瀏覽行爲數據和業務數據分析的需求及企業數據管理、數據運營需求。
學完本課程,你將很容易就拿到大數據數倉建設或用戶畫像建設等崗位的OFFER

本課程項目涵蓋數據採集與預處理數據倉庫體系建設、用戶畫像系統建設、數據治理(元數據管理、數據質量管理)、任務調度系統、數據服務層建設、OLAP即席分析系統建設等大量模塊,力求原汁原味重現一個完備的企業級大型數據運營系統。

跟隨項目課程,歷經接近100+小時的時間,從需求分析開始,到數據埋點採集,到預處理程序代碼編寫,到數倉體系搭建…逐漸展開整個項目的宏大視圖,構建起整個項目的摩天大廈。

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