第三章 基于dolphinscheduler的明细模型设计之一致性维表(DIM)建设

1、DIM层概述

1.1、DIM定义
  • DIM:维表的公共层,贯穿数据模型的各个层次

(1)贯穿数据模型的各个层次,保留业务过程中的实体信息

(2)用来关联事实表将数据宽表化

1.2、DIM数据组成
  • DIM:存放维度数据&基础数据

(1)维度数据:一般指一些业务状态,代码的解释表(即码表)

(2)基础数据:存储业务需要关联的基础数据

2、DIM层数据规范

2.1、DIM数据规范

(1)最基础要求:不同字段的含义必须不同,相同字段的含义必须相同

(2)DIM较多的是和DWS生成ADS;

2.2、DIM表结构

(1)表结构:实体(主键)+维度

(2)命名:dim_表名__di

  • 前缀统一为dim,后缀统一(小时级别为h,天级别为1d,月级别为1m)

(3)生命周期:360天

3、DIM开发样例(小维表来源业务系统)

  • 大维表:业务侧要求每天一个分区装维度数据
绪论、需求说明
  • 将ODS维表数据全量抽取到DIM层,按天分区保留每天最新的维度数据
create table T_YYBZB_TGH_BANKINFO
(id        int(8),bank_id   int(8),bank_name varchar(200),source_date varchar(200)
);
insert into T_YYBZB_TGH_BANKINFO (ID, BANK_ID, BANK_NAME)values (11, 11, '工商银行(广州)','20210101');
3.1、创建hive目标表

(1)创建hive目标表

create table dim.dim_t_yybzb_tgh_bankinfo_di
(id        int,bank_id   int,bank_name string
)
partitioned by (`pt` string)
row format delimited fields terminated by ','

(2)配置SQL组件创建表

  • 配置Spark数据源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTKA16fy-1639123208275)(C:\Users\PROTH\AppData\Roaming\Typora\typora-user-images\image-20211208164131511.png)]

(3)部署上线

在这里插入图片描述

(4)调试运行

在这里插入图片描述

  • 运行结果日志

在这里插入图片描述

3.2、创建表分区

(1)编写SQL脚本

alter table dim.dim_t_yybzb_tgh_bankinfo_di drop if exists partition(pt=${pt})alter table dim.dim_t_yybzb_tgh_bankinfo_di add if not exists  partition (pt=${pt})

(2)配置SQL组件

  • 若分区存在则删除

在这里插入图片描述

  • 创建表分区

在这里插入图片描述

3.3、Pyspark脚本导入数据

(1)编写Python脚本

  • 编写主程序
#!/usr/bin/python
# encoding:utf-8from pyspark import SparkContext
from pyspark.sql import HiveContext
import sys
import re
import timeimport importlib
importlib.reload(sys)#进行相关配置项定义
def dropFrame(rows):x = ''for s in rows:x += str(s) + ','x = x[:-1]return xinput_pt = sys.argv[1]output_feature_hdfs_path = '/user/hive/warehouse/dim.db/dim_t_yybzb_tgh_bankinfo_di/' + '20211213' + '/'key_cal = 'ods_t_yybzb_tgh_bankinfo_di'#spark-job编写
sc = SparkContext(appName=key_cal + "_sql_daily")hsqlContext = HiveContext(sc)midsqlDf = hsqlContext.sql("select ""id,""bank_id,""bank_name ""from ods.ods_t_yybzb_tgh_bankinfo_di ""where pt = {pt}".format(pt=input_pt))#/user/hive/warehouse/dim.db/dim_t_yybzb_tgh_bankinfo_di/20190724
save_path = output_feature_hdfs_path
keySeconds = midsqlDf.rdd.map(lambda row: dropFrame(row))
keySeconds.repartition(5).saveAsTextFile(save_path)sc.stop()

(2)配置Spark组件

/opt/module/spark-3.1.2/bin/spark-submit --master local --queue default --driver-memory 512m  --driver-cores 2 --num-executors 4 --executor-memory 1G --executor-cores 2 --conf spark.default.parallelism=4  test1.py
  • 将脚本上传到资源中心

在这里插入图片描述

  • 配置Spark组件
程序类型:python
程序参数:${pt}

在这里插入图片描述

(3)参数传递

  • 设置全局参数为T-1

在这里插入图片描述

(4)定时任务设置

  • 设置时间:固定每天6点跑批

在这里插入图片描述

  • 原因未明:日志报错spark提交路径出错,but命令行提交能成功,待解决
3.4、SQL脚本导入数据

(1)编写SQL脚本

insert overwrite table dim.dim_t_yybzb_tgh_bankinfo_di partition (pt=${pt})
select id,bank_id,bank_name
from ods.ods_t_yybzb_tgh_bankinfo_di

(2)配置SQL组件

  • 参数配置:${pt}

在这里插入图片描述

(3)调试运行

  • 上线部署后运行

在这里插入图片描述

  • 查看hive表分区文件

在这里插入图片描述

(4)定时调度

  • 每天6点定时调度

在这里插入图片描述

4、DIM开发样例(小维表)

  • 小维表规定:小维表(配置表)只能删除/新增,不能更新数据
绪论、需求说明
  • 将ODS维表数据全量抽取到DIM层,按天分区保留每天最新的维度数据
create table T_YYBZB_TGH_BANKINFO
(id        int(8),bank_id   int(8),bank_name varchar(200),source_date varchar(200)
);
insert into T_YYBZB_TGH_BANKINFO (ID, BANK_ID, BANK_NAME)values (11, 11, '工商银行(广州)','20210101');
4.1、创建hive目标表

(1)编写建表SQL脚本

  • 增加delete_flag标记,适用于源系统存在硬删除状况
create table dim.dim_t_yybzb_tgh_bankinfo3_di
(id        int,bank_id   int,bank_name string,delete_flag int
)
row format delimited fields terminated by ','#创建中间临时表
create table tmp.tmp_t_yybzb_tgh_bankinfo3_di
(id        int,bank_id   int,bank_name string,delete_flag int
)
partitioned by (`pt` string)
row format delimited fields terminated by ','

(2)配置SQL组件

  • 数据源:spark
  • sql类型:非查询

在这里插入图片描述

(3)部署上线

在这里插入图片描述

(4)运行脚本

  • 进入画布

在这里插入图片描述

  • 运行建表脚本
    在这里插入图片描述

(5)查看日志
在这里插入图片描述

4.2、初始化导入数据

(1)编写初始化脚本

insert overwrite table dim.dim_t_yybzb_tgh_bankinfo3_di 
select id,bank_id,bank_name,'1' as delete_flag
from ods.ods_t_yybzb_tgh_bankinfo_di

(2)配置SQL组件

  • 数据源:Spark
  • sql类型:非查询

在这里插入图片描述

(3)部署上线

在这里插入图片描述

(4)运行脚本

  • 进入画布
    在这里插入图片描述

  • 运行脚本

在这里插入图片描述

4.3、增量更新数据

(1)创建临时表分区

alter table tmp.tmp_t_yybzb_tgh_bankinfo3_di drop if exists partition(pt=${pt})alter table tmp.tmp_t_yybzb_tgh_bankinfo3_di add if not exists  partition (pt=${pt})

(2)临时表用来装载计算后的数据

insert overwrite table tmp.tmp_t_yybzb_tgh_bankinfo3_di partition(pt=${pt})
select 
if(t1.bank_id is not null,t1.id,t2.id) as id,
if(t1.bank_id is not null,t1.bank_id,t2.bank_id) as bank_id,
if(t1.bank_id is not null,t1.bank_name,t2.bank_name) as bank_name,
if((t1.bank_id is not null) and (t2.bank_id is null),0,1) as delete_flag
from dim.dim_t_yybzb_tgh_bankinfo3_di t1 full join ods.ods_t_yybzb_tgh_bankinfo_di t2
on t1.bank_id = t2.bank_id
where t2.pt=${pt}
  • 注意事项:中间结果数据一般建分区表保留时间一周,便于回滚

(3)将临时表数据导入目标表

insert overwrite table dim.dim_t_yybzb_tgh_bankinfo3_di 
select id,bank_id,bank_name,delete_flag
from tmp.tmp_t_yybzb_tgh_bankinfo_di
where pt=${pt}

(4)配置SQL组件

①删除表分区后创建表分区

在这里插入图片描述

②配置任务前置依赖(依赖于ETL作业)

  • 告警配置:超时告警&超时失败
    在这里插入图片描述

③配置SQL组件一,将计算后的数据插入到临时表中

在这里插入图片描述

④配置SQL组件二,将临时表中更新数据插入到DIW表中

在这里插入图片描述

⑤配置全局参数

  • 在保存画布后,设置全局进行全局参数配置

在这里插入图片描述

  • 整体任务流程图如下

在这里插入图片描述

(5)调试运行

①将JOB部署上线

在这里插入图片描述

②进入画布

在这里插入图片描述

③调试运行
在这里插入图片描述

④查看运行结果

在这里插入图片描述

(6)定时调度

  • 调度周期:每天凌晨6点开始跑数
    在这里插入图片描述

  • 定时管理查看

在这里插入图片描述
在这里插入图片描述

5、DIM开发样例(大维表)

绪论
  • 将ODS上报数据增量抽取到DIM层,生成公共维度,按天分区
create table ods.ods_ios_di(
p_date string 
,etl_time string 
,server_ip      string  
,log_time       string
,guid           string
,gender         string
,age            String 
,city           String 
,phone         string
,appid          string
,msgid          string
,httpcode       string
,httpcontent    string
,msg            string
)
partitioned by (`pt` string)
row format delimited fields terminated by ',';
5.1、创建hive目标表

(1)编写建表脚本

CREATE TABLE dim.dim_ios_di(
ftime,
guid,
basic_info
)
partitioned by (`pt` string)
row format delimited fields terminated by ',';

(2)配置SQL组件创建表

  • 数据源:hive::dim
  • sql类型:非查询

在这里插入图片描述

(3)部署上线运行

  • 部署上线
    在这里插入图片描述

  • 进入画布单独运行建表脚本

在这里插入图片描述

3.2、测试数据

(1)编写业务处理逻辑脚本

  • 处理逻辑:进行数据转换,生成公共维度
insert overwrite dim.dim_ios_di partition(pt=${pt})
select ftime,guid,concat(gender,'_',age_level,'_',city_level) basic_info
from(select p_date as ftime,guid as guid,if(gender in(1,2),cast(gender as string),'-')gender,case when age between 1 and 6 then'1'when age between 7 and 12 then'2'when age between 13 and 15 then'3'when age between 16 and 18 then'4'when age between 19 and 22 then'5'when age between 23 and 25 then'6' when age between 26 and 30 then'7'when age between 31 and 40 then'8'when age between 41 and 50 then'9'when age between 51 and 99 then'10' else '-' end age_level,if(city in (0,1,2,3,4,5,6),cast(city as string),'-') as city_level
from ods.ods_ios_di
where pt = 2222
and (gender is not null or age is not null or city is not null)
)tmp

(2)配置SQL组件

  • 数据源:hive::dwd

  • sql类型:非查询

  • 自定参数:${pt}

  • 前置SQL:

alter table dim.dim_ios_di drop if exists partition(pt=${pt})
alter table dim.dim_ios_di add if not exists  partition (pt=${pt})

在这里插入图片描述

(3)配置依赖

  • 告警策略:超时告警、超时失败。
  • 依赖周期:日、今天

在这里插入图片描述

(4)运行调试

  • 部署上线

在这里插入图片描述

  • 进入画布,运行链路

在这里插入图片描述

  • 补数,跑一周数据后进行对数
    • 串行执行:资源不足时使用
    • 并行执行:资源充足时使用

在这里插入图片描述

3.3、定时调度

(1)调度周期

  • 每天凌晨6点调度前一天数据

在这里插入图片描述

(2)失败策略

  • 失败策略:结束

在这里插入图片描述

(3)通知策略

  • 通知策略:失败发

在这里插入图片描述

6、常见问题

6.1、Spark数据源配置

(1)启动Spark thriftserver

sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10001 --master yarn --driver-cores 1 --driver-memory 1G --executor-cores 1 --executor-memory 1G -num-executors 2
  • 运行结果

在这里插入图片描述

(2)dolphinscheduler配置Spark数据源

  • 数据源中心 --> 配置数据源

在这里插入图片描述

6.2、Spark任务提交报错

(1)报错现状

  • 报错现状:Cannot run program “python3”: error=2, 没有那个文件或目录
    在这里插入图片描述

(2)报错原因

  • 系统只有自带的python2,没有python3,需要安装

(3)解决方案

  • 在linux下安装python3
6.3、/bin/spark-submit: 没有那个文件或目录

(1)问题现状

在这里插入图片描述

(2)问题原因

  • dolphinscheduler_env.sh文件未正确配置spark路径

(3)解决方案

vim dolphinscheduler_env.sh#添加Spark环境变量,根据个人电脑路径添加
#SPARK_HOME
export SPARK_HOME=/opt/module/spark-3.1.2
export PATH=$PATH:$SPARK_HOME/bin
export PATN=$PATH:$SPARK_HOME/sbin
6.4、hive NullPointerException null

(1)问题原因

  • 报错:空指针异常

在这里插入图片描述

(2)问题原因

  • hive的远程服务出错

(3)解决方案

  • 重启hiveserver2服务
6.5、shell调PySpark出错

(1)问题现状

Exception in thread "main" java.io.IOException: Cannot run program "python3": error=2, 没有那个文件或目录

在这里插入图片描述

(2)问题原因

  • pyspark脚本的解释器路径为 /usr/bin/python
  • 实际环境如下

在这里插入图片描述

(3)解决方案

  • 创建python3的软连接
sudo ln -s /opt/module/Python-3.6.5/ python3
  • 修改脚本解释器路径为python3
#!/usr/bin/python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251408.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

rpa调用https接口 返回数据异常_金融企业“银行余额RPA查询机器人”解读

一、财务机器人应用背景 公司简介 金融行业银行卡联合组织——是只通过银联跨行交易清算系统,实现商业银行系统间的互联互通和资源共享,保证银行卡跨行、跨地区和跨境的使用的组织。 总部设于上海,作为中国的银行卡联合组织,处于我…

2021年8月券商App行情刷新及交易体验评测报告

导言: 随着移动金融服务的盛行,手机App炒股成为广大股民普遍的选择。股市行情变幻莫测,行情推送速度会影响到投资者的交易决策,委托下单与撤单等关键操作环节的响应性能又会极大影响投资者的收益。由此,行情数据的推送…

10月券商App行情刷新及交易体验评测报告

导言 随着移动金融服务的盛行,手机App炒股成为广大股民普遍的选择。股市行情变幻莫测,行情推送速度会影响到投资者的交易决策,委托下单与撤单等关键操作环节的响应性能又会极大影响投资者的收益。由此,行情数据的推送实时性和交易…

养老院管理系统案列/APP/小程序/网站

目前,我国人口逐步进入老龄化,养老院事业在我国将会进入发展期,更多的年轻人会选择把家里的老人送到养老院,让自己的父母能够安享晚年。随之而来的是老人的安全问题,儿女会担心老人们能否在养老院幸福安全地生活着。养…

医院管理系统/案列/APP/小程序/网站

我国医院的信息处理基本上还停留在手工方式,劳动强度大且工作效率低,医师护士和管理人员的大量时间都消耗在事务性工作上,致使"人不能尽其才";病人排队等候时间长,辗转过程多,影响医院的秩序;病案、临床检验…

thinkphp后台管理系统+vue前端H5 app

thinkphp后台管理系统vue前端H5 app 众包接单型App 全部源码已发布,欢迎star, 移步码云 前言 1.帮朋友做的一个接单类型的后台管理系统(朋友的需求是淘宝好评刷管理) 2.目前利用空闲时间改造成了接单众包类型的后台管理系统并且…

设置服务器ssh远程连接时超时关闭的时间

我们通过ssh远程连接服务器时,如果一段时间客户端没有使用,就会与服务器断开连接。这个断开的时间我们是可以自己的设置的。 以linux centos系统为例, 具体设置方法如下: 1、通过下面的命令编译sshd配置文件 vim /etc/ssh/sshd_…

cesium获取OSM城市建筑物的字段与内容(cesium篇.21)

听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang=&#

西安建筑科技大学计算机类专业怎么样,西安建筑科技大学优势专业排名,2021年西安建筑科技大学最好的专业排名...

西安建筑科技大学优势专业由西安建筑科技大学历届学长学姐实名推荐&#xff1a; 1、建筑学 推荐指数: 4.9(560人推荐) 2、土木工程 推荐指数: 4.7(502人推荐) 3、城乡规划 推荐指数: 4.8(330人推荐) 4、给水排水工程 推荐指数: 4.7(330人推荐) 5、建筑环境与设备工程 推荐指数:…

建筑物轮廓(含楼层或者高度)

效果图&#xff1a; 第一步&#xff1a;打开BIGEMAP软件&#xff0c;为了和你下载的数据信息一致&#xff0c;请选择左上角图源&#xff1a;【矢量建筑】 然后选择最上面的【矩形框】&#xff0c;框选需要下载的范围&#xff0c;如下图所示&#xff1a; 第二步&#xff1a;选择…

建筑行业拓客的10个经典方法

建筑行业拓客的10个经典方法 建筑行业精准拓客、拓客方法、客源线索获取、客源信息抓取、拓客软件、流同行的客户、截取竞争对手客户、渠道裂变方式、如何找到对建筑行业有需求的精准客源是每个老板每天思考要解决的问题&#xff0c;我教大家如何利用搜索引擎爬虫技术大数据自…

Cesium矢量建筑加载

Cesium矢量建筑数据下载、转换与使用 &#xff08;网上下载了&#xff0c;bigmap下载器&#xff0c;矢量地图下载器&#xff0c;还有一些忘记了&#xff0c;都需要购买会员才能下载&#xff0c;本&#xff0c;经过寻找终于找到了相对于数据还算全面的下载网站&#xff09; 一、…

概述—基于机载LiDAR点云数据的建筑物轮廓提取

一、机载LiDAR系统介绍 机载激光雷达测量技术的英文名称是LiDAR, LiDAR是英文Light Detection And Ranging&#xff08;光探测与光测距&#xff09;的缩写&#xff0c;是融合了 GPS、INS、激光测距和计算机等多种技术为一体的对地探测技术。 机载LiDAR的基本原理是利用激光器…

百度地图如何去除路网图,建筑物,建筑物名称

2019.6.17更新 由于我的项目突然出现了白屏的问题&#xff0c;定位bug到设置样式的函数&#xff0c;一旦设置样式就会报跨域请求阻塞的问题&#xff0c;花了一个中午的时间给解决了&#xff0c;百度真坑.. 目前想要设置百度地图的样式需要作出以下调整 需要将原有的2.0版本修…

遥感技术手段提取城乡建筑用地

数据源介绍 使用的数据是GF1&#xff1a; 高分一号卫星&#xff08;GF-1&#xff09;是国家高分辨率对地观测系统重大专项天基系统中的首发星&#xff0c;“高分专项”于2010年5月全面启动&#xff0c;计划到2020年建成我国自主的陆地、大气和海洋观测系统。该星于2013年4月2…

Spring:什么是Spring框架?①

一、Spring简介由来 技术创新就是为了简化技术开发&#xff0c;无数大师耗费心力目的只有一个&#xff0c;如何让开发更为简洁&#xff1f; Spring应运而生&#xff0c;Spring&#xff1a;泉水&#xff0c;春天。意味让技术开发如春天的泉水那般流畅自然。 二、Spring是什么&am…

95后阿里P7架构师晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

【WPS】设置修改批注用户名

文件——选项——常规与保存——用户名

新浪微博html怎么设置,如何切换新浪微博的账户

我们要换着登陆新浪微博的账号&#xff0c;我们就要先退出了.下面是学习啦小编收集整理的如何切换新浪微博的账户&#xff0c;希望对大家有帮助~~ 切换新浪微博的账户的方法 方法/步骤 首先&#xff0c;我们在百度上搜索新浪微博&#xff0c;进入到微博的主页中去。搜索之后&am…

多个新浪微博怎么批量管理?

新浪微博可谓是很早就出名的一个自媒体平台&#xff0c;运营至今天十几年&#xff0c;积累了大量的流量。因此微博的创作者一般后来的比较少&#xff0c;基本都是一些老人。但是随着发展&#xff0c;他们的微博账号也同样变得多了起来&#xff0c;这就导致管理出现大问题&#…