大数据面试总结 二

1、事实表主要分成几种:

1、事务事实表:又称作原子事实表,主要是用来描述业务过程,跟踪控件或者时间上某点的度量事件,保存的是最原子的数据

2、周期事实表:以一个周期作为一个时间间隔,用来记录事实,一个周期可以是每天、每周、每月、每年等。

3、累计快照事实表:用来描述过程开始和过程结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点,当过程随着生命周期不断的变化时,记录也会随着生命的周期变化而被修改。

2、数仓建模的规范

数仓分层,阿里主要分成了五层,分别是ods、dwd、dim、dws、ads层,每一层都有自己的一个单独的作用

ods层的主要的作用就是将数据从数据源采集过来,对数据来说,基本上是不做任何的处理。

dwd层这层的主要的作用就是ods层的数据采集过来,在这层会对数据做一些处理,例如说在这层会对一些空的数据进行过滤,对于用户的手机号、身份证号码进行加密的操作等。

dim层主要存储的是一些维度数据,就是一些不怎么变化的数据,例如说一些省份的名称是不会发生改变的。

dws层的主要的作用就是对数据进行汇总,构建宽表,对维度表进行维度退化的操作

ads层的主要的作用就是计算一些指标,对外使用构建好的宽表,以便计算指标。

在构建宽表的时候需要注意的是禁止逆向调用,需要避免同层调用、还需要避免跨层调用

3、将数据从ods层采集到dwd层主要的操作有哪些

对数据进行清洗,过滤一些空数据,对敏感数据进行脱敏操作。又是也会做一些维度退化。

4、 宽表的设定

做宽表实际上就是做join,实际上就是做维度退化,把维度表中的数据退化到事实表中。

5、  什么是维度退化

就是将维度表退化到事实表中,例如说一个订单表,是一个事实表,还有一个就是商品的信息表,是维度表,将来进行展示的时候,需要展示的商品的所有的信息,就类似于join,将维度表关联到事实表中。

6、什么是维度表

主要存放的就是一些不怎么变化的数据表,就比如说一些地域的省份的名称就不会发生改变。

7、什么事实表

 有度量值的表,就是哪些需要需要参与计算的一些表,就比如说订单表中会有金额、数量等信息。

8、hdfs中的组件的作用:

hdfs中的组件主要包括namenode、datanode、SecondaryNameNode分别的作用:

namenode:主要的作用就是存储元数据,也是接收客户端的一些读写数据的请求。

datanode:是hdfs中的真实存储数据的地方,会与namenode保持保持心跳机制。

SecondaryNameNode:主要的作用就是用来合并日志文件,下次hadoop会根据这个合并的文件启动。将hadoop中的edit logs文件合并到fismage文件中。

9、hadoop不适合存储小文件,以及解决方法:

不适合存储小文件的原因:

首先小文件的数量变多,那么namenode的压力就会变大,因为元数据是存储在namenode中,可能会导致namenode出现宕机。其次就是计算的资源消耗会比较大,小文件越多,map任务的数量就会越多,此时消耗的计算资源就会比较多。

解决方法:

1、使用har归档,hadoop archive(har),是一个高效的将小文件放入到hdfs块中的文件存档工具,它能够将多个小文件打包成一个HAR文件

例如:
在本地准备两个小文件:
cat >
user1.txt<
user2.txt<

将本地的文件put到hdfs中
hdfs dfs -put user.* /foo/bar/


对某个目录/foo/bar下的所有小文件存档成/outputdir/zoo.har:
hadoop archive -archiveName foo.har -p /foo/bar/outputdir

查看文件:
hdfs dfs -ls har:///user/zoo/foo.har

但是需要注意的是,对小文件进行存档的时候,原来的小文件是不会被删除的,需要用户进行手动删除。 

2、使用Sequence file 由一个二进制key/value组成,如果key为小文件的名称,那么value就是文件的内容,可以将大批的小文件合并成一个大文件。

3、CombineFileinputFormat(针对hive表中的小文件数合并处理)

是一种新的inputformat,用于将多个文件合并成一个单独的split,在map和reduce处理之前进行合并小文件。

4、开启JVM重用

有小文件的时候需要开启JVM重用,会在任务执行前将所有需要的资源进行申请,当任务只想完成后在释放资源。

     mapreduce.job.jvm.numtasks    
                10   

How many tasks to run per jvm,if set to -1 ,there is  no limit

5、将本地的小文件进行合并,再将文件上传到hdfs中。(appenToFile)

将本地的多个小文件上传到hdfs中,可以通过hdfs的客户端的appendToFile命令对小文件进行合并

在本地准备两个文件:
cat 
>user1.txt<user2.txt<

6、合并hdfs中的小文件,下载到本地(getmerge)

可以通过hdfs中的命令getmerge,将多个小文件进行合并,在下载到本地。

# 先上传小文件到
hdfs dfs -put user1.txt user2.txt /test/upload
# 下载,同时合并:
hdfs dfs -getmerge /test/upload/user*.txt ./merged_user.txt
10、hive与mysql的区别:
1、数据存储位置 ,Hive存储在 HDFS 上,数据库将数据保存在块设备或者本地⽂件系统中
2、数据更新 ,Hive默认不⽀持 update delete 操作,需要开始事务配置。⼀般场景不建议使⽤跟新。 mysql⽀持更新删除操作。如果在 hive 中需要 update 。可以 insert into 新表 select 字段 1 ,字
2 if (更新条件,返回,否则返回) from 旧表
3、执⾏延迟 ,Hive执⾏延迟较⾼,数据库的执⾏延迟较低。这个是有条件的,在数据规模较⼩时,在数据 ,规模⼤到超过数据库的处理能⼒的时候,Hive 的并⾏计算显然能体现出优势。
4、数据规模 Hive⽀持很⼤规模的数据计算,数据库可以⽀持的数据规模较⼩。
5、SQL 语法区别:
1 hive 不⽀持 where 后⾯跟⼦查询。
2 hive ⽀持建表分区操作, mysql 不⽀持。
3 group by hive sql select 中的维度字段,必须出现在 group by 后⾯。 mysql 语法可以不
⽤。
11、hive的四个by的区别:
order by :全局排序,只有⼀个 reduce
sort by :分区内有序
distribute by :类似于 MR partition ,进⾏分区,结合 sort by 使⽤
cluster by :当 distribute by sort by 字段相同的时候,可以使⽤ cluster by ⽅式。 cluster by 除了
具有 distribute by 的功能外还兼具了 sort by 的功能。但是排序只能是升序排序,不能指定排序规则 ASC 或者 DESC
12、自定UDF的步骤:

⽤UDF函数解析公共字段,⽤UDTF函数解析事件字段 ,⾃定义UDF:继承UDF,重写evaluate⽅法

13、hbase的架构,每一个组件的作用:

hbase的架构主要包括zookeeper、regionserver、region、memstore、storefile、hmaster、hlog

zookeeper作用:

1、保证在任何的时候,集群中只含有一个hmaster(hbase也是一个主从架构的,支持高可用)

2、存储所有的region的寻址入口,用户需要访问数据,就需要向zookeeper发送请求,获取元数据的元数据表的地址信息,返回给客户端,客户端与对应的regionserver建立连接

3、实时监控regionserver的上线和下线,实时向hmaster进行报告。

hmaster作用:
1、为regionserver分配region

2、监控region server,发现失败的region server,重新分配region

3、管理用户对表的增删改。

regionserver作用:

1、regionserver用来维护region,负责接受region的io

2、region server负责监控region,对于那个变大的region进行切分。

hlog作用:

就是hadoop中的有个Sequence File,Sequence File 的Key是 HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和 region名字外,同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,或者是最近一次存入文件系 统sequence number。HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的 KeyValue

region作用: 

hbase会自动的将表水平划分成多个region,每一个region中都存储一串连续的数据,首先一张表一开始只含有一个region,但是随着数据的不断的插入,region就会不断的增大,当达到一定的阙值的时候(默认是128M),region就会等分成两个region,当表中的行不断的增加,就会有越来越多的region,被regionserver多管理。

memstore作用:

1、一个region由多个store组成,一个store对应一个CF(列簇)

2、store包括位于内存中的memstore和位于磁盘的storefile写操作先写入 memstore,当memstore中的数据达到某个阈值,hregionserver会启动 flashcache进程写入storefile,每次写入形成单独的一个storefile

3、当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 (majar),形成更大的storefile。

4、当一个region所有storefile的大小和超过一定阈值后,会把当前的region 分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。

5、客户端检索数据,先在memstore找,找不到再找storefile

6、HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表 示不同的HRegion可以分布在不同的HRegion server上。

7、HRegion由一个或者多个Store组成,每个store保存一个columns family。

8、每个Strore又由一个memStore和0至多个StoreFile组成。

14、spark中的一些转化算子和行为算子

转化算子 :map、gruopby、groupbykey、reducebukey

行为算子:foreach、foreachpartition、take、top、count

15、persist与cache的区别

persist(持久化):在大数据处理的框架中,persists是将rdd或者是dataframe持久化到内存中,或者是持久化到磁盘中,以便在后续的操作中重复中这些数据而不需要在冲重新计算,持久化是用来提高性能,在使用相同的数据的时候,比较明显,可以选择不同级别的持久化,例如:MEMORY_ONLYDISK_ONLYMEMORY_AND_DISK

cache(缓存):在类似的spark这样的分布式计算框架中,cache的主要的作用是将数据缓存到内存中,以便以后可以快速的访问。

两者的区别:

1、持久化的方式不同:persists既可以将数据缓存到内存中,也可以将数据缓存到磁盘中。

2、使用的方式不同:persists是一种比较通用的持久化的方式,可以选择不同的缓存级别,然而对于cache来说,它是persists的一种的特殊情况,将数据持久化到内存中。

16、dataframe、dataset、rdd的区别

1、RDD

RDD是spark中最早引入的抽象数据类型,代表的是一个弹性分布式数据集。

RDD是面向对象的,可以包含任何类型的java、scala、python对象

2、dataframe

是基于RDD的高级抽象,代表的是一张表格化的数据结构,类似于关系型数据库中的表。

dataframe具有优化的执行计划,可以提高新性能。

dataframe通常用于结构化数据的处理,支持sql操作,列式操作,dataframe API等。

3、dataset

结合了rdd面向对象的风格和dsataframe的查询优化的特点

dataset是类型安全的,允许使用强类型的API,可以在编译的时候捕获编译的错误。

17、flink中的插槽

主要是用来资源隔离,因为在flink中,每一个task都是在taskmanager中运行,solt就是最小的资源单位,每一个solt中接受一个task,防止在多个task在运行的时候抢占资源。

18、flink中的组件以及每一个的作用

client、jobmanager、taskmanager

client:

构建和配置flink作业,设置作业的参数并将任务通过flink run提交到jobmanager上去执行。

jobmanager:

主要的作用是负责接收客户端的作业提交的请求,负责整体任务的资源调度,协调任务之间的数据交换,同时也负责整体的状态维护。

taskmanager:

主要是负责接受jobmanager分配的任务,并执行这些任务,并负责任务之间的数据传输并将计算的结果返回。

19、窗口

滑动窗口、滚动窗口、会话窗口、统计窗口

会话窗口:在定义的时候于滑动窗口、滚动窗口的区别是在定义窗口的时候是基于事件之间的间隔,而不是固定的时间段或者是固定数量的事件。

20、事实表设置的主要的流程:

1、选择业务 2、声明粒度 3、确定维度 4、确定事实 5、冗余维度

你可能感兴趣的:(大数据面试总结,面试,职场和发展)