idmp计算任务线上部署思路全过程
1.预处理
a.准备geohash地理位置字典(很长时间设置一遍)
b.id-mapping用户的唯一标识是每天都要去做的!
--在hdfs中创建地区字典文件夹
hdfs dfs -mkdir -p /doit12/dicts/area_dicts/
--将字典文件上传
hdfs dfs -put /root/geo_dict.parquet /doit12/dicts/area_dicts/
--在hdfs中创建第一日字典文件夹(哪怕是空的)
hdfs dfs -mkdir -p /doit12/dicts/idmp/2020-01-31/
hdfs dfs -mkdir -p /doit12/dicts/idmp/2020-02-01/
hdfs dfs -mkdir -p /doit12/dicts/idmp/2020-02-02/
--将字典文件上传
hdfs dfs -put /root/idmp01.parquet /doit12/dicts/idmp/2020-01-31/
hdfs dfs -put /root/idmp01.parquet /doit12/dicts/idmp/2020-02-01/
hdfs dfs -put /root/idmp01.parquet /doit12/dicts/idmp/2020-02-02/
--在hdfs中创建文三个渠道日志文件夹
hdfs dfs -mkdir -p /doit12/logdata/applog/2020-02-01
hdfs dfs -mkdir -p /doit12/logdata/applog/2020-02-02
hdfs dfs -mkdir -p /doit12/logdata/applog/2020-02-03
hdfs dfs -mkdir -p /doit12/logdata/applog/2020-02-04
hdfs dfs -mkdir -p /doit12/logdata/weblog/2020-02-01
hdfs dfs -mkdir -p /doit12/logdata/weblog/2020-02-02
hdfs dfs -mkdir -p /doit12/logdata/weblog/2020-02-03
hdfs dfs -mkdir -p /doit12/logdata/weblog/2020-02-04
hdfs dfs -mkdir -p /doit12/logdata/wxlog/2020-02-01
hdfs dfs -mkdir -p /doit12/logdata/wxlog/2020-02-02
hdfs dfs -mkdir -p /doit12/logdata/wxlog/2020-02-03
hdfs dfs -mkdir -p /doit12/logdata/wxlog/2020-02-04
--将日志文件上传
cd /root/01; hdfs dfs -put ./* /doit12/logdata/applog/2020-02-01
cd /root/02; hdfs dfs -put ./* /doit12/logdata/applog/2020-02-02
cd /root/03; hdfs dfs -put ./* /doit12/logdata/applog/2020-02-03
cd /root/02; hdfs dfs -put ./* /doit12/logdata/weblog/2020-02-01
cd /root/02; hdfs dfs -put ./* /doit12/logdata/weblog/2020-02-02
cd /root/02; hdfs dfs -put ./* /doit12/logdata/weblog/2020-02-03
cd /root/03; hdfs dfs -put ./* /doit12/logdata/wxlog/2020-02-01
cd /root/03; hdfs dfs -put ./* /doit12/logdata/wxlog/2020-02-02
cd /root/03; hdfs dfs -put ./* /doit12/logdata/wxlog/2020-02-03
最终脚本:
#!/bin/bash
############################################
#
# author: hunter.d
# date : 2020-02-01
# desc : idmp计算任务执行脚本
#
############################################
# 判断脚本是否传入了指定的数据日期
if [ $# -gt 1 ]
then
DATA_DAY=$1
OLD_IDMP_DAY=$2
else
#获取当前时间前一天的日期,必须是大Y,然后+后面没有空格!!!!
#date +'%Y-%m-%d'
#你要把一个命令赋值给一个变量,要用到飘``,你想打印一下看一下这个变量的值是echo ${data_day}
#shell中引用变量用${}
#获取当前一天的日期作为数据处理的日期
DATA_DAY=`date -d'-1 day' +'%Y-%m-%d'`
#获取当前两天的日期作为idmpde的目录日期
OLD_IDMP_DAY=`date -d'-2 day' +'%Y-%m-%d'`
fi
#spark的环境配置路径
export SPARK_HOME=/usr/apps/spark-2.3.3-bin-hadoop2.7/
#
#--master yarn\ 在yarn上执行
#--deploy-mode cluster\ 调配模式为集群
#--num-executors 3 \ 有3台机器线程同时执行
#--executor-memory 1 \用1g去执行
#--executor-cores 1 \用1核去执行
#--class cn.doitedu.dw.idmp.LogDataIdmpV2 \你要运行的类的名字reference(全类名)
#下一个说明是jar包的路径
#第一个参数是app日志存在的hdfs路径
#第二个参数是web日志存在的hdfs路径
#第三个参数是wx日志存在的hdfs路径
#第四个参数是上一日的idmp映射字典的hdfs路径
#第五个参数是今天的输出hdfs路径
${SPARK_HOME}bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--num-executors 4 \
--executor-memory 1g \
--executor-cores 1 \
--class cn.doitedu.dw.idmp.LogDataIdmpV2 \
/root/dw.jar /doit12/logdata/applog/${DATA_DAY} /doit12/logdata/weblog/${DATA_DAY} /doit12/logdata/wxlog/${DATA_DAY} /doit12/dicts/idmp/${OLD_IDMP_DAY}/ /doit12/dicts/idmp/${DATA_DAY}/ yarn
if [ $? -ne 0 ]
then
echo '不好了.....出了点莫名其妙的问题.....'
else
echo 'idmping计算successfully completed!'
fi
–准备上一日的idmapping数据存放的目录
hdfs dfs -mkdir -p /doit12/dicts/idmp/2020-01-31/
–将上一日的字典传入该目录
hdfs dfs -put /root/part.parquet /doit12/dicts/idmp/2020-01-31/
–将预处理工程进行参数化改造并打成jar包,并上传到服务器的/root目录下
–开发idmp计算任务shell脚本,并执行
–开发预处理计算任务shell脚本,并执行