⼤数据常见⾯试题与参考答案总结
技术⾯试题
1.Hadoop中有哪些组件?
Hadoop=HDFS+Yarn+MapReduce+Hive+Hbase+...
1).HDFS:分布式⽂件存储系统
主:namenode,secondarynamenode
从:datanode
简述抽象类的作用2).Yarn:分布式资源管理系统,⽤于同⼀管理集中的资源(内存等)
主:ResourceManager
从:NodeManager
3).MapReduce:Hadoop的计算框架,⽤map和reduce⽅式实现数据的全局汇总
4).Zookeeper:分布式协调服务,⽤于维护集配置的⼀致性、任务提交的事物性、集中服务的地址管理、集管理等
主:QuorumPeerMain
从:QuorumPeerMain
mysql怎么使用数据库5).Hbase:Hadoop下的分布式数据库,类似于NoSQL
主:HMaster,HRegionserver,Region
手机网站模板安装教程7).Hive:分布式数据仓库,其实说⽩了就是⼀个数据分析⼯具,底层⽤的还是MapReduce
8).Sqoop:⽤于将传统数据库中数据导⼊到hbase或者Hdfs中⼀个导⼊⼯具
9).Spark:基于内存的分布式处理框架
主:Master
从:Worker
2.Hdfs中⾓⾊有哪些?
NameNode:管理元数据信息,给⼦节点分配任务(FSImage是主节点启动时对整个⽂件系统的快照,Edits是修改记录)
DataNode:负责数据存储,实时上报⼼跳给主节点
SecondaryNameNode:
1)⾸先,它定时到NameNode去获取edit logs,并更新到fsimage上。⼀旦它有了新的fsimage⽂件,它将其拷贝回 NameNode中。
2) NameNode在下次重启时会使⽤这个新的fsimage⽂件,从⽽减少重启的时间。
3.Hdfs和Yarn有什么区别?
1)Hdfs是分布式⽂件存储系统,是⽤来存储⽂件的;
2)Yarn是⼀个资源管理系统,可为上层应⽤提供统⼀的资源管理和调度,它的引⼊为集在利⽤率、资源统⼀管理和数据共享等⽅⾯带来了巨⼤好处
4.MapReduce的shuffle过程?
从Map产⽣输出开始到Reduce取得数据作为输⼊之前的过程称作shuffle。
1).Collect阶段:将MapTask的结果输出到默认⼤⼩为100M的环形缓冲区,保存的是key/value,Partition分区信息等。
2).Spill阶段:当内存中的数据量达到⼀定的阀值的时候,就会将数据写⼊本地磁盘,在将数据写⼊磁盘之前需要对数据进⾏⼀次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进⾏排序。
3).Merge阶段:把所有溢出的临时⽂件进⾏⼀次合并操作,以确保⼀个MapTask最终只产⽣⼀个中间数据⽂件。
4).Copy阶段:ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制⼀份属于⾃⼰的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到⼀定的阀值的时候,就会将数据写到磁盘之上。
5).Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据⽂件进⾏合并操作。
6).Sort阶段:在对数据进⾏合并的同时,会进⾏排序操作,由于MapTask阶段已经对数据进⾏了局部
的排序,
ReduceTask只需保证Copy的数据的最终整体有效性即可。
5.MapReduce的Partition和Combine有什么区别?
1)combine分为map端和reduce端,作⽤是把同⼀个key的键值对合并在⼀起,可以⾃定义,该类的主要功能是合并相同的key键
2)partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以⾃定义的,partition的作⽤就是把这些数据归类
6.Hadoop的⾼可⽤模式说⼀下?
7.Zookeeper在Hadoop中的作⽤?
1)Zookeepe主要⽤来解决分布式应⽤中经常遇到的数据管理问题,如集管理、统⼀命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。
2)Zookeeper是⼀个由多个server组成的集,⼀个leader,多个follower,每个server保存⼀份数据副本,全局数据⼀致、分布式读写,更新请求转发,由leader实施。
8.Sqoop的底层原理?
是⽤来实现结构型数据(如关系数据库)和Hadoop之间进⾏数据迁移的⼯具。它充分利⽤了MapReduce的并⾏特点以批处理的⽅式加快数据的传输,同时也借助MapReduce实现了容错
9.Sqoop是怎么连接的关系型数据库?
sqoop import-all-tables –connect jdbc:mysql://192.168.52.110/hivemetadb --username root -password root
10.Java中抽象类怎么理解?
抽象类不能实例化,继承的关键字仍然是extends,⽽且继承过后可以不覆盖⽅法,只是使⽤继承⽽来的⽅法
A:抽象类和抽象⽅法必须⽤abstract关键字修饰;
B:抽象类中不⼀定有抽象⽅法,但是有抽象⽅法的类必须定义为抽象类;
C:抽象类不能直接实例化;(可以通过⼦类(重写⽅法后的⼦类)的多态⽅式实例化);
1.它不是具体的;
特斯拉回应上海工厂停产 2.抽象类有构造⽅法,⽤于⼦类访问⽗类数据的初始化;
D:抽象类的⼦类;
1.如果不想重写抽象⽅法,该⼦类必须是抽象类;
2.成为具体类则必须重写所有的抽象⽅法;
11.Hdfs的块的⼤⼩多少能不能改成10M?
不能,假如数据块设置过少,那需要读取的数据块就⽐较多,由于数据块在硬盘上⾮连续存储,普通硬盘因为需要移动磁头,所以随机寻址较慢,读越多的数据块就增⼤了总的硬盘寻道时间。当硬盘寻道时间⽐io时间还要长
的多时,那硬盘寻道时间就成了系统的⼀个瓶颈
12.你的项⽬中你的Hive仓库怎么设计的?分⼏层?
1 )源数据层:此层数据⽆任何更改,不对外开放,为临时存储层,是接⼝数据的临时存储区域,为
后⼀步的数据处理做准备。
2)数据仓库层(DW):DW层的数据应该是⼀致的、准确的、⼲净的数据,即对源系统数据进⾏了清洗(去除了杂质后的数据。
2)数据应⽤层(DA或APP):前端应⽤直接读取的数据源;根据报表、专题分析需求⽽计算⽣成的数据。
13.Hive中的内表和外表的区别?
1)在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;
2)⽽删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的
14.分区表和分桶表有什么区别?
1)分区就是分⽂件夹,在表⽂件夹下多⼀个⽂件夹,分区字段是虚拟的,⽤于标识⽂件,分区字段⼀定不是表中存在的字段,否则会便宜报错;
2)分桶功能默认不开启,需要⼿动开启,分桶个数⾃定义,是相对于分区更细粒度的划分,是分⽂件;
15.Hive优化假如有数据倾斜怎么优化?
16.假如你的分析的数据有很多⼩⽂件,你⽤SQL语句分析的话会出现什么情况?
17.能说说你项⽬中的模型表是怎么设计的吗?
18.Yarn除了在Hadoop中应⽤,还有什么⽤到了Yarn?
19.Azkaban的特性?
1、Web⽤户界⾯
2、⽅便上传⼯作流
3、⽅便设置任务之间的关系
4、调度⼯作流
5、认证/授权(权限的⼯作)
6、能够杀死并重新启动⼯作流
7、模块化和可插拔的插件机制
8、项⽬⼯作区
9、⼯作流和任务的⽇志记录和审计
20.怎么查看本机内存CPU使⽤情况?
free -m
21.怎么查看⽬录下的所有详细情况?
先使⽤ ls -a 查看当前⽬录下的所有⽂件;
然后使⽤ ls -a -l 查看所有⽂件的详细信息,每⼀⾏是⼀个⽂件的所有信息;
再使⽤ ls -a -l -h 查看所有⽂件的详细信息
22.Hbase索引和Hive索引有什么区别?
1.Hive中的表为纯逻辑表,仅仅对表的元数据进⾏定义。Hive没有物理存储的功能,它完全依赖HDFS和
MapReduce。HBase表则是物理表,适合存放⾮结构化的数据。
2.Hive是在MapReduce的基础上对数据进⾏处理;⽽HBase为列模式,这样使得对海量数据的随机访问变得可⾏。
3.HBase的存储表存储密度⼩,因⽽⽤户可以对⾏定义成不同的列;⽽Hive是逻辑表,属于稠密型,即定义列数,每⼀⾏对列数都有固定的数据。
4.Hive使⽤Hadoop来分析处理数据,⽽Hadoop系统是批处理系统,所以数据处理存在延时的问题;⽽HBase是准实时系统,可以实现数据的实时查询。
5.Hive没有row-level的更新,它适⽤于⼤量append-only数据集(如⽇志)的批任务处理。⽽基于HBase的查询,⽀持和row-level的更新。
6.Hive全⾯⽀持SQL,⼀般可以⽤来进⾏基于历史数据的挖掘、分析。⽽HBase不适⽤于有join,多级索引,表关系复杂的应⽤场景。
23.数据量⼤如何⽤Order by 全局排序?
24.Kafka,Flume中组件包括哪些?
Kafka组件:
Topic :消息根据Topic进⾏归类
Producer:发送消息者
Consumer:消息接受者
broker:每个kafka实例(server)
Zookeeper:依赖集保存meta信息。
Flume组件:
Agent:
Source:
Channel:
Sink:
25.查看内存使⽤情况/磁盘使⽤情况命令⾏?
free -m
26.Hdfs的读写流程?
27.Flume中Agent各个组件包含什么?
28.Hive数据倾斜如何处理?内部表,外部表,分区,分桶
mysql面试题常问1)order by
order by会对输⼊做全局排序,因此只有⼀个Reducer(多个Reducer⽆法保证全局有序),然⽽只有⼀个Reducer,会导致当输⼊规模较⼤时,消耗较长的计算时间。
2)sort by
sort by不是全局排序,其在数据进⼊reducer前完成排序,sort by只会保证每个reducer的输出有序,并不保证全局有序。sort by的数据只能保证在同⼀个reduce中的数据可以按指定字段排序。
3)distribute by
distribute by是控制在map端如何拆分数据给reduce端的。hive会根据distribute by后⾯列,对应reduce的个数进⾏分发,默认是采⽤hash算法。sort by为每个reduce产⽣⼀个排序⽂件。在有些情况下,你需要控制某个特定⾏应该到哪个 reducer,这通常是为了进⾏后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by 配合使⽤。
4)cluster by
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒叙排序,不能指定排序规则为ASC 或者DESC。
30.Sqoop怎么连接数据库?
31.where和having的区别?
1) “Where” 是⼀个约束声明,使⽤Where来约束来⾃数据库的数据,Where是在结果返回之前起作⽤的,且Where中不能使⽤聚合函数。
2)“Having”是⼀个过滤声明,是在查询返回结果集以后对查询结果进⾏的过滤操作,在Having中可以使⽤聚合函数。32.左连接和右连接的区别?
左连接where只影向右表,右连接where只影响左表
1)Left Join
select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID
左连接后的检索结果是显⽰tbl1的所有数据和tbl2中满⾜where 条件的数据。
2)Right Join
select * from tbl1 Right Join tbl2 where tbl1.ID = tbl2.ID
检索结果是tbl2的所有数据和tbl1中满⾜where 条件的数据。
33.Hive中如何对⼤量数据进⾏全局排序?
34.Linux指令
35.Shell,Hive,Hbase,Spark,Sqoop
36.机架感应机制
项⽬⾯试题
1.⼤概介绍⼀下项⽬;
2.hbase表你们是怎么存数据的?⼀天数据量是多少?这么多数据你们都存hbase⾥吗?⼀开始就是个⽂件,hbase是表结构,那你是怎么去获取数据然后给存成表结构的?
3.假如现在我要查询每个⽉的每个⽚区⾥订单成交量最⾼的那个司机ID,你怎么实现?
4.hive怎么读取数据的?我要只存⾥边我需要的数据,你给我想下怎么优化?
5.你都⽤过哪些ETL⼯具?怎么⽤的?就像flume是怎么获取数据的,你怎么配置的?那kafka怎么读取数据的?hive是直接从kafka⾥获取数据吗?panel基因检测全称叫什么
6.你建过外表吗?怎么建的?为什么要建外表?
7.你会写shell吗?写过哪些?
8.你应该也经常⽤linux命令吧,都⽤过哪些?我现在要查所有后缀是.txt的⽂件名,怎么查?grep⽤过吗?
9.我现在不想查司机,我想查订单,怎么去设计hbase表?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论