大数据技术面试题整理(持续更新)

基础类

Java

  • Java中抽象类
    抽象类不能实例化,继承的关键字仍然是extends,而且继承过后可以不覆盖方法,只是使用继承而来的方法;
    抽象类和抽象方法必须用abstract关键字修饰;抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类;
    抽象类不能直接实例化;通过子类重写方法多态方式实例化:它不是具体的;抽象类有构造方法,用于子类访问父类数据的初始化;
    抽象类的子类: 如果不想重写抽象方法,该子类必须是抽象类;成为具体类则必须重写所有的抽象方法;

平台类

HDFS

  • 分布式文件系统, 主:namenode,secondarynamenode; 从:datanode
  • NameNode
    管理元数据信息,给子节点分配任务(FSImage是主节点启动时对整个文件系统的快照,Edits是修改记录)
  • DataNode
    负责数据存储,实时上报心跳给主节点
  • SecondaryNameNode
    首先,它定时到NameNode去获取edit logs,并更新到fsimage上。一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
    NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
  • Hdfs和Yarn有什么区别
    Hdfs是分布式文件存储系统,是用来存储文件的;
    Yarn是一个资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处;
  • Hdfs的块的大小多少能不能改成10M
    不能,假如数据块设置过少,那需要读取的数据块就比较多,由于数据块在硬盘上非连续存储,普通硬盘因为需要移动磁头,所以随机寻址较慢,读越多的数据块就增大了总的硬盘寻道时间。
    当硬盘寻道时间比io时间还要长的多时,那硬盘寻道时间就成了系统的一个瓶颈.
  • Hive中的内表和外表的区别
    在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;
    而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的;
  • hdfs 读写流程
    在这里插入图片描述

YARN

  • 分布式资源管理系统,用于同一管理集群中的资源
  • 主:ResourceManager, 从:NodeManager

MapReduce

  • MapReduce的shuffle过程
    • 从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。
    • Collect阶段: 将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等
    • Spill阶段: 当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
    • Merge阶段: 把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件.
    • Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上覆制一份属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上。
    • Merge阶段: 在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
  • MapReduce的Partition和Combine有什么区别
    • combine: 分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义,该类的主要功能是合并相同的key键
    • partition: 是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的,partition的作用就是把这些数据归类

Zookeeper

  • Zookeeper是开源的分布式应用协调系统;官方定义: ZooKeeper: A Distributed Coordination Service for Distributed Applications
  • 主:QuorumPeerMain

Hive

Hbase

  • 主:HMaster,HRegionserver 从: Region
  • 分布式数据仓库,本质是数据分析工具,把Hive SQL 解释成 MapReduce来执行.
    • Hive中的表为纯逻辑表,仅仅对表的元数据进行定义。Hive没有物理存储的功能,它完全依赖HDFS和MapReduce。HBase表则是物理表,适合存放非结构化的数据。
    • Hive是在MapReduce的基础上对数据进行处理;而HBase为列模式,这样使得对海量数据的随机访问变得可行。
    • HBase的存储表存储密度小,因而用户可以对行定义成不同的列;而Hive是逻辑表,属于稠密型,即定义列数,每一行对列数都有固定的数据。
    • Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,所以数据处理存在延时的问题;而HBase是准实时系统,可以实现数据的实时查询。
    • Hive没有row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持和row-level的更新。
    • Hive全面支持SQL,一般可以用来进行基于历史数据的挖掘、分析。而HBase不适用于有join,多级索引,表关系 复杂的应用场景。

Sqoop

  • Sqoop的底层原理
    是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。使用MapReduce来提高并发和容错能力.

Spark

  • 主:Master, 从:Worker

Kafka

  • Topic : 消息根据Topic进行归类
  • Producer: 发送消息者
  • Consumer: 消息接受者
  • Broker: 每个kafka实例(server)
  • Zookeeper: 依赖集群保存meta信息

Flume

  • Agent, Source, Channel, Sink
    在这里插入图片描述

数仓类

  • order by ,sort by ,destribute by,cluster by 区别

    • order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间
    • sort by不是全局排序,其在数据进入reducer前完成排序,sort by只会保证每个reducer的输出有序,并不保证全局有序。sort by的数据只能保证在同一个reduce中的数据可以按指定字段排序。
    • distribute by是控制在map端如何拆分数据给reduce端的。hive会根据distribute by后面列,对应reduce的个数进行分发,默认是采用hash算法。sort by为每个reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使 用
    • cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒叙排序,不能指定排序规则为ASC或者DESC。
  • where和having的区别

    • Where是一个约束声明,使用Where来约束来自数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
    • Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
  • Hive中的内表和外表的区别
    在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的.

  • 分区表和分桶表有什么区别

    • 分区就是分文件夹,在表文件夹下多一个文件夹,分区字段是虚拟的,用于标识文件,分区字段一定不是表中存 在的字段,否则会便宜报错;
    • 分桶功能默认不开启,需要手动开启,分桶个数自定义,是相对于分区更细粒度的划分,是分文件;

产品类

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章