目录
简要说说map reduce
详细说一下Hadoop map reduce的流程
简要介绍下hive
什么是数据仓库
Hive的使用场景
Hive的构成包括哪些部分?
数据倾斜介绍,原因与解决办法spark运行流程
flink checkpoint和savepoint的区别
Flink 的 Exactly Once 语义怎么保证
udf,udaf,udtf的区别
搜索
query匹配检索
大数据部分
简要说说map reduce
MapReduce是apache公司开发的,基于该框架能够使应用程序能够运行在大规模集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。MapReduce的思想就是“分而治之”,Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理;Reducer负责对map阶段的结果进行汇总。
参考
From https://cloud.tencent.com/developer/article/1492346
详细说一下Hadoop map reduce的流程
client提交数据到DFS,然后被分为多个split,然后通过input formatter以key-value传给jobTracker,jobtracker分配工作给多个map,也就是task tracker,工程师根据业务重写map,在各个taskTracker上分别执行代码任务。执行完之后,将结果进行shuffle,传给reduce,最后把结果汇聚输出。
参考:
https://blog.csdn.net/AC_great/article/details/47870331 Hadoop,MapReduce,HDFS面试题
简要介绍下hive
从概念上讲,Hive是一款开源的基于hadoop的用于统计海量结构化数据的一个数据仓库,它定义了简单的类似SQL的查询语言,称为HQL,允许熟悉SQL的用户查询数据。 从本质上讲:Hive是将HQL语句转换成MapReduce程序的一个工具。
上题的回答提到了数据仓库和MapReduce,考官可以针对你的回答,进而提问数据仓库和MapReduce相关的知识点。
参考:https://cloud.tencent.com/developer/article/1492346 大数据面试集锦
什么是数据仓库
数据仓库是一个面向主题的(如用户、成本、商品等业务主题)、集成的(可以汇总不同源数据库的数据)、反映历史变化(对操作型数据库进行汇总统计)的数据集合,用于支持管理决策(Decision Making Support)。
参考:
https://cloud.tencent.com/developer/article/1492346
Hive的使用场景
1.ad hoc查询:可以对Hive中的数据ad hoc查询,也就是由用户自定义查询条件,也方便进行ETL,如果底层的引擎使用的是MapReduce耗时会很久,可以换成Spark;
2.离线的数据分析:通过执行定时调度或者脚本去执行HQL语句,并将结果保存;
3.构建数仓时用于组织管理数据库和表。
参考:
https://cloud.tencent.com/developer/article/1492346
Hive的构成包括哪些部分?
主要分为三个部分:
- 用户接口层
常用的三个分别是CLI命令行接口,JDBC/ODBC 和 WebUI。其中最常用的是CLI,CLI启动的时候,会同时启动一个Hive副本。JDBC/ODBC是Hive的客户端,用户通过客户端连接至Hive Server。在启动客户端模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive。
2. 元数据存储
Hive将元数据存储(表名,字段信息等)在RDBMS中,有三种模式可以连接到数据库,分别是内嵌式元存储服务器、本地元存储服务器、远程元存储服务器。
3. Driver(Compiler/Optimizer/Executor)
Driver完成HQL查询语句的词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS上,并由MapReduce调用执行。
参考
From https://cloud.tencent.com/developer/article/1492346
数据倾斜介绍,原因与解决办法
在执行shuffle操作时,是按照key来进行数据的输出、拉拢和聚合。同一个key的values,是分配到同一个reduce task中。如果某个key对应的数据比另外一个key对应的数据量大很多,这时候就发生了数据倾斜。对运算时间很长,对机器也不好。
原因:
- key对应的value分布不均匀
- 数据本身的特性,比如按日期进行分区,如果在特定日期数据量激增。
- 建表时考虑不周,分区设置过少
- 一些HQL操作如join比较容易产生数据倾斜,比如表里的key集中(比如0值和空值多)。groupby操作某个值得量太大,count distinct。
解决方法:
- 抽样和原始分区:对原始数进行抽样,来预设分区边界值。totalOrderPartition
- 自定义分区:把比较集中的key分开到几个不同的分区
- 进行combine:放粗粒度(改数据),把本来多个key的数据聚集起来,减小数据量。
- 提高shuffle操作的reduce并行度:增加reduce task数量,相当于每个task数据量稀释了。
- Reduce join变为map join:reduce join是把相同的key汇聚到一个task中,再进行join。Map join先不按key去分,而是把小的RDD广播到每个excutor中。
参考:
https://zhuanlan.zhihu.com/p/64240857 数据倾斜面试
spark运行流程
1、构建Spark Application的运行环境,启动SparkContext
2、SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend。
3、Executor向SparkContext申请Task。SparkContext将应用程序分发给Executor。
4、SparkContext构建成DAG图(有向无环图,描述依赖关系),将DAG图分解成Stage(根据依赖关系,宽依赖指的是多个子RDD的Partition会依赖同一个父RDD,宽依赖是一个stage)、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行。
5、Task在Executor上运行,运行完释放所有资源。
参考:
From https://zhuanlan.zhihu.com/p/76518708
flink checkpoint和savepoint的区别
参考:
http://wuchong.me/blog/2018/11/25/flink-tips-differences-between-savepoints-and-checkpoints/
Flink 的 Exactly Once 语义怎么保证
对于一条message,receiver确保只收到一次 flink每一个操作都有记录状态,只有sink操作完成,才调整kafka偏移量,不会再重发。
幂等性data sink:幂等性可以多次执行,但只会引起一次改变
Two-phase commit data sink:写入接收系统但先不提交,直到checkpoint完成通知后,才真正写入结果
udf,udaf,udtf的区别
Hive中有三种UDF:
1、用户定义函数(user-defined function)UDF;
2、用户定义聚集函数(user-defined aggregate function,UDAF)
3、用户定义表生成函数(user-defined table-generating function,UDTF)
UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。
UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。
UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。
简单来说:
UDF:返回对应值,一对一 | UDAF:返回聚类值,多对一 | UDTF:返回拆分值,一对多
搜索
query匹配检索
问了个给一个query,怎么找相关的文章。匹配和检索算法。都有哪些方法。https://www.nowcoder.com/discuss/213960
还不会。。。。
learning2rank
pointwise pairwise listwise
参考:
https://blog.csdn.net/lipengcn/article/details/85313971