轉載:linux下大資料人工智慧自動化指令碼定時任務模板

隱士2018發表於2018-09-08

轉自:

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


相關文章