大数据面试题整理汇总(持续更新ING)

目录

    • Hadoop
        • 1. 下列哪项通常是集群的最主要瓶颈
        • 2. 请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?
        • 3. HDFS读写流程
    • Spark
        • 1. 对于Spark存在的数据倾斜问题你有什么好的解决方法吗?
        • 2. 简述你所理解的 Spark 的 shuffle 过程
        • 3. Spark中的算子分为哪两类?
    • Hive
        • 1. 谈一下hive的特点,以及hive和RDBMS有什么异同
        • 2. 说一下hive中order by、sort by、cluster by、distribute by各代表的意思
        • 3. 写出hive中split、coalesce及collect_list函数的用法?
        • 4. hive有哪些方式保存元数据,各有哪些特点?
        • 5. hive内部表与外部表的区别
        • 6. hive底层与数据库交互原理
        • 7. 写出将 text.txt 文件放入 hive 中 test 表‘2016-10-10’ 分区的语句,test 的分区字段是 l_date
        • 8. hive如何进行权限控制

Hadoop

1. 下列哪项通常是集群的最主要瓶颈

A. CPU
B. 网络
C. 磁盘IO
D. 内存

答案:C

2. 请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?

  • NameNode
    • Hadoop的主服务器,管理文件系统的命名空间
    • 管理数据块的映射信息(文件 --> BLOCK),(BLOCK --> DataNodes)
    • 处理客户端的读写请求
  • SecondaryNameNode
    • 周期性备份fsimage
    • 辅助NameNode 合并 editslog
  • DataNode
    • 用于实际存储数据块
    • 执行数据块的读写操作

3. HDFS读写流程

  1. HDFS写流程

    • 发起请求 Client调用方法,对NameNode发起RPC请求
    • 切割文件 Client将待上传文件分块(64M,128M)
    • 异常检查 NameNode检查文件是否存在,Client是否有写入权限
    • 获取DataNode信息 NameNode 将最近的DataNode节点信息返回给Client
    • 建立写入通道 Client与DataNode A通信,DataNode A 再一级一级给DataNode B,DataNode C。DataNode C会响应DataNode B,一级级返回响应。若均响应成功,则写入通道确立
    • 写入HDFS Client将文件以Packet形式写入到DataNode A,同时DataNode A也会将数据写入到DataNode B,DataNode C做备份
    • 重复写入BLOCK 重复以上流程,将BLOCK全部写入DataNode
    • 写入完毕 DataNode 写入完毕后,回传消息给 Client
    • 定期更新元数据 DataNode会定期将BLOCK信息更新给NameNode,更新元数据
  2. HDFS读流程

    • 发起请求 Client调用方法,对NameNode发起RPC请求
    • 异常检查 检查文件是否存在
    • 获取元数据 NameNode回传该文件对应元数据:1. 文件对应的BLOCK列表,2. 每个BLOCK对应的DataNode地址
    • 建立读取通道 Client请求DataNode建立读取通道
    • 读取HDFS 以Packet形式回传数据到Client

Spark

1. 对于Spark存在的数据倾斜问题你有什么好的解决方法吗?

  • 调整并行度分散Key(一般是增大并行度)
  • 自定义Partitioner(默认HashPartitioner)
  • 处理Key,如增加随机的前缀

2. 简述你所理解的 Spark 的 shuffle 过程

Shuffle产生于宽依赖处理时,Spark根据Key值分发到不同的Partition中进行处理(类似,根据扑克牌的点数分成多个牌堆)

3. Spark中的算子分为哪两类?

答:分为Transformation,Action两类算子个人理解Transformation类算子:map, filter, union等算子,会对RDD有类似变形,转换的作用,但不产生输出。 Action类算子:show, count, collect 将产生真正的结果输出。一般情况下需要尽量避免Shuffle,因为洗牌,发牌等流程将耗费较大的系统资源。尽量避免使用reduceByKey,Join等可能产生Shuffle的算子。

Hive

1. 谈一下hive的特点,以及hive和RDBMS有什么异同

  • Hive是一个数据仓库
  • (事务默认不开启)不开启事务,进而导致不支持使用UPDATE, DELETE这些操作;
  • 对SQL并不完全支持,比如子查询
  • 支持数组,Struct结构这类复杂的数据类型,并由对应的函数如EXPLODE等;

2. 说一下hive中order by、sort by、cluster by、distribute by各代表的意思

  • order by
    全局排序,数据量大时往往效率不高;
  • sort by
    对每个Map端(Partition)进行排序;
  • distribute by
    对某个字段进行分区,通常配合SORT BY一起使用;
  • cluster by
    当DISTRIBUTE BY, SORT BY字段相同时,可以用CLUSTER BY,但是不能降序排序 DESC;

3. 写出hive中split、coalesce及collect_list函数的用法?

  • split 将字符串转化为数组;
  • coalesce 将返回参数中第一个不为空的值;
  • collect_list 列出该字段的所有的值,生成数组,不去重;

4. hive有哪些方式保存元数据,各有哪些特点?

  • 内嵌模式主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby是默认的内嵌模式的数据库;
  • 本地模式每个客户端都会连接到MySQL中;
  • 与本地模式相近,通过Thrift协议通信;

5. hive内部表与外部表的区别

  • 外部表是指定路径的,数据共享上更加灵活,方便共享数据;
  • DROP表时,内部表会删除数据,外部表不会;

6. hive底层与数据库交互原理

由于HIVE的元数据可能会不断的更新,读取,而且数据量不大; 这不适合hadoop文件系统来进行存储;所以元数据都是存在RDBMS中,比如MySQL,Derby;
元数据:哪些表,表中哪些列,谁有表的权限;

7. 写出将 text.txt 文件放入 hive 中 test 表‘2016-10-10’ 分区的语句,test 的分区字段是 l_date

load data local inpath '/your/test.txt' overwrite into table test partition(1_date='2016-10-10');

8. hive如何进行权限控制

目前hive支持简单的权限管理,默认情况下是不开启,这样所有的用户都具有相同的权限,同时也是超级管理员,也就对hive中的所有表都有查看和改动的权利,这样是不符合一般数据仓库的安全原则的。Hive可以是基于元数据的权限管理,也可以基于文件存储级别的权限管理。

你可能感兴趣的:(大数据,Spark)