数仓 - 知识图谱,技术组件,面试问题
2024-04-23 10:36:33 12 举报
AI智能生成
登录查看完整内容
数仓 - 数据仓库,技术组件,面试问题; datahouse, dataware, extract, transform, load, etl, mq, hive, hbase, linux
作者其他创作
大纲/内容
hdfs
flume/java
kafka
flume
前端埋点产生日志行为数据logfile
sqoop/datax/kettle
后台产生的业务数据mysq
采集通道
hive、spark
数仓建模
即时查询 kylin、prosto
数据分析
superset
可视化
报表系统、用户画像、推荐系统
输出
权限管理
元数据管理:atlas
shell griffin
数据质量
数仓
多人开发 mysql
元数据
mapreduce
4个器 编译器、解析器、优化器、执行器sql变换
客户端
组成
海量数据查询
数据量大快
大数据
hive
小数据量查询
数据量小块
小数据
mysql
与mysql区别
删除数据:元数据、原始数据
内部表
删除数据:元数据
外部表
企业中,临时使用创建内部表,绝大多数外部表
内部表和外部表
很少使用
全局排序 (数据倾斜)
order by
排序
sort by
企业一般分区+排序
分区
depart by
sort by+depart by
class by
4个by
get_json_object
last_day
next_day
date_sub
date_add
系统函数
定义类,继承UDF,重写evaluate方法
1进1出 一行
自定义UDF函数
打包+上传HDFS=》在hive客户端创建
定义类继承G..UDTF,重写里面3个方法初始化(定义名称、校验返回值类型)、close process
多进多出 一进多出
自定义UDTF函数
自定义函数
rank
over
topn
窗口函数
mapjoin 默认打开,不要关闭
行列过滤 join where=》where join
小文件
优化
Apache Spark是一个开源的分布式计算系统,旨在提供高性能、易用性和通用性。
Spark的设计目标是解决传统的 Hadoop MapReduce 的局限性,包括高延迟、低效率和限制性的API
定义
Spark应用程序的主要入口点,驱动器负责管理应用程序的整体执行流程。驱动器程序通常运行在一个独立的进程中,负责与集群管理器交互,将工作分发给集群的Executor。驱动器负责将用户的应用程序转换为任务,并协调Executor的执行。
Driver(驱动器)
在Spark集群中运行的工作单元,负责执行任务并存储数据。每个Executor通常运行在独立的JVM进程中,并由集群管理器分配给特定的节点。Executor负责执行驱动器分配的任务,并在需要时缓存数据,以便后续重用。
Executor(执行器)
负责管理Spark集群中的 资源分配 和 任务调度。Spark支持多种集群管理器,包括独立部署模式、Apache Mesos 和 Hadoop YARN等。集群管理器负责启动和停止Executor,以及监视集群中的资源使用情况以便动态调整资源。
Cluster Manager(集群管理器)
弹性分布式数据集,是Spark中的核心抽象概念。RDD是分布式对象的集合,可以在集群中进行并行操作。RDD具有容错性,可以通过存储每个分区的转换操作来重新计算丢失的数据。
RDD(Resilient Distributed Dataset)
负责管理Executor节点上的数据存储和数据传输。Block Manager负责将数据分割为固定大小的数据块,并在集群中的不同节点之间进行传输和复制。它还负责在Executor节点上管理内存和磁盘上的数据存储,以便在需要时进行快速访问。
Block Manager(块管理器)
Spark SQL(结构化数据处理)
组件
案例
实时数据处理和流式分析(real time streaming)
机器学习和数据挖掘
利用context案例
图数据分析
实时推荐系统
优势
SparkContext是Spark应用程序的入口点,用于与Spark集群进行通信和管理资源。它负责创建RDD、广播变量和累加器,并启动Spark作业的执行。
SparkContext API
RDD(Resilient Distributed Dataset)是Spark中的核心数据抽象,代表分布式的对象集合。RDD支持各种转换操作(如map、filter、reduce等)和行动操作(如collect、count、saveAsTextFile等),用于进行数据处理和分析。
RDD API
DataFrame是基于RDD的高级抽象,提供了类似于关系型数据库表的数据结构和操作接口。DataFrame支持SQL查询、结构化数据处理和机器学习任务,具有更高的性能和易用性。
DataFrame API
Streaming API用于实时数据流处理,可以从各种流式数据源中读取数据,并进行实时处理和分析。它提供了丰富的转换操作(如window、map、reduceByKey等)和输出操作(如saveAsTextFiles、foreachRDD等)。
Streaming API
MLlib是Spark中的机器学习库,提供了各种常用的机器学习算法和工具,如分类、回归、聚类、推荐等。它支持分布式模型训练和批量预测。并具有高性能。
MLlib API
技术栈
作业提交、任务调度、数据处理、结果返回
计算
spark
producer
broker
consumer
Zookeeper是Kafka集群的协调者,负责管理Broker的状态、Partition的分配和 Offset 偏移量的管理。
id
number
partition
offset
comsumer
没有producer
zookeeper
默认一个 一般2
副本多:可靠性高,性能降低
提高可靠性
副本
先设置1-3个
生产者峰值生产速率tp、消费者峰值消费速率tc
期望的吞吐量t
期望的吞吐量t 100m/s 分区数=t/min(tp,tc)
100/20= 5个分区
提高并发度
统一发生数据倾斜
range 默认
采用hash方式打散,再采用轮询的方式执行
roundrobin
分区分配策略
可以存储TB级别的数据量
100万日活 100条 1k 每天一亿条
一亿条/(24h*3600s)=1150条/s
数据量
7-3天
数据保存多久
100g*2个副本*5天/0.7
磁盘空间
满足下一级所有消费者
topic合适
基本信息
短期:flume channel缓冲数据
长期:日志服务器保留30天日志
挂了
ZNode(节点):Zookeeper的基本数据单元,类似于文件系统中的文件或目录。每个ZNode都有一个唯一的路径标识符,可以包含数据和子节点。数据:每个ZNode可以存储一些数据,这些数据可以是任意类型的字节流。子节点:每个ZNode可以有多个子节点,子节点可以包含数据和更多的子节点,形成一个树状结构。版本号:每个ZNode都有一个版本号,用于实现乐观锁机制,确保数据的一致性。
Zookeeper的多节点和顺序性
解决leader选举
可靠性最差,传输性能最好
0 发过来数据,不需要应答
可靠性一般,传输性一般
1 发过来数据,leader应答
-1 发过来数据,leader和follower共同应答
ack
丢了
关闭就重启
单分区单会话内数据不重复
效率低
利用id判断重复
幂等性
同步,效率低
事务
事务、幂等性+ack=-1
在业务端使用幂等
下一级处理
重复了
1个cpu两个线程,消费两个分区
增加分区,增加消费者对应cpu核数
提高消费速度,如日志是1k,1000条/s
增加消费者batchsize
积压了
日志保存3天
两个副本
减少重传
增加通信延迟
默认1G,不要超过6G
内存
使用集群、分区
顺序读写600m/s 随机速写100m/s
内存到内核,内核到内存
零拷贝
高效读写
调整最大字节数
卡顿现象
传输了一条2m日志文件
删除或者压缩
过期数据清理
单分区有序,多分区分区与分区间无序
数据是否有序
awk '{print $1}' data.txt
awk
grep \"an\" data.txt
grep
要将文件中的\"world\"替换为\"everyone\",可以使用sed
sed 's/world/everyone/' data.txt
sed
三剑客
sort file.txt
sort -r file.txt
docker ps --format \"{{.Names}}\" | sort
sort
cut
其他技巧
top
htop
top -p id
查看XXX进程
ps -ef | grep xxx
进程管理
查看端口号
natstat
查看网卡状态
ip link
查看网卡的ip地址信息
ip address
端口管理
是一种较为古老的文件系统格式
支持最大单个文件4GB,最大磁盘容量为2TB。
FAT32格式通常用于移动设备和存储设备,如U盘、SD卡等。几乎所有操作系统都支持FAT32格式。
FAT32(File Allocation Table 32)
是Windows操作系统中常用的文件系统格式
支持单个文件大小达到16TB,最大磁盘容量为256TB。
NTFS格式支持文件加密、压缩、权限控制等功能。Windows操作系统完全支持NTFS格式,而其他操作系统 macOS和Linux也可以读取 NTFS格式的磁盘。
NTFS(New Technology File System)
一种针对移动设备和闪存存储设备设计的文件系统格式
支持单个文件大小达到16EB,最大磁盘容量为128PB。
exFAT格式通常用于大容量移动硬盘、闪存卡等设备。Windows、macOS和Linux 等操作系统都支持exFAT格式。
exFAT(Extended File Allocation Table)
是苹果公司开发的文件系统格式,用于Mac OS X操作系统。
HFS+支持单个文件大小达到8EB,最大磁盘容量为8EB。
HFS+格式在macOS系统中得到完全支持,但在Windows和Linux系统中需要安装额外的驱动程序才能读取HFS+格式的磁盘。
HFS+(Hierarchical File System Plus)
是指在磁盘上分配存储空间的最小单位。选择合适的单元大小可以影响磁盘的性能和空间利用率。
对于大容量的磁盘,可以选择较大的单元大小,以减少碎片化;
对于小容量的磁盘,可以选择较小的单元大小,以提高空间利用率。常见的分配单元大小有4KB、8KB、16KB等。
原理:分配单元大小的选择会影响文件系统的存储效率。
分配单元大小
文件系统格式
fdisk -l
查看磁盘
df 默认以 K 计算大小
df -h
查看磁盘空间
mkfs.ext4 /dev/sdb
格式化磁盘
mount /dev/sdb /data
挂载到目录
挂载磁盘
磁盘管理
常用参数:-m:创建用户的同时创建用户的家目录。-g:指定用户所属的初始用户组。
adduser:用于添加新用户
常用参数:-aG:将用户添加到指定的用户组。-l:修改用户名。
usermod:用于修改用户属性
常用参数:--remove-home:删除用户的同时删除用户的家目录。passwd:用于修改用户密码。
deluser:用于删除用户
su:切换用户
sudo:以超级用户权限执行命令。
whoami:显示当前登录用户的用户名。
groups:显示当前用户所属的用户组。
id:显示用户的 UID 和 GID。
用户管理
groupadd:同addgroup,用于添加新用户组
addgroup:用于添加新用户组
groupdel:同delgroup,用于删除用户组
delgroup:用于删除用户组
usermod -aG root
常用参数:-g:修改用户的初始用户组。-aG:将用户添加到指定的用户组。
usermod:用于修改用户属性,包括用户所属的用户组
groups:显示用户所属的用户组
组管理
最前面 - 代表的是类型中间那三个 rwx 代表的是所有者(user)然后那三个 rw- 代表的是组群(group)最后那三个 r-- 代表的是其他人(other)
含义
r 表示文件可以被读(read)w 表示文件可以被写(write)x 表示文件可以被执行(如果它是程序的话)- 表示相应的权限还没有被授予
其中:rwx也可以用数字来代替r ------------4w -----------2x ------------1- ------------0
权限
chmod a+r xxx.xx表示给所有人读取xxx.xxx这个文件的权限
chmod u+rwx xxx.xx表示给所有者 添加读写执行的权限
chmod go-rw xxx.xx表示删除xxx.xxx中组群和其他人的读和写的权限
其中:u 代表所有者(user)g 代表所有者所在的组群(group)o 代表其他人,但不是u和g (other)a 代表全部的人,也就是包括u,g和o
操作
sudo chmod 600 ××× (只有所有者有读和写的权限) sudo chmod 700 ××× (只有所有者有读和写以及执行的权限) sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) sudo chmod 666 ××× (每个人都有读和写的权限) sudo chmod 777 ××× (每个人都有读和写以及执行的权限)sudo chmod -R 777 文件或文件夹的名字(若分配给某个文件所有权限)
其他常用样例
权限管理 permision
shell
50070
9870
yarn
8088
查看任务情况
19888
9000、8020
外部访问
9000、8020、9820
端口号
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
slaves
workers
配置文件
入门
读写流程
namenode受不了 一个文件块150字节128g/150bytes=128 *1024m*1024kb*1024bytes=9亿
一个文件块->一个maptask 1g内存
危害
减少maptask
CombineTextinputformat
类似文件压缩
har归档
jvm重用
解决
3
1.x 64m
2.x 3.x 128m
本地 32m
企业开发 128m、256m
块大小根据传输速率设置
块大小
map方法之后,reduce方法之前混洗的过程
shuffle
reduce
reduce之后压缩:永久保存,压缩越小下一个map输入:数据量小:快 spappy/lzo 数据量大:切片 bzip2/lzop
归并
分组
拉取到内存,不够持久化到磁盘
默认拉取5个 优化性能高10-20个
优化增加内存
写入磁盘
优化:压缩,减少磁盘io快 spappy/lzo
默认一次拉取10个,可优化20个
环形缓冲区 100m 80% 溢写
优化 200m 90%,影响溢写文件个数
溢写文件
排序:快排对key的索引排序按照字典顺序排
对溢写文件提前combiner 不影响最终结果
getpartition 标记数据是哪一个分区的
优化:自定义分区
map之前压缩数据量小:快 spappy/lzo数据量大:切片 bzip2/lzop
map
map 快排、归并
reduce 归并、分组
默认8g->100g
nodemanager
maptask 1G128M数据->1G内存
reducetask 1G128M数据->1G内存
单任务默认内存8G 分布式128M数据->1G内存
内存参数
resourcemanager接受appid请求并返回集群路径
配置文件 参数
xml
代码
jar
决定maptask数量
切片
向路径提交
切片决定maptask数量
从路径获取文件
开启reducetask
nodemanager container 空闲就来领取task 由appmaster开启maptask 完成之后持久化到磁盘等待reduce
向resourcemanager申请maptask
nodemanager container 空闲就来领取task 成为appmaster
task管理
resourcemanager申请 appmaster task
client
工作机制
单队列,串行,几乎不用
先进先出
fifo
默认1个队列,按照分析引擎创建队列(spark、flink、hive),按照业务分:登录、注册、购物车
先进入的任务优先执行
支持多队列,可以借用其他队列资源
底层是fifo
容量调度器
公平享有队列资源,谁的缺额多,分配资源多
公平调度器
apache 默认容量调度
并发度要求比较高,选择公平,中大型并发度低,服务器性能差,选择容量
调度器
半数机制
选举机制
10-3
20-5
50-7
100-7
台数越多,增加可靠性,效率低
安装台数
hadoop
断点续传、多目录
1.7实现
offset持久化到磁盘
自定义实现source
采用事务方式、效率低
自身
hive、dwd、sparkstream,groupby,开窗取窗口第一条
不会丢数据、有可能有重复数据
taildirsource挂了
递归+读取数据
自定义
不支持
不支持递归遍历文件夹
taildirsource
基于磁盘,可靠性高,性能低
file channel
基于内存,可靠性低,性能高
memory channel
数据存储在kafka里面,磁盘,可靠性高
优于memory,直接进入kafka
kafka channel
下一级kafka选择memory下一级不是 可靠选file、性能选memory
channel
大小128m、时间1-2小时,event格式禁止0
hdfs sink
提前过滤
etl拦截器
获取日志里面的数据时间,根据这个时间创建hdsf目录
时间戳拦截器
定义类实现interceptor接口,重写里面4个方法初始化、关闭、单event、多event,builder
自定义拦截器
可以不用,到下一步再处理
拦截器
把数据发往下一级所有通道
replicating 默认
把数据选择性发往指定通道
muliplexing
选择器
监控put/take事务尝试提交的次数远远的大于最终提交成功的次数说明flume异常。
自身:增加内存
找兄弟:增加服务器
监控器
file channel 能配置多目录就配置多目录
source、channel、sink、put、take
拦截器、选择器、监控器
三个器
100个
memory
100w个
file
不会丢失,可能重复
taildir source
挂了怎么办
database
数仓知识图谱
0 条评论
回复 删除
下一页