轉載:linux下大資料人工智慧自動化指令碼定時任務模板
轉自:
https://mp.weixin.qq.com/s/mXXJmDqtv7PyqglN9ekvNQ
本文針對有初級sql及python人工智慧開發基礎,需要執行定時任務的初學人員。
假設在工作中,要執行一個任務,大致要求如下:
一、每月執行一次定時任務;
二、用hive處理資料,並下載;
三、用python讀取資料,送入機器學習演算法訓練,預測結果,儲存結果;
四、讀取預測結果,上傳到資料庫指定位置,並按月分割槽
(一)、關於定時任務crontab,命令網上可以搜到很多用法。在這裡有一個坑需要注意,就是直接執行shell指令碼時用到的python環境路徑,可能與定時任務的python路徑不同,導致執行指令碼時報錯,找不到模組。這裡有一個小方法,寫一個python程式test.py。
import sys
print(sys.path)
python test.py與crontab -e各執行一次,就可以看到兩次路徑是否相同了。還有一點,就是關於註冊資訊的問題,
kinit -kt /home/accunt/cluster_keytab/accunt.keytab accunt中的accunt是你自己的賬戶,沒有這句話,程式也會報錯。所以建議專門寫一個定時任務,每隔幾個小時執行一次該命令。
(二)、程式中經常會涉及到變數,比較常見的是時間變數,這樣才能做到自動化,train_month_t=$(date +%Y%m -d `-1 month`)這句話意思是,獲取執行程式時的月份的前一個月,‘$’是定義一個變數,用$train_month_t傳入sql語句中。exportHIVE_SKIP_SPARK_ASSEMBLY=true; 這句話的作用是在下載資料時,保證資料能夠下載齊全。
(三)、為了降低shell指令碼的篇幅,可以將python部分以子檔案形式執行。這裡為了防止在定時任務時,python路徑不統一,使用python的環境路徑執行程式。通過sys.argv[1]將引數$py_month傳進去。這裡的月份形式是`201808`,傳進去是字串格式。
(四)、在資料庫裡建表,並將通過人工智慧預測好的資料,上傳到指定分割槽。
下面是模板內容:
#!/bin/bash
kinit -kt /home/accunt/cluster_keytab/accunt.keytab accunt
echo “***************************”
train_month_t=$(date +%Y%m -d `-1 month`)
echo $train_month_t
echo “*************start*************”
sql_train=“
create table if not exists test.t_test
(a string,
b string)
row format delimited fields terminated by ` `
lines terminated by `
`
stored as textfile;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table test.t_test
select a,b
from product.t_test
where day=concat(`$train_month_t`,`01`);
“
echo $sql_train >./train.sql
kinit -kt /home/accunt/cluster_keytab/accunt.keytab accunt
hive -f ./train.sql
export HIVE_SKIP_SPARK_ASSEMBLY=true;
hive -e “set hive.cli.print.header=true;
select distinct a,b from test.t_test;” >./train.csv
echo “*************train sql successful************”
kinit -kt /home/accunt/cluster_keytab/accunt.keytab accunt
./python ./train_pred.py $py_month
echo “*************py successful************”
load_sql=“
create table if not exists test.result
(a string,
b string)
partitioned by (month string)
row format delimited fields terminated by ` `
lines terminated by `
`
stored as textfile
tblproperties(`skip.header.line.count`=`1`);
LOAD DATA LOCAL INPATH `./preds_$load_month.csv`
into table test.result PARTITION (month=`$load_month`);
“
echo $load_sql>./load.sql
kinit -kt /home/accunt/cluster_keytab/accunt.keytab accunt
hive -f ./load.sql
echo “*************load_sql successful************”
echo “*************successful************”
至此,一個簡單的大資料人工智慧預測分析指令碼模板完成了,希望能有所幫助,並指出不足之處,共同進步!
轉自:
https://mp.weixin.qq.com/s/mXXJmDqtv7PyqglN9ekvNQ
相關文章
- [Linux]crontab定時任務自動化Linux
- Linux下新增定時任務Linux
- crontab命令簡介 linux定時設定 Cron實現自動任務 (轉)Linux
- 【轉載】linux自動分割槽指令碼Linux指令碼
- Linux Crontab 定時任務[轉]Linux
- 【轉】linux定時任務的設定Linux
- Linux Crontab Shell指令碼實現秒級定時任務Linux指令碼
- 定時 MYSQL 動作-LINUX下用CRON實現定時執行指令碼(轉)MySqlLinux指令碼
- Linux下的定時任務crontab設定Linux
- 定時自動啟動任務crontab命令用法
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- Python定時任務前端專案本地自動打包遠端部署指令碼實現Python前端指令碼
- Linux下Oracle隨機自動啟動指令碼設定LinuxOracle隨機指令碼
- Linux | 定時任務Linux
- Linux 定時任務Linux
- Linux at 定時任務Linux
- Linux定時任務Linux
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- DevOps 自動化實踐 - 定時任務監控的進化之路dev
- MYSQL定時任務-定時清除備份資料MySql
- Linux crontab 定時任務Linux
- Linux 定時任務(crontab)Linux
- LINUX 定時任務命令Linux
- Linux - crontab(定時任務)Linux
- 定時任務不在硬編碼,動態定時刷起來
- 函式計算自動化運維實戰1 -- 定時任務函式運維
- Linux 下oracle自啟動指令碼LinuxOracle指令碼
- xtrabackup備份mysql以及建立自動定時任務MySql
- linux定時任務的設定Linux
- Linux系統中延時任務及定時任務Linux
- Linux下 MYSQL 定時備分指令碼LinuxMySql指令碼
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- Linux 自動任務crontabLinux
- 幾個shell自動化指令碼(轉)指令碼
- Linux定時任務系統 Cron 入門(轉)Linux
- linux定時任務cron配置Linux
- Linux 定時任務排程Linux
- linux定時任務簡記Linux