HBase 面试题(一)
1、MapRedece从读取数据开始到将最终结果写入HDFS经过哪些步骤?
第一步:inputformat进行数据读读取,将数据发送给split
第二步:split 将数据进行切分,发送给RecordReader
第三步:RR将数据按照行再次切分,将切分好的数据组装成key(行首偏移量),value(每行的数据) 发送给map
第四步:map 进行自定义逻辑的书写,将数据传给Shuffle
第五步:Shuffle中的Partition 将数据key的哈希值与ReduceTask数量取余,余几就分到哪个区
第六步:Shuffle中的Sort 将数据按照一定规则进行排序
第七步:Shuffle中的Combine 将数据在map端先进行局部聚合,这样做的好处数节省了网络带宽的消耗,效率更高
第八步:Shuffle中的Group 将数据相同的key变成一个key,将这个key的Value拼装成一个Value的list
第九步:Reduce 进行自定义计算逻辑的书写,将结果发送给OutputFormat
第十步:OutPutFormat 将结果数据输出保存到HDFS上
2、Hadoop 的组成部分有哪些模块?
HDFS 分布式文件存储系统
管理者:NameNode
工作者:DataNode
辅助者:SecondayNameNode
MapReduce 分布式离线计算框架
Yarn Hadoop资源调度器
管理者:ResourceManager
工作者:NodeManager
3、请阐述一下Hbase详细架构?
Client:
访问数据的入口,包含访问hbase的API接口,维护着一些cache来加快对hbase的访问
Zookeeper:
1.zookeeper的选举机制保证任何时候,集群中只有一个master
2.实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
3.存储Hbase的schema
4 存贮所有Region的寻址入口
Master:
1.为Region server分配region
2.负责region server的负载均衡
3.发现失效的region server并重新分配其上的region
4.处理schema(元数据)更新请求
Region server:
1.Region server维护Master分配给它的region,处理对这些region的IO请求
2.Region server负责切分在运行过程中变得过大的region
4、请说一下Hive的内部组成模块,作用分别是什么?
(1)解析器(SQL Parser):解析HQL语义
(2)编译器(Physical Plan):将语HQL根据语义转换成MR程序
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。(对MR程序进行优化)
(4)执行器(Execution):把任务提交到hadoop集群
5.hbase读的过程
1、首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息
2、Client通过刚才获取到的IP来访问Meta,读取Meta内的数据,
3、Client通过元数据(meta表内的数据)中存储的信息,找到region在哪个HRegionServer ,访问对应的 HRegionServer读取数据
6.hbase数据的写入
1 Client 先访问zookeeper,找到Meta表,并获取Meta表元数据。确定将要写入的数据所对应的HRegion和 HRegionServer服务器。
2 Client向该HRegionServer服务器发起写入数据请求
3 RegionServer先把数据写入到HLog,以防止数据丢失。
4 然后将数据写入到Memstore。
5 若Memstore达到阈值,会将Memstore中的数据flush到Storefifile中
6 Storefifile数量达到阈值(默认3个)时,会触发Compact合并操作,把过多的Storefifile合并成一个大的Storefifile
7.为什么要HBase预分区
增加数据读写效率: 默认方式所有数据存在一个节点上,预分区将数据分散到多各节点上。
负载均衡,防止数据倾斜: 数据的rowkey分成多个区间,每个区间就是一个region,数据写入时,写入自己所在范围的region
方便集群容灾调度region: 将数据分散存储到了多个region中,region的粒度更小 优化Map数量
8.HBase的基本介绍
a.Hbase是建立在hdfs之上的一个数据库,
b.不支持join等SQL复杂操作
c.支持的数据类型:byte[],
d.依靠横向扩展,一个表可以有上十亿行,上百万列。
e.面向列(族)的存储和权限控制
f.对于为空(null)的列,并不占用存储空间,是一个稀疏表
9.distribute by+sort by(相同字段) 与Cluster by的区别
在分区字段和排序字段相同时,这两个可以作用是相同的,只是cluster by 的结果有限制,只能倒序排列,而distribute by+sort by 可根据需求进行排序
10.Hive支持的数据格式
可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE
11.hive自定义函数的类型有哪几种,分别表示什么意思?
1.UDF(User-Defined-Function) 一进一出
2.UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min
A长的像个伞,假设数据从下面流入,从上面流出,A就是聚集一堆,流出一个点
同理,T就像Y,由一股分成了好几股。
前提是记住一进一出UDF(输入一个数据,返回另一个数据)
3.UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view explore)
这让人想到了进进出出。
12.集群扩容,添加新节点需要做哪些准备?
1.配置JDK
2.配置SSH免密钥
3.关闭防火墙
4.关闭selinux
5.修改主机名
6.修改hosts
新节点必须有jdk,节点间沟通需要ssh免密,节点需要关闭防火墙增加效率,
节点需要关闭杀软selinux,节点需要改名方便交流,每个节点需要认识其它节点hosts
13.hadoop 的组成部分?
HDFS 分布式文件存储系统
管理者:NameNode
工作者:DataNode
辅助者:SecondayNameNode
MapReduce 分布式离线计算框架
Yarn Hadoop资源调度器
管理者:ResourceManager
工作者:NodeManager
14.Namenode作用
一:管理,维护文件系统的元数据/名字空间/目录树,管理数据与节点之间的映射关系(管理文件系统中每个文件/目录的block块信息)
二:管理DataNode汇报的心跳日志/报告
三:客户端和DataNode之间的桥梁(元数据信息共享)
15.DataNode作用
一:负责数据的读写操作
二:周期性的向NameNode汇报心跳日志/报告
三:执行数据流水线的复制
16.hbase中如何解决rowkey的热点问题
热点就是数据分布不均匀,集中到一个节点了。
1.哈希(随机数):将哈希值放在高位(每条数据hash值不同)
2.反转:反转固定长度或者数字格式的数据(时间戳反转、手机号反转,订单号反转)
3.加盐:本质时是加随机数,并且放在高位。
17.hbase中Hlog的切分机制
1.当数据写入hlog以后,hbase发生异常。关闭当前的hlog文件
2.当日志的大小达到HDFS数据块的0.95倍的时候,关闭当前日志,生成新的日志
3.每隔一小时生成一个新的日志文件
18.HBase的三个重要机制是什么?
1、flush机制
2、compact机制
3、split机制
把小的storeFile文件合并成大的Storefile文件。
清理过期的数据,包括删除的数据
将数据的版本号保存为3个
当Region达到阈值,会把过大的Region一分为二。
19.Crontab 定时器怎么写?
每个*什么意思,给出一个定时任务,描述出相应的内容
日 月 时 分 星期
20.SecondaryNamenode 的工作机制是什么?
NameNode创建一个Edits.new
SNN从NameNode节点拷贝Fsimage和Edits文件到SNN
SNN将两个文件导入内存进行合并操作生成一个新的Fsimage.ckpt文件
SNN将新的Fsimage.ckpt发送到NameNode节点
重命名为Fsimage替换原先的Fsimage
原先的Edits生成Edits.new文件
将Edits替换为新的Edits.new