linux下大数据人工智能自动化脚本定时任务模板

本文针对有初级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 ‘\t’

lines terminated by ‘\n’

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 ‘\t’

lines terminated by ‘\n’

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*******

   至此,一个简单的大数据人工智能预测分析脚本模板完成了,希望能有所帮助,并指出不足之处,共同进步!

你可能感兴趣的:(linux下大数据人工智能自动化脚本定时任务模板)