A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小江哥 于 2018-11-20 09:25 编辑

亲爱的黑马坛友们
书接上回数仓问题:
1.ods dw dm  的区别

ODS应用场景

A. 在业务系统和数据仓库之间形成一个隔离层,ODS直接存放从各个业务系统抽取过来的数据,
这些数据从结构和数据逻辑关系上和业务系统保持一致,降低了数据抽取的复杂性。它的存在
可以避免数据仓库直接调用业务系统的数据。
B. 转移一部分业务系统细节查询的功能。因ODS存放的数据与业务系统相同,原来由业务系统
产生的报表,现在可以从ODS中产生了。
C. 完成数据仓库中不能完成的一些功能。ODS存放的是明细数据,数据仓库或DM存放的是汇聚
数据,ODS可提供查询明细的功能。

数据源源不断写入到ODS, 一经写入的数据就不能被更改,鉴于这些特性,ODS一般会考虑使用
分布式文件存储系统。 ODS数据只能增加不能修改,数据是业务系统的原样拷贝,可能存在数据
冲突的可能,解决方式是为每一条数据增加一个时间版本来区分相同的数据。

OLTP DB保留的是数据信息的最新状态,只有一个状态。ODS支持OLTP类型的数据更新,数据更
新时间短,数据可实现准实时更新,性能与及时性都高于EDW 。ODS层的数据粒度是最细的,它
的历史数据一般保存3-6个月,以节省空间。如果量不大,有些可以保存更长时间。

客户等关键实体数据。ODS长久保存当前数据,EDW长久保存当前与历史数据。
详单数据。ODS保存1个月到3个月;EDW保存2年。
汇总数据。ODS保存3年;EDW保存5年。
其他数据。ODS保存13个月;EDW保存3年。

ODS主要面向营业、渠道等一线生产人员和一线管理人员,为了实现准实时、跨系统的运营细节
数据的查询,以获得细粒度的运营数据展现,例如渠道人员查询客户的全视图信息由ODS提供数
据支撑。ODS中也存在部分粗粒度汇总数据,但汇总的维度少且简单。

DW  


数据仓库(Data Warehouse):是一个面向主题的(Subject Oriented)、集成的(Integrated)、
相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策
(Decision Making Support)。


时效:T+1


A.  主要提供查询服务,并要求查询能够及时响应.
B.  数据质量,DW提供很多决策系统的支撑数据,数据准确非常重要。DW的数据应该是唯一的具有
权威性的数据,企业所有决策系统只能使用从DW提供的被认可的数据。
C.  扩展性,业务扩展和降低企业建设数据仓库的成本考虑 。
D.  面向主题,DW中的数据是按照一定的主题域进行组织的,每一个主题对应一个宏观的分析领域。
数据仓库排除对决策无用的数据,提供特定主题的简明视图。


DW中的数据需要定期进行质量审核,保证权威准确;DW中的数据只允许增加,不允许删除和修改。
EDW需要的运营数据,如果在ODS中已存在,EDW则直接从ODS获取这部分数据。EDW需要的运营数据,
如果在ODS中没有,EDW则直接从生产系统获取这部分数据。


DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数
据。这一层的数据一般是遵循数据库第三范式的,其数据粒度通常和ODS的粒度相同。在DW层会保存
BI系统中所有的历史数据,例如保存10年的数据。


EDW主要面向专业分析人员、辅助决策支持人员等,为了实现基于历史数据的统计分析和数据挖掘,
以获得客户深层次的特征和市场发展的规律,例如专业分析人员的经营状况趋势分析由EDW提 供支撑。

DM  


数据集市,以某个业务应用为出发点而建设的局部DW。DM只关心自己需要的数据,不会全量考虑企业整体
数据架构和应用,每个应用有自己的DM。 数据集市就是满足特定的部门或者用户的需求,按照多维的方式
进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体(data cube)。


这层数据是面向主题来组织数据的,通常是星形或雪花结构的数据。从数据粒度来说,这层的数据是轻度
汇总级的数据,已经不存在明细数据了。从数据的时间跨度来说,通常是 DW 层的一部分,主要的目的是为
了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。
从数据的广度来说,仍然覆盖了所有业务数据。一个星型结构包含两个基本部分——一个事实表和各种支持维表。


事实表  ----
描述数据集市中最密集的数据。在电话公司中,用于呼叫的数据是典型的最密集数据;在银行中,与账目核
对和自动柜员机有关的数据是典型的最密集数据。对于零售业而言,销售和库存数据是最密集的数据等。
通常,事实表的数据不能更改,但可以输入数据。 它包括:一个反映事实表建立目的的实体的主键,如一张
订单、一次销售、一个电话等等,主键信息,连接事实表与维表的外键。


维度表 ----
维表是围绕着事实表建立的。维表包含非密集型数据,它通过外键与事实表相连。典型的维表建立在数据集
市的基础上,包括产品目录、客户名单、厂商列表等等。


数据集市产品 ---
国外知名的Garnter关于数据集市产品报告中,位于第一象限的敏捷商业智能产品有QlikView, Tableau和SpotView



2. hive 的几种存储格式

Hive文件存储格式
1.textfile
textfile为默认格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 hive无法进行合并和拆分

2.sequencefile
二进制文件,以<key,value>的形式序列化到文件中
存储方式:行存储
可分割 压缩
一般选择block压缩
优势是文件和Hadoop api中的mapfile是相互兼容的。


3.rcfile
存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势



4.orc

存储方式:数据按行分块 每块按照列存储

压缩快 快速列存取

效率比rcfile高,是rcfile的改良版本



5.自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式。

总结:
textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
rcfile 存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低

3.flume 各个组件的介绍
1.   SourceNetCat Source:绑定的端口(tcp、udp),将流经端口的每一个文本行数据作为Event输入;type:source的类型,必须是netcat。
bind:要监听的(本机的)主机名或者ip。此监听不是过滤发送方。一台电脑不是说只有一个IP。有多网卡的电脑,对应多个IP。
port:绑定的本地的端口。

Avro Source:监听一个avro服务端口,采集Avro数据序列化后的数据;type:avrosource的类型,必须是avro。
bind:要监听的(本机的)主机名或者ip。此监听不是过滤发送方。一台电脑不是说只有一个IP。有多网卡的电脑,对应多个IP。
port:绑定的本地的端口。

Exec Source:于Unix的command在标准输出上采集数据;type:source的类型:必须是exec。
command:要执行命令。

Spooling Directory Source:监听一个文件夹里的文件的新增,如果有则采集作为source。type:source 的类型:必须是spooldir
spoolDir:监听的文件夹 【提前创建目录】
fileSuffix:上传完毕后文件的重命名后缀,默认为.COMPLETED
deletePolicy:上传后的文件的删除策略never和immediate,默认为never。
fileHeader:是否要加上该文件的绝对路径在header里,默认是false。
basenameHeader:是否要加上该文件的名称在header里,默认是false。

2. SinkHDFS Sink:将数据传输到hdfs集群中。type:sink的类型 必须是hdfs。
hdfs.path:hdfs的上传路径。
hdfs.filePrefix:hdfs文件的前缀。默认是:FlumeData
hdfs.rollInterval:间隔多久产生新文件,默认是:30(秒) 0表示不以时间间隔为准。
hdfs.rollSize:文件到达多大再产生一个新文件,默认是:1024(bytes)0表示不以文件大小为准。
hdfs.rollCount:event达到多大再产生一个新文件,默认是:10(个)0表示不以event数目为准。
hdfs.batchSize:每次往hdfs里提交多少个event,默认为100
hdfs.fileType:hdfs文件的格式主要包括:SequenceFile, DataStream ,CompressedStream,如果使用了CompressedStream就要设置压缩方式。
hdfs.codeC:压缩方式:gzip, bzip2, lzo, lzop, snappy
注:%{host}可以使用header的key。以及%Y%m%d来表示时间,但关于时间的表示需要在header里有timestamp这个key。

Logger Sink将数据作为日志处理(根据flume中的设置的日志方式来显示)要在控制台显示在运行agent的时候加入:-Dflume.root.logger=INFO,console 。
type:sink的类型:必须是 logger。
maxBytesToLog:打印body的最长的字节数 默认为16

Avro Sink:数据被转换成Avro Event,然后发送到指定的服务端口上。type:sink的类型:必须是 avro。
hostname:指定发送数据的主机名或者ip
port:指定发送数据的端口

File Roll Sink:数据发送到本地文件。type:sink的类型:必须是 file_roll。
sink.directory:存储文件的目录【提前创建目录】
batchSize:一次发送多少个event。默认为100
sink.rollInterval:多久产生一个新文件,默认为30s。单位是s。0为不产生新文件。【即使没有数据也会产生文件】

3.ChannelMemory Channel使用内存作为数据的存储。Type channel的类型:必须为memory
capacity:channel中的最大event数目
transactionCapacity:channel中允许事务的最大event数目

File Channel 使用文件作为数据的存储Type channel的类型:必须为 file
checkpointDir :检查点的数据存储目录【提前创建目录】
dataDirs :数据的存储目录【提前创建目录】
transactionCapacity:channel中允许事务的最大event数目

Spillable Memory Channel 使用内存作为channel超过了阀值就存在文件中Type channel的类型:必须为SPILLABLEMEMORY
memoryCapacity:内存的容量event数
overflowCapacity:数据存到文件的event阀值数
checkpointDir:检查点的数据存储目录
dataDirs:数据的存储目录

4. InterceptorTimestamp Interceptor 时间戳拦截器 在header里加入key为timestamp,value为当前时间。type:拦截器的类型,必须为timestamp
preserveExisting:如果此拦截器增加的key已经存在,如果这个值设置为true则保持原来的值,否则覆盖原来的值。默认为false

Host Interceptor 主机名或者ip拦截器,在header里加入ip或者主机名type:拦截器的类型,必须为host
preserveExisting:如果此拦截器增加的key已经存在,如果这个值设置为true则保持原来的值,否则覆盖原来的值。默认为false
useIP:如果设置为true则使用ip地址,否则使用主机名,默认为true
hostHeader:使用的header的key名字,默认为host

Static Interceptor 静态拦截器,是在header里加入固定的key和value。type:avrosource的类型,必须是static。
preserveExisting:如果此拦截器增加的key已经存在,如果这个值设置为true则保持原来的值,否则覆盖原来的值。默认为false
key:静态拦截器添加的key的名字
value:静态拦截器添加的key对应的value值

5.  Channel SelectorMultiplexing Channel Selector 根据header的key的值分配channelselector.type 默认为replicating
selector.header:选择作为判断的key
selector.default:默认的channel配置
selector.mapping.*:匹配到的channel的配置

6. Sink Processor负载均衡
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=load_balance
a1.sinkgroups.g1.processor.backoff=true
a1.sinkgroups.g1.processor.selector=round_robin
a1.sinkgroups.g1.processor.selector.maxTimeOut=30000

backoff:开启后,故障的节点会列入黑名单,过一定时间再次发送,如果还失败,则等待是指数增长;直到达到最大的时间。
如果不开启,故障的节点每次都会被重试。
selector.maxTimeOut:最大的黑名单时间(单位为毫秒)。

故障转移
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=failover
a1.sinkgroups.g1.processor.priority.k1=10
a1.sinkgroups.g1.processor.priority.k2=5
a1.sinkgroups.g1.processor.maxpenalty=10000
#maxpenalty 对于故障的节点最大的黑名单时间 (in millis 毫秒)


今日小作业:
4. flume 和 kafka 的区别

hive的底层实现原理

hive和hbase的区别  以及为什么hive是数据仓库

spark 消费 kafka时 会出现的问题   和  spark消费kafka时 是如何消费的

hive 和spark的运行机理有什么不同

hive 实现 查询某字段连续出现    查询列表时间

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马