【数据分析岗】面试高频类型——大数据技能


之前,出过一篇面试高频类型——数据倾斜该咋办?

 【数据分析】面试高频类型——大数据技能(一)

招聘热季,最近常有同学问我:

数据分析岗针对大数据技能,

需要掌握不?掌握多少?都考些啥?…

本篇,追根溯源,好好唠个明白。

内含 高频大数据面试真题 

——正文手动分割线——

分为以下几个方面:

一、啥是大数据技能?

二、为啥有面试官会问这类?

三、是否需要掌握?需要掌握多少?

四、如何复习准备?

五、高频面试题?

啥是大数据技能?

话不多说,直接看图。

部分公司的jd中会写上一句 “有Hadoop开发经验优先”、“有一定HIVE SQL的性能优化经验优先”。

数据分析岗,MySQL,Hadoop,大数据技能,Hive SQL

直白总结,数据分析师,顾名思义,与数据有关。因此,和数据分析师有关的大数据技能,即和数据上中下游相关的一些技能。例如:上游的数据日志清洗,中游的数据提取、性能优化,下游的应用层建模等等。

为啥会考核?

并不一定是所有公司都会针对此技能考核。取决于公司规模、团队归属部门及职能,以及部分面试官个人喜好。

1、公司规模职责角度来说,作为数据分析师,天天和数据库打交道。如果了解一些数据库底层原理,对于代码性能调优、日常任务部署优化等具有优势,可相对提高工作效率。

  • 大公司:底层数据建设相对完善,不强制要求数据分析师一定需具备数据开发能力,基础数据产品完备,已辅助数据分析师降低日常数据提取的操作成本。
  • 中小型公司:绝大多数公司的底层建设相对不太完善,没有操作方便的数据提取工具、没有体验友好的可视化界面、没有自动代码调优的数据产品等等,可能需要数据分析师懂点Linux脚本语言、需要会点数据开发知识。

成本角度来说,

服务器资源是公司一大笔开销成本。

  • 对于大公司,不言而喻,粮草充足,这部分成本完全可以cover住;
  • 中小公司,开源节流,每一项开支都要精打细算,耗资占比较高的服务器成本当然也不例外。

所以有些中小型公司要求数据分析师,最好懂得一些数据开发基本原理知识,无论是对于资源的合理使用,还是日常工作的数据提取都有帮助。2、团队部门及职能

Title为 “数据分析工程师” 的一般对大数据技能要求稍高一些,由于工作内容会涉及到偏数据工程部分,因此面试中问到此类知识的概率和密度较高。

Title为 “数据分析师” 的大部分对大数据技能的态度是有则是加分项。

但有些岗位所属部门偏中台,或者归属于ETL的数仓团队,由于所属部门调性,数据分析师可能需要承担部分ETL工作,比如构建公共模型供给各业务支线使用,因此要求懂一些基础的数开知识,方便开展工作。
3、面试官个人喜好

面试中,有可能碰到交叉面,有些面试官并不一定是数据分析出身,会根据他所负责领域、日常工作常见问题进行提问。有可能面试官考核侧重点不同,有些较注重应聘者的基础知识掌握是否扎实,会针对数据分析师的基本功、实践能力进行考核提问。因此,所遇面试官不同,偏好不同,会被问到的大数据相关技能的概率、知识深浅程度不同。

是否需要掌握?

一方面对照第二部分,尽量获取到你所面试的行业和部门信息,直接看Title、看部门初步判断。另一方面取决于你的准备时间是否充分。由于数据分析师,不仅需要具备业务思维,又需要利用专业知识、从数据角度为业务赋能。

因此涉及知识面广,所需要复习准备的领域较多

详情可参考 【数据分析岗】面试框架梳理(含高频题型)所以,针对应届生:如果你的时间充分,其余方面准备的差不多,在有余力的情况下,多学多准备有益无害;如果你的时间较为紧张,从考核概率和知识点密度角度来说,建议优先准备其他方面。

针对(准)应届生/社招:时间较为充裕,多学习总有好处。

如何复习准备?

对于时间充裕的,可以阅读相关书籍、去阿里云网站学习操作手册,争取较系统的了解掌握。(ps.公众号资料包里有相关书籍推荐)时间较为紧张的,还是那句话,用“应试”思维,先准备其他方面,学会“搏”考核概率高的知识点。

高频面试题

问题1:数据倾斜是什么?造成原因有哪些?该怎么办?

思路参考:详见此篇 【数据分析】面试高频类型——大数据技能(一)

问题2:介绍一下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不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改。

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

思路参考:

首先,Hive对SQL语句性能问题排查的方式,有2种:

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

常用的优化思路有以下几种:

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

问题4:为什么要对数据仓库分层?

思路参考:可以针对数据仓库的使用方分角色来阐述。例如:

  • 操作者:数据仓库分层本质是 以空间换时间。通过数据分层管理可以简化数据清洗的过程,相当于把一项复杂的工作拆成了多个简单步骤的工作,从一个大的黑盒变成了一个透明盒,每一层的处理逻辑相对易理解易操作,较易保证每一个步骤的正确性,当数据发生错误的时候,一般不会牵一发而动全身,只需要局部调整某个步骤即可。若不分层,当源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大,耗时较长。
  • 应用者:提升应用系统的用户(比如BI)体验和效率。例如
    • 清洗后的脏数据,简化业务复杂结构数据,具有清晰数据结构,减少重复开发;
    • 规范的表&段名称,统一的字段数据格式,完善的注释内容,易于定位和理解。

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

思路参考:常见通用数仓分层设计:ODS、DW、APP。

每层主要作用如下:

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

以上就是关于大数据技能系列(二)总结。