数据仓库的分层「数据库分层」
今天给大家普及一下数据仓库的分层「数据库分层」相关知识,最近很多在问数据仓库的分层「数据库分层」,希望能帮助到您。
目录
1. 什么是数据分层?
2. 数据分层的好处 一种通用的数据分层设计
3. 举例
4. 各层会用到的计算引擎和存储系统
5. 分层实现
6.数据分层的一些概念说明
7.大数据相关基础概念
8.hadoop安装步骤详解
1. 什么是数据分层?
数据分层是一套行之有效的数据组织和管理方法,使得数据体系更有序。
2. 数据分层的好处
(1)清晰数据结构每一个数据分层都有它的作用域和职责,在使用表的时候能更方便的定位和理解。(2)减少重复开发规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。(3)统一数据口径通过数据分层,提供统一的数据出口,统一对外输出的数据口径。(4)复杂问题简单化将一个复杂的任务分解成多个步骤完成,每一层解决特定的问题。
一种通用的数据分层设计ODS:存放原始数据DW:存放数仓中间层数据APP:面向业务定制的应用数据
3. 举例
以下是一个电商网站的数据体系设计,只关注用户访问日志这部分数据。
4. 各层会用到的计算引擎和存储系统
5.分层实现
在确定建模思路和模型类型之后,下一步的工作是数据分层。数据分层可以使得数据构建体系更加清晰,便于数据使用者快速对数据进行定位;同时数据分层也可以简化数据加工处理流程,降低计算复杂度。
我们常用的数据仓库的数据分层通常分为集市层、中间层、基础数据层上下三层结构。由传统的多层结构减少到上下三层结构的目的是为了压缩整体数据处理流程的长度,同时扁平化的数据处理流程有助于数据质量控制和数据运维。
在上下三层的结构的右侧,我们增加了流式数据,将其添加成数据体系的一部分。这是因为当前的数据应用方向会越来越关注数据的时效性,越实时的数据价值度越高。
但是,由于流式数据集的采集、加工和管理的成本较高,一般都会按照需求驱动的方式建设;此外,考虑到成本因素,流式数据体系的结构更加扁平化,通常不会设计中间层。
下面来具体看下每一层的具体作用。
数据基础层
数据基础层主要完成的工作包括以下几点:
数据采集:把不同数据源的数据统一采集到一个平台上;数据清洗,清洗不符合质量要求的数据,避免脏数据参与后续数据计算;数据归类,建立数据目录,在基础层一般按照来源系统和业务域进行分类;数据结构化,对于半结构化和非结构化的数据,进行结构化;数据规范化,包括规范维度标识、统一计量单位等规范化操作。数据中间层
数据中间层最为重要的目标就是把同一实体不同来源的数据打通起来,这是因为当前业务形态下,同一实体的数据可能分散在不同的系统和来源,且这些数据对同一实体的标识符可能不同。此外,数据中间层还可以从行为中抽象关系。从行为中抽象出来的基础关系,会是未来上层应用一个很重要的数据依赖。例如抽象出的兴趣、偏好、习惯等关系数据是推荐、个性化的基础生产资料。
在中间层,为了保证主题的完整性或提高数据的易用性,经常会进行适当的数据冗余。比如某一实事数据和两个主题相关但自身又没有成为独立主题,则会放在两个主题库中;为了提高单数据表的复用性和减少计算关联,通常会在事实表中冗余部分维度信息。
数据集市层
数据集市层是上下三层架构的最上层,通常是由需求场景驱动建设的,并且各集市间垂直构造。在数据集市层,我们可以深度挖掘数据价值。值得注意的是,数据集市层需要能够快速试错。
数据架构
数据架构包括数据整合、数据体系、数据服务三部分。其中,数据整合又可以分为结构化、半结构化、非结构化三类。
数据整合
结构化数据采集又可细分为全量采集、增量采集、实时采集三类。三种采集方式的各自特点和适应场合如上图所示,其中全量采集的方式最为简单;实时采集的采集质量最难控制。
在传统的架构中,日志的结构化处理是放在数仓体系之外的。在大数据平台仓库架构中,日志在采集到平台之前不做结构化处理;在大数据平台上按行符分割每条日志,整条日志存储在一个数据表字段;后续,通过UDF或MR计算框架实现日志结构化。
在我们看来,日志结构越规范,解析成本越低。在日志结构化的过程中,并不一定需要完全平铺数据内容,只需结构化出重要常用字段;同时,为了保障扩展性,我们可以利用数据冗余保存原始符合字段(如useragent字段)。
非结构化的数据需要结构化才能使用。非结构化数据特征提取包括语音转文本、图片识别、自然语言处理、图片达标、视频识别等方式。尽管目前数仓架构体系中并不包含非结构化数据特征提取操作,但在未来,这将成为可能。
数据服务化
数据服务化包括统计服务、分析服务和标签服务:
统计服务主要是偏传统的报表服务,利用大数据平台将数据加工后的结果放入关系型数据库中,供前端的报表系统或业务系统查询;分析服务用来提供明细的事实数据,利用大数据平台的实时计算能力,允许操作人员自主灵活的进行各种维度的交叉组合查询。分析服务的能力类似于传统cube提供的内容,但是在大数据平台下不需要预先建好cube,更灵活、更节省成本;标签服务,大数据的应用场景下,经常会对主体进行特征刻画,比如客户的消费能力、兴趣习惯、物理特征等等,这些数据通过打标签转换成KV的数据服务,用于前端应用查询。6.数据分层的一些概念说明
大数据数据仓库是基于HIVE构建的数据仓库,分布文件系统为HDFS,资源管理为yarn,计算引擎主要包括MapReduce/Tez/Spark等,分层架构说明如下:
1、数据来源层:日志或者关系型数据库,并通过Flume、Sqoop、Kettle等etl工具导入到HDFS,并映射到Hive的数据仓库表中。
2、事实表是数据仓库结构中的中央表,它包含联系事实与维度表的数字度量值和键。事实数据表包含描述业务(例如产品销售)内特定事件的数据。
3、维度表是维度属性的集合。是分析问题的一个窗口。是人们观察数据的特定角度,是考虑问题时的一类属性,属性的集合构成一个维。数据库结构中的星型结构,该结构在位于结构中心的单个事实数据表中维护数据,其它维度数据存储在维度表中。每个维度表与事实数据表直接相关,且通常通过一个键联接到事实数据表中。星型架构是数据仓库比较流向的一种架构。
星型模式的基本思想就是保持立方体的多维功能,同时也增加了小规模数据存储的灵活性。
说明:
1)、事实表就是你要关注的内容;
2)、维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的。
例如,某地区商品的销量,是从地区这个角度观察商品销量的。事实表就是销量表,维度表就是地区表
4、主题表:主题(Subject)是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。例如“销售分析”就是一个分析领域,因此这个数据仓库应用的主题就是“销售分析”。
面向主题的数据组织方式,就是在较高层次上对分析对象数据的一个完整并且一致的描述,能刻画各个分析对象所涉及的企业各项数据,以及数据之间的联系。所谓较高层次是相对面向应用的数据组织方式而言的,是指按照主题进行数据组织的方式具有更高的数据抽象级别。与传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题进行组织的。例如,一个生产企业的数据仓库所组织的主题可能有产品订货分析和货物发运分析等。而按应用来组织则可能为财务子系统、销售子系统、供应子系统、人力资源子系统和生产调度子系统。
5、汇总数据层:聚合原子粒度事实表及维度表,为满足固定分析需求,以提高查询性能为目的,形成的高粒度表,如周报、月报、季报、年报等。
6、应用层:
为应用层,这层数据是完全为了满足具体的分析需求而构建的数据,也是星形结构的数据。应用层为前端应用的展现提现数据,可以为关系型数据库组成。
7、【补充】
数据缓存层:
用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。
临时数据表层:
存放临时测试数据表(Temp表),或者中间结果集的表。
7. 大数据相关基础概念
数据源:业务系统、埋点、爬虫PG:PostgreSQL,一种关系型数据库Sqoop:是一个在结构化数据(mysql/oracle)和Hadoop(Hive)之间进行批量数据迁移的工具Flume:是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;提供对数据进行简单处理,并写到各种数据接受方(HDFSHbase)的能力。Kafka:是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统。Flink:一个流式的数据流执行引擎。针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。Kylin:是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力一直吃超大规模数据。能在亚秒内查询巨大的Hive表。ES:elasticsSearch,是一个高扩展、开源的全文检索和分析引擎,可准实时地快速存储、搜索、分析海量的数据。Hadoop:是一个分布式系统基础架构,可使用户在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。两大核心:HDFSMapReduceHDFS:是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。MapReduce:分布式计算框架。Spark:是一个专为大规模数据处理而设计的快速通用的计算引擎。
附Hadoop安装步骤详解
一般大数据集群都是由Hadoop组成的,本文的最终目标是安装和配置两台Ubuntu服务器,让他们组成Hadoop的集群。
1、用vmware workstation建立虚拟机,开始先不选择安装包
内存选择:如果本机是4G内存,则分配虚拟机1G内存
2、按默认要求来,完成虚拟机的初步配置
3、开始ubuntu的安装
选择镜像文件(我用的版本也在上面的网盘里下载),然后一步步的安装
4、选择电脑名称为hd1,密码为123456。注意Your name设置为ubuntu
5、打开Ubuntu虚拟机,打开终端编辑器
6、安装并进入vmware Tools。安装通过点击虚拟机->安装VMware Tools进行安装。
7、复制VMware Tools的压缩包到另一个文件目录下。这里放到了tmp目录下。
8、解压VMWare Tools
9、解压后进入vmware-tools-distrib
10、继续编写命令进行安装 sudo./vmware-install.pl
11、安装VMware Tools成功
12、利用 sudo aptinstall vim安装vim。安装完成后如下图。
13、输入reboot重启,同时重启后输入init 0关闭虚拟机
14、复制hd1文件夹,命名为hd2,放在存虚拟机的文件夹下
15、用记事本打开hd2文件夹下的hd1.vmx。修改其中的displayName为hd2.
再用VMware WorkStation打开hd1.vmx
16、分别启动两台虚拟机
17、根据电脑的ip配置/etc/hosts文件,给IP地址一个别名,方便后面操作。注意ip地址为你两台虚拟机的ip地址。用ifconfig命令可以查看本机IP。一般是191.168.开头的一串IP地址。我配置如下。
sudo vim /etc/hosts
192.168.241.132 hd1
192.168.241.130 hd2
18、安装openssh-server
19、启动ssh
20、保证每次开机时自动启动ssh
21、多机互信,两台虚拟机都要执行ssh-keygen-t rsa命令。
22、进行密钥的互信,两台虚拟机都要执行cat id_rsa.pub >> authorized_keys命令。
23、将hd1的文件拷到hd2上,同时把hd2的文件拷到hd1上
24、验证已经实现双机互信
25、在hd1上进行hadoop的安装
26、在hd1和hd2上进行java的安装。
两台主机都要执行sudo apt install default-jre命令。
27、在hd1和hd2上分别进行相关目录的创建
接下来需要配置hadoop集群文件
配置文件有7个:
/home/ubuntu/hadoop/hadoop/etc/hadoop/hadoop-env.sh
/home/ubuntu/hadoop/hadoop/etc/hadoop/yarn-env.sh
/home/ubuntu/hadoop/hadoop/etc/hadoop/slaves
/home/ubuntu/hadoop/hadoop/etc/hadoop/core-site.xml
/home/ubuntu/hadoop/hadoop/etc/hadoop/hdfs-site.xml
/home/ubuntu/hadoop/hadoop/etc/hadoop/mapred-site.xml
/home/ubuntu/hadoop/hadoop/etc/hadoop/yarn-site.xml
28、配置env文件。28-34步只在hd1上完成
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
export HADOOP_HOME=/home/hadoop/hadoop
29、配置yarn-env文件
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
30、配置slave文件
hd1
hd2
31、配置core-site文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://hd1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/ubuntu/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
32、配置hdfs-site文件
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hd1:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hd1:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ubuntu/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/ubuntu/hadoop/hdfs</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>dfs.support.broken.append</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
33、配置mapred-site文件
注意先将mapred-site.xml.template文件拷出,然后再使用vim命令
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hd1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hd1:19888</value>
</property>
34、配置yarn-site文件
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hd1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hd1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hd1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hd1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hd1:8088</value>
</property>
35、在hd1和hd2上配置路径文件。执行下面两条命令
sudo vim /etc/profile
export PATH=$PATH:/home/ubuntu/hadoop/hadoop/bin:/home/ubuntu/hadoop/hadoop/sbin
36、在hd1上加入hadoop路径到path路径下
37、在hd1上格式化namenode,执行hadoop namenode -format命令
38、在hd1上进行文件的分发,注意命令行当前所在的位置。
39、验证是否安装成功
在hd1上建一个a.txt文件
拷到hdfs文件里面去
打印显示
自此安装成功