首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
settings
plugins
scala
spring
request
erlang
bytecode
hashset
config
get
frameworks
audio
byte
httprequest
emoji
join
eval
jar
less
yaml
expression
md5
email
js
subset
post
solr
fetch
include
foreach
cSharp
triggers
import
buffer
replace
shell
dll
cpython
substring
copy
input
random
cmd
schema
instance
golang
vbscript
command
integer
hash
stream
timezone
runtime
lua
io
php5
require
tree
bash
ascii
process
default
heatmap
cPlusPlus
function
uri
netty
web
数组
java
iostream
format
string
version
flutter
regex
range
typescript
merge
当前位置:
开发笔记
>
编程语言
> 正文
【技术分享】传统数仓转型,如何避开数据处理的“深坑”
作者:爱lovely壮壮_366 | 来源:互联网 | 2023-05-22 16:16
传统数据仓库的数据处理技术及思考;大数据环境下对于公共数据及行为数据的数据处理处理技术;由传统数据仓库到大数据数据仓库的数据
本文整理自DTCC2016主题演讲内容,录音整理及文字编辑IT168@田晓旭@老鱼。如需转载,请先联系本公众号获取授权!
演讲嘉宾
张粤磊
飞谷云创始人
飞谷云(www.feiguyun.com)创始人,平安付大数据平台架构师。历经了DBA,到开发工程师,再到大数据平台架构师的经历转变,有着10余年各行业(制造,咨询服务,互联网金融)一线数据处理及技术实践经验。
分享内容
我最早是做数仓和ETL架构系统,后来开始做大数据架构,现在在自主创业,做了一个技术分享的网站。这个网站主要是结合我自己目前在做的大数据、数据处理、数据分析的项目,以及圈里朋友的经验技巧来给大家做一些技术分享。
我从2005年开始接触DBA工作,2010年在HP 的TRAM项目中担任ETL开发组长,2012年,在外汇交易中心ETL项目担任开发经理,2014年,在平安付做大数据架构师。在这些年的工作过程中,接触了很多数据库,也有一些数据处理的经验想和大家来分享。
我今天演讲的主要分三个部分,第一部分是分享一下我在传统数据仓库的一些数据处理技术和配置方面的思考;接下来讲一下大数据环境下,公共数据和行为数据的数据处理技术;最后会讲一下从传统数据仓库迁移到大数据数据仓库的数据处理实践思考及建议。
传统数据仓库的数据处理技术及思考
我从自己实际参与的大型数据仓库项目出发,和大家分享一下传统数据仓库的数据处理技术。这个案例融合了我在外资企业、央企、民企、金融行业等等各个行业的项目实践经验,它是涵盖了整个传统数据仓库的标准流程。坦白讲,现在很多企业没有很标准的数据模型。数据模型是国外最早开始做的,比较经典的是惠普和eBay,他们的数据处理和数据模型的领导力比较强,也比较规范和科学,这两个团队在整体数据模型方面有一套成熟的方法论。数据处理方法同样适用整体的数据平台。
做一个数据管理仓库首先要做概念定义,这个一般是针对大型项目,分为企业内部和客户群体两部分,接下来是Portal和对应的权限管理,中间部分是根据实际业务去定义功能,有些功能是比较经典的,还有一些是根据特定业务场景去设计的。再下面一层是我们整体的数据集成层,再底层就是元数据层。
概念定义的产出一般是SOW,用来表明数据治理要做的功能单位。在这之下是业务定义,细化业务、系统功能,包括客户部分对应的联系人以及对应的清单,包括报表需要用哪些数据的实现。如果按实际应用来分的话,假设这是一个IT服务系统,下面会分服务管理和性能管理,性能管理又分硬件和软件的管理。
业务定义之后会有一个业务清单,业务清单里会有详细的业务要求以及相对应的工作项,这样可以保证数据不会出现遗漏,保证业务落实到位。
业务定义之后是逻辑定义,逻辑定义划分的就更细了,涉及具体业务怎么实现、由什么来实现。我们通常的做法是选择一些工具来实现报表的权限管理、元数据管理。ETL我们选择了informatics,数据文件的传输,尤其是跨域网站的数据传输,我们也是选用组件来完成的。再底层的话是业务系统,这个业务系统比较详细,一般都会定义到具体的业务名,清单里面也会有系统、接口这些信息。接下来还要进一步细化,比如业务DB的名称后,要去查看它的网段、所在服务器、端口、防火墙等等信息并需要做连通性验证等。这样就实现了从业务层到物理层面的落地。
物理层面落地之后就应该进行数据规则定义。规则定义就是要把数据像整理衣柜一样分层治理好,比较经典的就是三层维度模型。从元数据层到数据仓库层再到管理层,把元数据原封不动的抽到对应的数据仓库层。图中的Level 1层主要是数据仓库的技术层,包括维度表和事实表的加载、各业务系统的维度表和事实表的加载、各业务整体维度表的生成以及基于事实表产生对应的维度指标和度量值。这层同时也是整体数据仓库的核心层或生成层。Level 2层主要是为报表服务做一些聚合,根据不同的业务需要会产生按周、按天、按月等等不同维度的报表去维护。
规则定义之后就是具体的设计,这个设计一般就是我们架构组里面的建模组长、ETL组长干的事情,具体的有源系统信息、目标系统信息和ETL抽取。做数据管理首先要做好设计定义,之后你就只需要根据设计文档去做具体的开发实现。图上是我们做的一个设计定义,大家可以参考一下。
我在09-14年之间,做了大概6年的Infomatica的开发和管理工作,在ITPub上还有很多笔记,大家要是有兴趣,可以去了解一下。
做Infomatica比较成熟的是惠普和eBay的,国内对Infomatica比较熟悉的企业应该就是神州数码了,因为神州数码是第一家代理厂商。Infomatica相对Datastag、SSIS来说,元数据管理平台更完善。我们不仅可以从之前的模型定义去实现主数据管理的一致性,还可以将Infomatica跑出来的数据和元数据抽取出来的信息做及时的校验比对。Infomatica后来也有了自己的元数据管理工具,现在也在接触一些Hadoop工具。
数据仓库的治理六大要素:完整性、准确性、规范性、唯一性、一致性、关联性。下面我主要讲解两点,第一个是完整性,传统的RDBMS无论是哪一种都无法涵盖大量的非结构化业务数据。作为一个数据架构师、数据处理师不应该有依赖工具的思想,任何一个工具都不是完美的。
第二个是准确性,不同RDBMS对数据类型的定义精确度各有不同,当源系统与目标系统属于不同RDBMS或字符集等情况,可能存在字符类型不兼容问题,如:Oracle 的date数据类型有时分秒,而DB2的date数据类型不含时分秒;oracle的Integer数据类型是8字节38位精度,DB2的Integer数据类型是4字节10位精度。
公共数据及行为数据的数据处理技术
接下来我们讨论一下公共数据及行为数据的处理技术。一般我们处理的数据分为三类,一种是公共数据,常用的获取数据的工具是基于各种语言的爬虫框架,目前流行的是Python。第二种是埋点数据,通常是接入Talkingdata、友盟平台来获取对应的行为数据,或者是自己开发SDK采集工具。第三种是用户及交易数据,此类数据一般存储在结构化数据库中,获取数据的常用工具是SQOOP工具。
数据进入大数据平台的HDFS后,会使用大数据的数据仓库工具HIVE进行数据的ETL和模型构建。这里一般是三层结构:第一层是数据的原始落地层;第二层是数据的集成层,是模型的主要构建层;第三层是数据的分析层,主要用于数据的分析挖掘。
数据经过大数据仓库HIVE基础模型化后,会利用Spark工具对Hive的处理逻辑进行计算引擎的提升,一般会提升10倍左右的计算速度,并利用Spark的ML技术进行数据挖掘分析,SparkR进行图形化分析展现。
大数据经过挖掘分析处理后的统计数据,或需要自定义分析即席报表所需的基础模型表,一般使用HBase或RDBMS来保证查询显示的快速调用和结果反馈。
在处理公共数据的时候应该注意以下几个方面:
1、接口定义加入接口规范变更版本及内容到数据库字段中;
2、落地后的文件时间和成功标志信息同样参与数据处理;
3、在数据仓库处理和分析展示中添加数据处理的可追溯信息;
4、埋点数据一定要符合业务数据信息流才能保证数据处理的完整性和确保数据的业务可用性;
5、行为数据的标识健(UID,DID)要与其它数据源统一关联健和对应时间周期,确保数据的一致性和关联性;
6、行为数据的元数据信息尽可能从源头以字段化方式植入数据处理的数据文件中。
我们从公共数据网站抓取一些信息,然后通过SparkR脚本放到Hive模型里,执行hql任务,生成分析图,最后通过调度系统和监控系统来保证系统的完善统一。
传统数仓到大数据数仓的数据处理
从传统数据仓库到大数据仓库里面应该处理哪些呢?我认为从传统数仓到大数据仓库首要面对的就是数据同步与脱敏。传统数仓是以RDBMS为主要的数据处理存储层,数据库安全级别相对来说比较高。从传统数仓到大数据平台最好的实践方法就是把传统数据仓库与Level 0表全部同步到大数据平台,此时它的数据应该是RDBMS的结构化数据、公共数据和埋点数据全部统一在一起的全样本数据,数据在进入大数据平台后一定要进行脱敏处理,确保数据安全。然后到达以HDFS为主的数据处理层,数据处理的工具要根据数据来源来选择,一般来说,RDBMS采用SQOOP,实时数据采用Kafka、Storm等等。报表层采用自主开发的或者是大数据平台工具。另外,大数据平台一定要注意安全管理。
从传统数据仓库到大数据数据仓库的数据处理的建议:首先数据基因定义一定要完整准确,比如文件从别的地方传输过来,首先要验证文件大小有没有改变,如果没有改变就传一个成功标志位,然后把文件大小、产生时间这些信息添加到数据中,最后将数据整体传到数据层。
其次,数据血缘设计清晰可溯,有时候我们理解写完设计,从最初的源数据一直到最后报表展现的数据,它们之间的关系一定是很清晰的,确保它是可查可控的。
第三,数据安全机制原子化,对数据平台的分层数据做到基于存储机制的原子化安全控制,确保从底层实现数据的安全分层控制。
最后,核心指标及元数据做到可视化和监控自动化,它可以实现元数据数据治理的一个良性循环。通过监控报警发现哪些数据不一致,数据校验的比率、倾斜度超过什么样的指标规则,查看元数据业务或者技术元数据产生的信息,可以及时发现并解决问题。
飞谷云是我们做的一个大数据的平台,现在主要是做数据处理和分析的项目,里面搭建了OpenStack和Hadoop的多种版本。我们和各大公司有经验的技术人员建立了一个社区,主要在数据治理方面为大家做一些技术分享。
关于DTCC
中国数据库技术大会(DTCC)是目前国内数据库与大数据领域最大规模的技术盛宴,于每年春季召开,迄今已成功举办了七届。大会云集了国内外顶尖专家,共同探讨MySQL、NoSQL、Oracle、缓存技术、云端数据库、智能数据平台、大数据安全、数据治理、大数据和开源、大数据创业、大数据深度学习等领域的前瞻性热点话题与技术,吸引IT人士参会5000余名,为数据库人群、大数据从业人员、广大互联网人士及行业相关人士提供了极具价值的交流平台。
数据库
架构
数据分析
port
format
文件
服务器
hadoop
oracle
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
js
CentOS 7部署KVM虚拟化环境之一架构介绍
本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ...
[详细]
蜡笔小新 2023-12-12 21:38:57
js
[译]技术公司十年经验的职场生涯回顾
本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ...
[详细]
蜡笔小新 2023-12-14 11:31:05
js
2018年人工智能大数据的爆发,学Java还是Python?
本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ...
[详细]
蜡笔小新 2023-12-14 20:08:28
erlang
Thrift教程初级篇——RPC框架Thrift的安装环境变量配置与第一个实例
本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ...
[详细]
蜡笔小新 2023-12-13 17:36:52
get
Android 7自学笔记总结、移动架构视频、安卓面试真题、项目实战源码讲义
本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ...
[详细]
蜡笔小新 2023-12-13 10:06:58
get
如何搭建Java开发环境并开发WinCE项目
本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ...
[详细]
蜡笔小新 2023-12-12 17:37:32
post
Python SQLAlchemy库的使用方法详解
本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ...
[详细]
蜡笔小新 2023-12-12 15:23:06
post
Oracle优化新常态的五大禁止及其性能隐患
本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ...
[详细]
蜡笔小新 2023-12-12 12:55:55
byte
在虚拟服务器上安装oracle 10g客户端的问题及解决方法
本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ...
[详细]
蜡笔小新 2023-12-11 13:08:10
byte
揭秘阿里云WAF背后神秘的AI智能防御体系
背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ...
[详细]
蜡笔小新 2023-12-11 01:30:52
byte
模块化区块链生态系统的优势概述及其应用案例
本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ...
[详细]
蜡笔小新 2023-12-10 11:30:51
solr
ZooKeeper 学习
前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ...
[详细]
蜡笔小新 2023-10-17 17:07:40
solr
Python实现变声器功能(萝莉音御姐音)的方法及步骤
本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ...
[详细]
蜡笔小新 2023-12-14 16:21:36
spring
多因子选股模型在实际中的构建步骤及影响因素分析
本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ...
[详细]
蜡笔小新 2023-12-13 22:34:00
spring
Oracle存储过程写法小例子及已命名的异常
本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ...
[详细]
蜡笔小新 2023-12-11 15:10:15
爱lovely壮壮_366
这个家伙很懒,什么也没留下!
Tags | 热门标签
settings
plugins
scala
spring
request
erlang
bytecode
hashset
config
get
frameworks
audio
byte
httprequest
emoji
join
eval
jar
less
yaml
expression
md5
email
js
subset
post
solr
fetch
include
foreach
RankList | 热门文章
1
深入解析C++程序中激发事件和COM中的事件处理
2
C++中auto_ptr智能指针的用法详解
3
浅谈C++内存分配及变长数组的动态分配
4
关于C++为什么不加入垃圾回收机制解析
5
VS2010 boost标准库开发环境安装教程
6
Linux环境g++编译GDAL动态库操作方法
7
解析C语言结构体及位段
8
如何实现socket网络编程的多线程
9
64位linux 编译c提示gnu/stubs-32.h:No such file or directory的解决方法
10
C++ pair的基本用法总结整理
11
CLion安装、汉化、配置图文详解
12
c++ 判断是64位还是32位系统的实例
13
详解C++ STL vector容量(capacity)和大小(size)的区别
14
C++ STL vector的模拟实现
15
用C#操纵IIS(代码)
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有