chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

java-大数据-数仓

数据仓库简介

什么是数据仓库

数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。
为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

数据仓库的特点

数据仓库的数据是面向主题的

主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。

数据集市,数据展示、报表

数据仓库的数据是集成的

数据仓库的数据是从原有的分散的数据库数据抽取来的。
1、数据仓库 抽取转换加载(ETL),就是需要现数据标准化,单位统一、字长一致、异名同义。
2、T + 1 与 T - 1 的数据什么意思。一个是实时的,一个是分区的。
3、

数据仓库的数据是不可更新的

数据仓库的数据是随时间不断变化的

集群搭建问题总结

1、Namenode 部分节点缺失

疑似原因一: 主机 ip 变化导致之前的date有问题,删除重新进行格式化,持怀疑态度? 误区 不是!
每次 namenode format 会重新创建一个 namenodeId, 而 data 目录包含了上次 format 时的 id,namenode format 清空了 namenode 下的数据 , 但是没有清空 datanode 下的数据 , 导致启动时失败 , 所要做的就是每次 fotmat 前 , 清空 data 下的所有目录 .
解决方法: 停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.data.dir目录。重新格式化namenode。
先停掉集群,然后将datanode节点目录/dfs/data/current/VERSION中的修改为与namenode一致即可。
疑似原因二: core-seting 配置文件缺少部分参数,比如最小内存以及Cpu个数

2、hadoop启动没有nodemanager

问题:发现如下错误:FATAL org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManager org.apache.hadoop.yarn.exceptions.YarnRuntimeException: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed, Message from ResourceManager: NodeManager

from hadoop22 doesn’t satisfy minimum allocations, Sending SHUTDOWN signal to theNodeManager.其实就是yarn-site.xml配置有点问题。nodemanager要求的内存最低1024MB

解决方法:更改yarn-site.xml的配置文件(如下)

1
2
3
4
5
6
7
8
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>

3、免密登陆最简单方式

通过ssh-copy-id的方式

命令: ssh-copy-id -i ~/.ssh/id_rsa.put <romte_ip>

1
2
3
4
5
6
7
8
9
10
11
12
13
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥

  id_rsa : 生成的私钥文件

  id_rsa.pub : 生成的公钥文件

  know_hosts : 已知的主机公钥清单

  如果希望ssh公钥生效需满足至少下面两个条件:

  1) .ssh目录的权限必须是700

  2) .ssh/authorized_keys文件权限必须是600

mark

4、Hive SQL任务执行报错 (Container killed on request. Exit code is 143)

  • 错误描述

执行 hive 任务报错

1
2
3
4
Diagnostic Messages for this Task:
Container [pid=27756,containerID=container_1460459369308_5864_01_000570] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.0 GB of 16.8 GB virtual memory used. Killing container.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

  • Hive 任务执行时设置的参数
1
2
3
4
5
6
7
8
9
10
11
查看关于 container 内存的配置:

hive (default)> SET mapreduce.map.memory.mb;
mapreduce.map.memory.mb=4096
hive (default)> SET mapreduce.reduce.memory.mb;
mapreduce.reduce.memory.mb=4096
hive (default)> SET yarn.nodemanager.vmem-pmem-ratio;
yarn.nodemanager.vmem-pmem-ratio=4.2

注:
yarn.nodemanager.vmem-pmem-ratio: 虚拟内存率,默认2.1
  • 错误分析

从 hive 报错看是由于物理内存达到限制,导致 container 被 kill 掉报错。
看日志的末端,看出现报错是属于哪一个阶段,是map task阶段或者reduce task阶段,是哪一阶段的内存不足导致的问题。

  • 结论

从上面执行时候配置的参数看,单个map 和 reduce 分配物理内存 4G; 虚拟内存限制 4 * 4.2 = 16.8G 。
所以从上面的报错信息来看,是由于单个 task (map task 或 reduce task) 处理的数据量超过物理内存 4G 限制导致的,所以设置mapreduce.map.memory.mb = 8092 或者 mapreduce.reduce.memory.mb = 8092 即可解决该问题。

  • 解决方法:

方案一:mapred-site.xml中设置map和reduce任务的内存配置如下:(value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
  <name>mapreduce.map.memory.mb</name>
  <value>1536</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1024M</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>3072</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value>
</property>

方案二:或者是关掉虚拟内存检查。我们选这个,修改yarn-site.xml

1
2
3
4
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

5、虚拟机固定ip

拓展虚拟机配置胡总和其他莫名其妙情况,会导致虚拟机ip改变

方案一:
1、获取虚拟机ip以及网关
ip a
2、修改网络配置

vim /etc/sysconfig/network-scripts/ifcfg-en33
mark

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:0C:29:F4:7E:C9"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="2a76c2f8-cd47-44af-936d-11559b3a498d"
IPADDR="192.168.73.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.73.2"

DNS1=192.168.123.1
DNS2=114.114.114.114


注意:GATEWAY 是 2 不然连不了外网 DNS 也需要配置 可以公共的DNS 也可以是电脑的DNS

3、重启网络或者虚拟机生效

5、flume unableto tail files

已解决,问题在于配置的拦截器有问题,导致所有event在拦截器处被拦截,flume在为event分配channel的时候,event为null,故抛出NPE

数据分层

分层的概念

mark

分层结构

函数

理论

表的分类

实体表:事实存在的业务对象。用户、商家、商品、销售人员。
维度表:就是业务状态,代码的解释表————码表。订单支付状态表、地区表、支付方式、审批状态、商品分类。

事务型事实表:产生的业务数据,特点一旦产生不会改变。交易流水、操作日志、出入库记录等等。
交易流水表通常包含哪些字段:编号对外业务编号、订单编号、用户编号、支付宝流水编号、支付金额、交易内容、支付类型、支付时间。
周期性事实表:也是业务产生的数据,但是特点是数据是周期性变化的。贷款申请、订单表。
订单表包含的字段;订单编号、订单金额、订单状态、用户id、支付方式、支付流水线号、创建时间、操作时间

订单表与订单流水表有什么区别呢?

同步策略

全量表、增量表、新增及变化表、拉链表。
上面四种表是啥意思?

实体表同步策略:
每日全量~

维度表同步策略:
每日全量~:有变化的做每日全量、无变化的做固定值

事务型事实表同步策略:
每日增量~:每日增量表,每日创建一个分区存储。
分区存储啥意意思?

周期型事务表同步策略:
数据的新增以及修改比较多,利用每日新增和变化表制作一张你拉链表。

范式理论

范式概念

关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的表结构,所符合的某种设计标准的级别。

使用范式的根本目的是:
1)减少数据冗余,尽量让每个数据只出现一次。
2)保证数据一致性
缺点是获取数据时,需要通过join拼接出最后的数据。

函数依赖:
完全函数依赖:AB能推出C,但是不能单独推出C。
部分函数依赖:AB能推出C,A和B都能单独推出C。
传递函数依赖:A能推B,B能推C,但是反过来推不了。

三范式区分:
1、第一范式:属性不可分割
2、第二范式:
3、第三范式

关系模型与维度模型

雪花模型、星型模型和星座模型

DWD ODS

去空 判重 导入数据

甲苯要看

降维是个什么鬼?

DWS

宽表是个什么鬼;做什么统计呢?

ADS

交易额 转化率 日活

漏斗分析

复购率

ODS & DWD

ODS

1、内部表与外部表啥意思

外部表:跨部门协作、多人操作同一张表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

外部表:临时表 自己测试使用的

表名要见名生意~ ods_

LZO 压缩处理: 输入格式就是lzo,输出运算结果是text

设置数据存储位置:
```
hive (gmall)>
drop table if exists ods_start_log;
CREATE EXTERNAL TABLE `ods_start_log`(`line` string)
PARTITIONED BY (`dt` string)
STORED AS
INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_start_log';
```

### DWD

看不明白,啥玩意是一进一出?多进多出?

``干啥的?

除了最后一层不能压缩 中间的都能压缩

压缩会不会影响性能?

启动日志基础明细表
时间日志基础明细表 两个啥区别?

GenericUDTF 什么鬼?

工厂类???长啥样? Java 设计模式咋玩的????

hive 的一个优化策略

导数据有六种

base_analizer 怎么处理空字符串 怎么防止数组越界

## 业务术语
新增用户:
日新增 月新增 周新增 拉融资~

活跃用户:
打开就算~~

周活跃 月活跃

沉默用户仅在当日活跃

版本分布:不同版本的周内新增用户数、活跃用户数、判断版本差异的优劣和用户行为

本周回流:上周未启动 本周启动了

连续n周活跃:
连续活跃:
近期流失用户: 多少周内没有使用的
留存用户: 某段时间新增的 过了多久之后还剩余多少用户
用户新鲜率:老用户 与 新用户 活跃占比
单次使用时间:
日使用时间:
启动次数计算标准:

collect_set函数

hive 的其他函数多练练 连熟悉 特别是蚂蚁金服的那玩意 sql 是要每天要练习的 大量练习 练出感觉

需求 用户活跃主题

DWS层

日活 周活 月活 是所有公司必须统计的

ADS层

##

喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道