首页新闻动态正文

工作后的一些心德总结。【黑马大数据培训】

更新时间:2022年12月21日 18时25分24秒 来源:黑马程序员论坛

黑马中级程序员课程

ETL流程说明 报表篇 1.使用场景之一:BI报表 报表是基础但很重要的使用场景,其主要作用是通过整合现有数据,提供报表作为决策的依据。 a)报表类型:(根据业务类型划分) i.销售报表 ii.客户报表 iii.商品报表 iv.…… b)使用场景: i.老板:我要看每个月的销售额、成单数、转化率等这些指标…(提供决策) ii.销售组长:我要看我组员的每天的业绩情况和访问客户数…(制定销售计划) iii.财务:我要数据组出一份销售每月的业绩提成表(减轻人工的工作量) iv.…… 由此可见,报表根据需求的来源不同,其产生的作用和带来的价值也不一样。 c)报表说明(销售报表为例)    销售报表web界面(模拟) 说明:         ①查询条件:根据表中关键字段进行查询         ②字段(指标):产品部提供的报表指标,每个指标都有详细的定义,例如:                 1)销售金额:计算当前销售月内,跟单销售为该销售,所有成单金额-退费金额的总和         ③将查询内容导出Excel表,以供进一步的计算分析         ④报表内容 2.报表开发工作流程 (1)开发流程: a)需求沟通:产品部门提供报表的核心需求(各种指标),数据团队根据现有的数据看是否能够实现 i.注意事项: 1.产品部门往往根据自己的想法制定指标,实际上业务数据可能根本不存在或者不全,所以要了解清楚每个指标的含义,是否算的出来。 2.尽量避免全量数据报表的制作,对数据库和性能消耗比较大,一般每次算一个时间周期的数据(例如一个月) 3.最好能理解产品(老板)出这份报表的用意,了解他们的实际用途,并提供数据上的建议 b)数据抽取 i.根据需求指标确定数据源 1.销售成单金额(业务数据): a)表:销售记录明细表 b)数据库:Mysql业务库 2.销售名称、销售组(维度数据): a)表:销售成员表、销售组部表、字典表 b)数据库:Mysql业务库 3.官网PV、UV(日志数据): a)上报类型数据,通过埋点,然后数据采集(埋点+Flume+Nginx或ELK部分组件),最后也是落地到数据库里面 b)数据库:例如Hive 4.用户偏好(文档数据): a)通过读取用户反馈文档,根据关键字分析用户偏好特征 b)数据源:txt文档                         说明:根据需求,确定要计算的指标数据来源是在哪里,如果数据还没有落地到数据库,就需要自己去采集(或说明难度,抛给产品部门);其实一般数据都是有的,看下一步: ii.将数据加载到数据仓库中(方便做复杂逻辑处理) 1.一般重要且常用的数据每天都会通过定时调度流程抽取到Hive数仓(Oozie&crontab&Azkaban+sqoop) 2.数仓分层: a)源数据层(上述各个数据源的数据定时加载到数仓中,数据结构表字段等和源数据一致。一般凌晨后执行加载程序,加载昨天的数据) b)基础层:根据业务主题设计不同的表,例如销售记录明细表,客户信息详情表等 i.特点:在源数据的基础上按主题划分,例如销售相关的源数据层表为一个主题,这个主题之间的表根据业务需要做一些基础的关联,获取明细表、历史记录表等 ii.此类表往往可以反复被使用,适用于不同报表开发的数据来源 c)汇总层(集市层) i.特点:根据业务场景预抽取、预汇总和预加工的表 ii.此类表一般根据业务场景预先提炼一些共性的数据,方便后续报表开发的时候 d)应用层 i.特点:直接对接需求的表,一般复用性比较差,已经定制好了                 说明:这一部分需要开发的内容如下:                         1、数据抽取程序/脚本(数据导入到数仓)                                 1)实际产出:Sqoop脚本/shell脚本/python脚本等                         2、源数据处理程序/脚本(写根据hive源表,获得相关明细表)                                 1)实际产出:转换脚本(写SQL语句,UDF自定义函数)                         3、数据汇总程序/脚本(数据从基础层汇总到集市层)                                 1)实际产出:汇总程序/脚本(写Sql)                         4、应用层程序/脚本(数据从集市层根据实际业务需求制定报表指标)                                 1)实际产出:应用层程序/脚本(写Sql)                         5、数据导出(数据从hive导出到关系型数据库)                                 1)实际产出:导出程序/脚本                 最后:通过不懈努力,我们得到了5个程序或脚本文件,然后通过工作调度就可以完成数据抽取、处理、转化、存储部分内容了(注意:数据采集在此流程之前,此处不展开)                 注意:ETL可以用很多方式/工具完成,上述的方式是通过脚本(shell、perl、python等)或编写Java程序完成数据处理工作,除此之外还有很多ETL组件和工具可以使用,例如kettle,但是无论是工具还是脚本,都是要写Sql的。 Kettle(Spoon简图)         说明:Kettle是专门做ETL的工具,操作方式比较简便,通过图形界面的图标拖拽可以完成一系列的骚操作,里面有很多做好了的插件可以使用,也有自带的调度工具。 3.关于调度(调度工具:公司自己基于crontab开发的一套,不具备代表性) ETL任务调度注意事项: (1)注意任务流程顺序,不要形成回路/循环:                 1)例如:A->B->C->A(此举对于某些调度工具,可能导致异常或不断提交任务,导致服务器资源耗尽而瘫痪) (2)后者程序的输出数据依赖前者数据的输出(这个都懂的) (3)没有依赖关系的流程,为了提高执行效率可以并行执行(这个需要在执行时间和集群性能之间进行衡量,不过也可以给调度工具分配好资源)         (4)数据上的依赖:注意本次流程依赖的数据,例如流程H依赖的表有A、B、C、D表,ABC表每晚一点加载到hive,D表是另外一张报表的数据输出,每晚两点半执行。因此,为了数据的准确性,流程H的调度依赖D报表,执行在D报表输出流程的后面。 (5)调度流程的频率,根据业务的需要而不同(分时日月周年)                 (1)每天:一般完成凌晨后执行(每天晚上算昨天/上个月的数据)                 (2)每周:每周一定时发邮件                 (3)每小时:每隔两个小时执行一次(对数据的时效性要求比较高的流程,但还是离线处理)                 说明:任务调度的操作一般通过UI界面实现,可参考所学习的Azkaban 4.报表平台(可视化界面) 数据已经导出到数据库了,接下来就是报表数据的展示,我工作的时候使用的是公司自己搭的数据平台,通过界面配置(编写Sql语句)就可以直接读取数据库的报表数据,前端页面进行展示(此过程对应SSM+Echarts 5.总结 (1)BI报表的开发主要工作量在于对业务数据的了解,知道哪些数据在哪些表,哪些指标用了哪些数据,这些指标怎么算才准; (2)其次是Hive Sql的编写,初期Hive Sql对优化要求不高(先按需求写出来,后期根据需要优化,但是面试肯定要说你会Sql优化,优化前后执行时间长短,优化前后CPU/内存等指标变化等) (3)数据准确性,数据准确性是必须的,要仔细思考自己的逻辑是否正确 (4)数据抽取、转化、汇总这几个流程,实际上是将不同数据源的数据汇聚在一个仓库中,再按照不同粒度和业务将数据进行划分,得到最小粒度(时间粒度、部门粒度、业务粒度等)下的不同业务的数据,然后你就可以根据业务需求汇总你需要的粒度数据,形成报表。 面试(开发中的一些问题总结): 一、数据埋点上报 1.数据加密 2.数据压缩 3.埋点策略 4.数据丢失 二、数据抽取 1.数据同步策略(增量策略) 2.数仓建模(根据主题分层,业务相关) 三、脚本开发 1.对平台资源的把控(严格规范hsql开发) 2.开发规范:程序开发,异常告警,平台监控 3.能增量计算尽量不全量 4.支持失败后重跑 四、操作系统 1、清楚程序提交后的运行位置(jvm,线程,进程) 2、linux常规操作(查看cpu,内存使用情况,异常进程发现与杀死,僵尸进程,内存溢出等) 3、脚本开发(shell等) 五、任务调度工具 1、熟悉一种etl任务调度工具(kettle,ariflow,oozie等) 六、平台管理 1、cdh节点资源再平衡(加机器) 2、各种ui界面的功能及使用 3、性能瓶颈时的调优(内存不足,机器资源不够时怎么办?控制内存使用上界,数据落地到磁盘) 七、sql 1.hive sql(开窗函数,行转列,列转行,自定义函数) 2.mysql(变量的使用) 八、mysql 1.主从同步原理(同步失败怎么办) 2.表数据量太大怎么办,分库分表,横向纵向分表使用场景,分区,视图 3.优化:索引失效怎么办,如何监控慢sql,如何建索引    

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 软件测试培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


分享到:
在线咨询 我要报名
和我们在线交谈!