大数据技能面试题汇总

148 阅读4分钟

介绍一下Mysql和Hivesql的区别?

一方面,可以从底层原理出发回答,例如:

  • 查询语言不同:

Hive是hql语言,Mysql是sql语句;

  • 存储位置不同:

Hive是建立在 Hadoop 之上的,所有数据存储在hdfs中的,而Mysql数据是存储在自己的本地文件系统中;

  • 数据格式:

Hive数据格式可以用户自定义,Mysql有自己的系统定义格式;

  • 数据更新:

由于Hive的设计是针对数据仓库的应用而设计,应用场景读多写少。故Hive中不支持对数据的增改。而Mysql中的数据可支持更新修改;

  • 索引:

Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些 Key 建立索引,在查询数据时是通过Mapreduce很暴力的把数据都查询一遍,因此访问延迟较高。但由于 MapReduce 的引入,Hive 可以并行访问数据,故即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。而Mysql有索引,对于少量特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。

  • 数据规模:

由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此Hive存储的数据量超级大,而Mysql只是存储一些少量的业务数据;

  • 底层执行原理:

Hive底层是用的Mapreduce,而Mysql是excutor执行器;

另一方面,也可以从作为使用者角度出发回答,例如

  • Hivesql不支持非等值连接,一般使用left join、right join 或者inner join替代来处理逻辑;
  • Hive中不能使用省去join的写法;
  • Hive不支持将数据插入现有的表或分区中,仅支持覆盖重写整个表。利用INSERT OVERWRITE 重写覆盖;
  • HQL不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改。

如果查询一个数据很大很慢,该如何解决?

Hive对SQL语句性能问题排查的方式有:

  • 使用explain查看执行计划;
  • 查看YARN提供的日志。

常用的优化思路有:

  • SQL语句优化:例如,是否使用了distinct,是否可以加入一些限定条件过滤等;
  • 调参优化:例如设置map、reduce的参数;并行执行,调节parallel参数等;
  • 数据格式优化:执行同样的SQL语句及同样的数据,只是数据存储格式不同,执行时长也会不同。
  • 以空间换时间:例如,有效地减小数据集,拆写逻辑,建立临时表。

为什么要对数据仓库分层?

操作者:数据仓库分层本质是 以空间换时间。通过数据分层管理可以简化数据清洗的过程,相当于把一项复杂的工作拆成了多个简单步骤的工作,从一个大的黑盒变成了一个透明盒,每一层的处理逻辑相对易理解易操作,较易保证每一个步骤的正确性,当数据发生错误的时候,一般不会牵一发而动全身,只需要局部调整某个步骤即可。若不分层,当源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大,耗时较长。

应用者:提升应用系统的用户(比如BI)体验和效率。例如

  • 清洗后的脏数据,简化业务复杂结构数据,具有清晰数据结构,减少重复开发;
  • 规范的表&段名称,统一的字段数据格式,完善的注释内容,易于定位和理解。

数仓分层的结构有哪些?每一层的大致作用是什么

常见通用数仓分层设计:ODS、DW、APP

每层主要作用如下:

  • ODS:数据源层。主要将各个业务数据导入到大数据平台,作为业务数据的快照存储。
  • DW:汇总数据层。
    • DWD:明细数据层。保留数据的原始粒度,在ODS基础上对数据加工处理,提供清洗后较干净的数据。
    • DWS:汇总数据层。主题层,根据业务域划分,存放高度聚合汇总的数据。
  • APP:面向业务定制的应用数据层。服务于业务特定场景,复用性不强。