大数据相关知识点
大数据转行不易,希望能帮助到你
资料下载+XMind:https://pan.baidu.com/s/1Xn7WPNwNUwdwDW6V0ZGyvg
提取码:raog
复制这段内容后打开百度网盘手机App,操作更方便哦
VX:WL1179952622 有问题的可以加我好友,都是出来混饭吃,互帮互助,闲人勿扰哈!
目录
Hadoop
HDFS相关
1、心跳机制
为了保证数据正常传输,datanode会每隔一段时间发送一次心跳信息给nn,心跳信息包含自身状态信息,也包好自身数据信息,datanode不会知道自己的信息属于那一块,因为nn中存放着这些信息,如果datanode不再发送信息给nn,nn则会发送信息向da去确认datanode是否宕机,确认2次,都无消息后怎确认宕机。
2、机架感应
机架感应是一种策略,存放datanode的时候,拿2个举例,第一个datanode会放在与客户端第一个相同的机架上,第二个会放在与第一个不同的机架上,第三个会放在与第一个block相同的机架上
3、副本存放策略,默认多少
副本存放策略是一个hadoop安全性能的表现。一般存储文件的时候会把相应的文件按照配置的块的大小切割,然后每一个block会默认备份3份,每份128M,参数都可调
4、读流程
客户端向namenode发送RPC请求,nn会先确认客户端是否有权限读取响应文件,然后会将数据的结点信息发送给客户端,客户端拿到信息后会调用read()方法寻找最近相关的block,每找打一个就会寻找下一个block,最终调用close方法结束读流程
5、写流程
客户端向nn发送写请求,nn会检查客户端是否具有响应权限,并且核查是否存储了同样文件信息,如果都符合则会进入写操作,首先nn会将节点信息发送给客户端,客户端拿到节点信息后以块的形式将节点存储,第一个节点存储完毕后,会以管道的形式连接下一个节点,如果此时下一个节点出现了问题,无法存储,则会跳过该节点,存储至下一个节点,这时nn会重新分配节点信息,重新存储,当默认3个副本存放完成后,会向客户端返回一个ack信息表示成功
6、Fsmage、edits
Fsmage是存放元数据信息的,edits会存放一些更新操作,每次nn启动时都会经行Fsmage的读取,fsimage和edits文件都是经过序列化的,在namenode启动的时候,它会将fsimage文件的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持i客户端的读操作,NameNode起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢,但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写操作都执行完成之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。
7、相关节点配置
datanode会布置在各个节点上,nn一般会放在第一个节点上
8、namenode和datenode的关系
nn存放元数据信息,比如每一个块的位置信息,时间戳等信息,datanode则存放切块文件
MR
1、MR机制,运行过程
一个MR启动时会最先启动一个MRAppMater,MRAppMaster启动后根据本次job描述信息,计算出需要的maptask,然后向集群启动启动相应的maptask进程,maptask进程启动后,根据给定的数据切片范围进行数据处理,主流程为用客户指定的inpuFormat来获取RecordReader读取数据,形成KV对,将输入KV对传第给客户定义的map方法,做逻辑运算,并将map方法处处KV对收集到缓存,将缓存中的KV对按照K分区排序后不断溢写到磁盘文件中
2、Mapprt端相关
进行切片
3、Reducer端相关
进行分区排序整理结果
4、Shuffle过程
首先要知道shffle是怎么来的,shuffle简单来说就是在MR过程中,Mapper端不断向外存储kv,导致溢出至内存,这时才会使用shuffle机制,shuffle会经历这几个阶段,collect-sort-spill-merge,首席按shuffle会收集这些shuffle,进行collect阶段,然后进行sort拍寻,spill过程会将这些内存的文件转化成本地磁盘上的文件,merge根据索引会找到这些文件进行输出
Yarn
1、什么是Yarn
资源调度器
2、作用
略
hadoop该部分内容已经作为思维导图整理,需要的请自行下载,更加详细
HIVE
1、Hive数据仓库与数据库异同
(1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,` 再无类似之处。 (2)数据存储位置。 hdfs raw local fs (3)数据格式。 分隔符 (4)数据更新。hive读多写少。Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。 INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 不支持的 HDFS 一次写入多次读取 (5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。 (6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架 (7)可扩展性 (8)数据规模
2、Hive的表结构,内部表,外部表,分区表,桶表
内部表:内部表会把数据复制或剪切到表的目录下,删除时会间元数据信息和表数据同时删除,外部表:外部表创建的时候不会将数据移动到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径,外部表删除表的时候只会删除表的元数据信息不会删除表数据
3、Hive的操作语句
增删查改都要会,略
4、Hive存储元数据
我用的是mysql,可以分析分析元数据中表与表之间的关系
5、Hive的3中连接方式
ICLI连接,HiveServer/beeline,webUI非重点
6、Hivesql存储类型
数据类型有基本数据类型,复杂数据类型,存储格式有textfile,SequenceFile,RCFile,ORCFile,Parquet,数据格式
7、DDL操作
就是库操作
8、内置函数
要熟悉常用的函数,如数学函数,集合函数,类型转换函数,日期函数,条件函数,字符函数,聚合函数,表生成函数等
9、高级操作,如负责数据类型,视图,函数
我被问过:什么是视图
10、Hive的数据倾斜
什么是数据倾斜?由于数据分布不均匀,造成大量数据集中到一点,产生数据倾斜的原因有,key分布不均匀没业务数据本身的特性,建表考虑不周全,某些HQL语句本省就存在数据倾斜。业务场景中会有空值产生的数据倾斜,不同数据类型关联产生数据倾斜,大小表关联查询产生数据倾斜
11、Hive的执行过程
这里的执行过程是值某些函数的运行过程或者说实现过程,比如说join,Group By,Distinct,下面的思维导图中都有,不详说了
12、Hive的调优
常用的手段有排序选择,做笛卡尔积,设置合理的maptask数量,小文件合并,设置合理的reduceTask的数量,合并MapReducer操作,合理使用分桶,合理使用分区,使用Join优化,GroupBy优化,合理利用文件存储格式,本地模式执行MR,并行化处理,设置压缩存储等等
上面解答有些粗糙,详细的都写在思维导图中
Kafka
1、基础
1.1组成生产者 broker 消费者 zk
1.2多少台 一般是2台
1.3 压测 生产者峰值产生速率低于50m/s
1.4副本 一般是2到3个,作用提高可靠性
1.5数据保存多久默认保存7天,生产环境保存至3天
1.6从盘空间准备多大每天的数据量100G x 副本 x(2)3天 / 0.7
1.7做没做kafka监控 用自带kafkaManage
1.8 ISR leader挂了 增加延迟时间
1.9分区配置策略range策略进行分区
1.10分区设置提前创建一个分区,期望的吞吐量 / min生产者峰值产生速率
2、挂了
3、丢失
3.1消费者发送过来就不管了,容易丢失,但是效率高
3.2leader应答,可靠性一般,效率一般
3.3leader flower可靠性高,效率最低
4、重复
4.1幂等性在一个分区内,挂了一个seesion会话,导致重复,下一级处理,hivespark,一般采取的措施就是幂等性+事务+ack 设置-1
5、积压
增加分区,相当于增加并发度,消费者也要增加线程数
增加消费者消费速度 flume+kafka+flume——hdfs
6、优化
调大缓存等
思维导图自行查看kafka,增加台数
Spark
1、Spark都有那些组件
SparkCore,SparkSQL,SparkStreaming,MLlib,GraphX,BlindKDB,Tachyon
2、Spark的RDD
RDD属性,RDD创建方式,RDD编程API,RDD的宽依赖和窄依赖
3、Spark的Transformation和Action
Transformaiton对应的是懒加载机制,也就是说执行的时候并不是立即执行,就算错误的语句也不会报错,action则会立即执行
4、Spark的运行流程
5、SparkSQL
6、SparkCore源码解读
内容太多,请看思维导图
Spark的调优
1、SparkCore的调优
①避免重复的RDD ②尽可能重复使用一个RDD ③对多次使用的RDD进行持久化 ④尽量避免使用shuffle类算子 ⑤使用map-side预聚合的shuffle操作 ⑥使用高性能算子 ⑦广播大变量 ⑧使用keyo优化序列化性能 ⑨优化数据结构 ⑩DataLocality本地化级别
2、Spark数据倾斜调优
①使用Hive ETL预处理 ②过滤少数导致倾斜的key ③提高shuffle操作的并行度 ④两阶段聚合(局部聚合+全局聚合) ⑤将reduce join 转为map join ⑥采集倾斜key并分拆join操作 ⑦使用随机前缀和扩容RDD进行join ⑧多种方案组合使用
3、SparkCoreShuffle调优
需要知道sparkshuffle的相关过程,并调节相关参数
4、SparkCore的Spark内存模型调优
Spark内存空间分配
5、SprakCore的资源调优
Spark基本资源参数调优
spark思维导图自行下载,里面很详细,建议熟读并背诵
Flume
1、Flume的Agent组成
source channel sink
2、各个类别有什么优势,比如memory channel有什么好处等
Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个 Sink的读取操作。
Flume 自带两种 Channel:Memory Channel 和 File Channel。
Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么 Memory Channel 就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 FlumeAgent。
Sink 是完全事务性的。在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量事件一旦成功写出到存储系统或下一个 Flume Agent,Sink 就利用 Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓冲区删除事件。
Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义
3、如何让实现Flume数据传输的监控,Flume的Source,Sink,Channel的作用?你们Source是什么类型?
1、作用
(1)Source 组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,
包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy
(2)Channel 组件对采集到的数据进行缓存,可以存放在 Memory 或 File 中。
(3)Sink 组件是用于把数据发送到目的地的组件,目的地包括 Hdfs、Logger、avro、thrift、ipc、file、Hbase、solr、自定义。
2、我公司采用的 Source 类型为:
(1)监控后台日志:exec
(2)监控后台产生日志的端口:netcat
4、Flume的Source,Sink,Channel的作用?你们Source是什么类型?
5、Flume参数调优
6、Flume的事务机制
Flume 的事务机制(类似数据库的事务机制):Flume 使用两个独立的事务分别负责从Soucrce 到 Channel,以及从 Channel 到 Sink 的事件传递。比如 spooling directory source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到 Channel 且提交成功,那么Soucrce 就将该文件标记为完成。同理,事务以类似的方式处理从 Channel 到 Sink 的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到Channel 中,等待重新传递
7、Flume采集数据会丢失吗
不会,Channel 存储可以存储在 File 中,数据传输自身有事务
HBase
1、表结构
2、shell操作
3、API操作
4、过滤器
Presto
1、Presto架构
Presto是一个运行在多台服务器上的分布式系统,完整安装一个Coordinator和多个Worker,有客户端i提交查询,从Presto命令行CLI提交到Coordinator。Coordinator进行解析,分析并执行查询计划,然后分发处理到Worker
Coordinator服务器是用来解析语句的,执行计划分析和管理Presto的Worker节点,Presto安装必须有一个Corrdinator和多个Worker,如果用于开发环境和测试,则一个Presto实例可以同时担任这两个角色,Coordination会跟随Work的活动并协调查询语句进行执行,Coordinator与Worker,Client通信时通过REST API
Worker是负责执行任务和处理数据,Worker从Connector获取数据,Worker之间交换数据,Coordinator是负责从Worker获取结果并返回最终结果给Client
数据源,Prestor会指定一些数据源,Connector是适配器,类似于JDBC,Prestor有几个自带的Connector,可以访问不同的数据源的数据。catelog包含Schema和Connector,当你执行一条SQL语句时,可以同时运行多个catelog。Schma是用于组织table,把catelog和schema结合在一起来包含一组表,当通过Presto访问hive或Mysql时,一个schema会同时转为hive和mysql的同等概念。Table跟关系型的表定义一样,但数据和表的映射交给Connector
Catelog对应某一类数据源,例如Hive,Mysql,Schema对应Mysql中的数据库,Table对应Mysql中的表
2、Presto优化
Presto是基于内存进行查询的,它有以下几个优化点,首席按可以设置合理的分区,使用列式存储,使用压缩,预先排序。其次可以在查询SQL时优化,只选择必要的字段,过滤条件上加上必要的分区字段,Group By语句优化,Order By时使用Limit,使用近似聚合函数,使用regexp_like代替多个like语句,使用join语句时将达标放在左边,使用Rank函数代替row_number函数来获取Top N在进行一些分组排序场景,使用rank函数性能更好。
3、总结
Druid
德鲁伊一个分布式的支持实时分析的数据存储系统,与阿里的德鲁伊无关哈!
1、架构
2、特点
列式存储格式,可扩展的分布式系统,大规模的并行处理,实时或批量摄取,自愈,自平衡,易操作,原生云、容错的架构,不会丢失数据,用于快速过滤的索引,近似算法,插入数据时自动聚合,比较适用于广告分析等场景
Azkaban
1、架构
2、有没有写过执行脚本,多job进行国祚案例
只写过一些简单的多jiob依赖
Kylin
使用于秒级的查询场景,能在亚秒内查询巨大的Hive表
1、架构
都能得到切实执行并解决期间出现的故障。
2、核心算法
面试必问
Zabbix
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件,Zabbix使用灵活的通知机制,允许用户为集合任何事件配置基于邮件的告警。这样可以快速反馈服务器问题,基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。
最多会问创建流程
zookeeper
这个不知问啥哈
Atlas
为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能
1、架构
Atlas可集成部署Hbase,Solr,Kafka,Hive等配置
Griffin
Griffin是一个开源大数据质量解决方案,支持批处理和流模式两种数据质量检测方式,可以从不同维度度量数据资产,从而提升数据的准确度和可行度,例如离线任务执行完毕后查看源端和目标端的数据量是否一致
1、架构