天天看点

大数据面试个人总结1.列举几个sql调优的方法2.主键和外键的优缺点3.hive和mysql的区别4. hive排序关键字有哪些,有什么区别?5.rdd的特性 5个6.ACK机制7.spark中map和foreach的区别8.spark缓存机制9.spark缓存有几种,区别是什么?10.spark缓存级别

大数据面试题个人总结

  • 1.列举几个sql调优的方法
  • 2.主键和外键的优缺点
  • 3.hive和mysql的区别
  • 4. hive排序关键字有哪些,有什么区别?
  • 5.rdd的特性 5个
  • 6.ACK机制
  • 7.spark中map和foreach的区别
  • 8.spark缓存机制
  • 9.spark缓存有几种,区别是什么?
  • 10.spark缓存级别

(个人总结,最好只做参考,这是我自己被问到的一些面试题)

1.列举几个sql调优的方法

  1. 创建索引
  2. 避免在索引上使用计算
  3. 使用预编译查询
  4. 调整where字句中的连接顺序
  5. 尽量将多条sql压缩到一条sql中
  6. 使用表的别名
  7. 用where代替having
  8. 考虑使用临时表存放中间结果

2.主键和外键的优缺点

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。主键对于用户是没有意义的,设置主键是为了提高连接和查询的效率

外键:外键用于关联两个表。外键保持数据一致性(保证数据的引用完整性)但是更新子表或者删除子表数据都会去主表判断一下,这是个隐式操作,拖累系统,性能很差。

3.hive和mysql的区别

查询语言不同:hive是hql语言,mysql是sql语句

数据存储位置不同:hive是把数据存储在hdfs上,mysql数据库是存储在自己的系统中

数据格式:hive数据格式可以用户自定义,mysql有自己定义的格式

数据更新:hive不支持数据更新,只能读,不能写,mysql支持数据更新

索引:hive没有索引,因此查询数据的时候是通过MapReduce把数据都查一遍,也造成hive速度慢的原因,mysql有索引

延迟性:hive延迟性高,mysql延迟低

数据规模:hive存储的数据量超级大,mysql知识存储一些少量的业务数据

底层执行原理:hive底层是用MapReduce,mysql是excutor执行器

大数据面试个人总结1.列举几个sql调优的方法2.主键和外键的优缺点3.hive和mysql的区别4. hive排序关键字有哪些,有什么区别?5.rdd的特性 5个6.ACK机制7.spark中map和foreach的区别8.spark缓存机制9.spark缓存有几种,区别是什么?10.spark缓存级别

4. hive排序关键字有哪些,有什么区别?

order by 会对输入做出全局排序,因此只有一个reduce

sort by 不是全局排序,其在数据进入reduce前完成排序,只能保证输出有序,全局无序

distribute by 按照指定字段对数据进行划分到不同的输出reduce /文件中

cluster by 具有distribute by和sort by的功能 排序只能是倒序,不能指定排序规则asc或desc

5.rdd的特性 5个

一组分片(Partition)/一个分区(Partition)列表,即数据集的基本组成单位

一个函数会作用在每一个分区

一个RDD会依赖于其他多个RDD

可选项,对于KV类型的RDD会有一个Partitioner,即RDD的分区函数

可选项,一个列表,存储存取每个Partition的优先位置

6.ACK机制

ACK即是确认字符,在数据通信中,接受站发给发送站的一种传输类控制字符.表示发来的数据以确认 接收无误

kafka在发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到。

Kafka的ACK的机制有三种0,1,-1

0 producter不会等待broker发送ack,风险很大,不建议设置

1 当leader接收到消息之后发送ACK,效率高,但是有几率丢失消息

-1 当所有的follower都同步消息成功后发送ACK,延迟比较高,面对海量数据,如果每条消息都要确认效率会大大降低

7.spark中map和foreach的区别

map是在Transformation转化操作

foreach 属于action运算操作

map操作后会返回一个新的RDD

foreach没有返回值

8.spark缓存机制

Spark提供了在RDD中持久化数据的机制.

第一次调用动作并计算出RDD内容后,RDD内容可以缓存在集群的内存或磁盘上

这样下一次调用依赖该RDD的动作时,就不需要从依赖关系中重新计算RDD,数据可以从缓存分区中直接返回

9.spark缓存有几种,区别是什么?

spark缓存有两种 cache()和persist()

cache调用了persist,而且只有一个默认的缓存级别MEMORY_ONLY

persist可以根据情况设置其他的缓存级别

10.spark缓存级别

MEMORY_ONLY

MEMORY_ONLY_SER

MEMORY_AND_DISK

MEMORY_AND_DISK_SER

DISK_ONLY

继续阅读