目录

  • 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,更新元数据
  1. 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可以是基于元数据的权限管理,也可以基于文件存储级别的权限管理。