请选择 进入手机版 | 继续访问电脑版
楼主: brooklet
1323 2

[数据库引擎开发] 大数据技术之高频面试题(二):项目架构与涉及技术 [推广有奖]

  • 1关注
  • 1粉丝

讲师

90%

还不是VIP/贵宾

-

威望
0
论坛币
6875 个
通用积分
39.3190
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
54815 点
帖子
162
精华
0
在线时间
688 小时
注册时间
2017-9-25
最后登录
2024-1-18

brooklet 发表于 2020-9-28 08:15:19 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
问题导读:
1、系统数据流程如何设计?
2、服务器如何选型?如何设计规模?
3、项目涉及的技术有哪些?
4、Yarn的Job提交流程如何理解?



第3章 项目架构
3.1 数仓概念

数据仓库的输入数据源和输出系统分别是什么?
输入系统:埋点产生的用户行为数据、JavaEE后台产生的业务数据
输出系统:报表系统、用户画像系统、推荐系统

3.2 系统数据流程设计


3.3 框架版本选型

1)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)

2)CDH:国内使用最多的版本,但  CM不开源,但其实对中、小公司使用来说没有影响(建议使用)

3)HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少


3.4 服务器选型

服务器使用物理机还是云主机?

1)机器成本考虑:

(1)物理机:以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,单台报价4W出头,需考虑托管服务器费用。一般物理机寿命5年左右

(2)云主机,以阿里云为例,差不多相同配置,每年5W

2)运维成本考虑:

(1)物理机:需要有专业的运维人员

(2)云主机:很多运维工作都由阿里云已经完成,运维相对较轻松



3.5 集群规模


3.6 人员配置参考
3.6.1 整体架构。

属于研发部,技术总监下面有各个项目组,我们属于数据组,其他还有后端项目组,基础平台等。总监上面就是副总等级别了。其他的还有产品运营部等。


3.6.2 你们部门的职级等级,晋升规则

职级就分初级,中级,高级。晋升规则不一定,看公司效益和职位空缺。


3.6.3 人员配置参考

小型公司(3人左右):组长1人,剩余组员无明确分工,并且可能兼顾javaEE和前端。

中小型公司(3~6人左右):组长1人,离线2人左右,实时1人左右(离线一般多于实时),JavaEE 1人(有或者没有人单独负责JavaEE,有时是有组员大数据和JavaEE一起做,或者大数据和前端一起做)。

中型公司(5~10人左右):组长1人,离线3~5人左右(离线处理、数仓),实时2人左右,JavaEE 1人左右(负责对接JavaEE业务),前端1人左右(有或者没有人单独负责前端)。

中大型公司(5~20人左右):组长1人,离线5~10人(离线处理、数仓),实时5人左右,JavaEE2人左右(负责对接JavaEE业务),前端1人(有或者没有人单独负责前端)。(发展比较良好的中大型公司可能大数据部门已经细化拆分,分成多个大数据组,分别负责不同业务)

上面只是参考配置,因为公司之间差异很大,例如ofo大数据部门只有5个人左右,因此根据所选公司规模确定一个合理范围,在面试前必须将这个人员配置考虑清楚,回答时要非常确定。


第4章 项目涉及技术
4.1 Linux&Shell相关总结
4.1.1 Linux常用命令


4.1.2 Shell常用工具

awk、sed、cut、sort


4.2 Hadoop相关总结
4.2.1 Hadoop常用端口号

dfs.namenode.http-address:50070

dfs.datanode.http-address:50075

SecondaryNameNode辅助名称节点端口号:50090

dfs.datanode.address:50010

fs.defaultFS:8020 或者9000

yarn.resourcemanager.webapp.address:8088

历史服务器web访问端口:19888


4.2.2 Hadoop配置文件以及简单的Hadoop集群搭建

(1)配置文件:

core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

hadoop-env.sh、yarn-env.sh、mapred-env.sh、slaves

(2)简单的集群搭建过程:

        JDK安装

配置SSH免密登录

配置hadoop核心文件:

格式化namenode

4.2.3 HDFS读流程和写流程



4.2.4 MapReduce的Shuffle过程及Hadoop优化(包括:压缩、小文件、集群优化)



一、Shuffle机制

1)Map方法之后Reduce方法之前这段处理过程叫Shuffle

2)Map方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送到环形缓冲区;环形缓冲区默认大小100m,环形缓冲区达到80%时,进行溢写;溢写前对数据进行排序,排序按照对key的索引进行字典顺序排序,排序的手段快排;溢写产生大量溢写文件,需要对溢写文件进行归并排序;对溢写的文件也可以进行Combiner操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待Reduce端拉取。

3)每个Reduce拉取Map端对应分区的数据。拉取数据后先存储到内存中,内存不够了,再存储到磁盘。拉取完所有数据后,采用归并排序将内存和磁盘中的数据都进行排序。在进入Reduce方法前,可以对数据进行分组操作。


二、Hadoop优化

0HDFS小文件影响

(1)影响NameNode的寿命,因为文件元数据存储在NameNode的内存中

(2)影响计算引擎的任务数量,比如每个小的文件都会生成一个Map任务

1)数据输入小文件处理:

(1)合并小文件:对小文件进行归档(Har)、自定义Inputformat将小文件存储成SequenceFile文件。

(2)采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景。

(3)对于大量小文件Job,可以开启JVM重用。

2Map阶段

(1)增大环形缓冲区大小。由100m扩大到200m

(2)增大环形缓冲区溢写的比例。由80%扩大到90%

(3)减少对溢写文件的merge次数。

(4)不影响实际业务的前提下,采用Combiner提前合并,减少 I/O。

3Reduce阶段

(1)合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致 Map、Reduce任务间竞争资源,造成处理超时等错误。

(2)设置Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。

(3)规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。

(4)增加每个Reduce去Map中拿数据的并行数

(5)集群性能可以的前提下,增大Reduce端存储数据内存的大小。

4)IO传输

(1)采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。

(2)使用SequenceFile二进制文件

5)整体

(1)MapTask默认内存大小为1G,可以增加MapTask内存大小为4-5g

(2)ReduceTask默认内存大小为1G,可以增加ReduceTask内存大小为4-5g

(3)可以增加MapTask的cpu核数,增加ReduceTask的CPU核数

(4)增加每个Container的CPU核数和内存大小

(5)调整每个Map Task和Reduce Task最大重试次数


三、压缩



提示:如果面试过程问起,我们一般回答压缩方式为Snappy,特点速度快,缺点无法切分(可以回答在链式MR中,Reduce端输出使用bzip2压缩,以便后续的map任务对数据进行split)


四、切片机制

1)简单地按照文件的内容长度进行切片

2)切片大小,默认等于Block大小

3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

提示:切片大小公式:max(0,min(Long_max,blockSize))

4.2.5 Yarn的Job提交流程

4.2.6 Yarn的默认调度器、调度器分类、以及他们之间的区别

1)Hadoop调度器重要分为三类:

FIFO 、Capacity Scheduler(容量调度器)和Fair Sceduler(公平调度器)。

Hadoop2.7.2默认的资源调度器是 容量调度器

2)区别:

FIFO调度器:先进先出,同一时间队列中只有一个任务在执行。



容量调度器:多队列;每个队列内部先进先出,同一时间队列中只有一个任务在执行。队列的并行度为队列的个数。




公平调度器:多队列;每个队列内部按照缺额大小分配资源启动任务,同一时间队列中有多个任务执行。队列的并行度大于等于队列的个数。

3)一定要强调生产环境中不是使用的FifoScheduler,面试的时侯会发现候选人大概了解这几种调度器的区别,但是问在生产环境用哪种,却说使用的FifoScheduler(企业生产环境一定不会用这个调度的)




4.2.7项目经验之LZO压缩

Hadoop默认不支持LZO压缩,如果需要支持LZO压缩,需要添加jar包,并在hadoop的cores-site.xml文件中添加相关压缩配置。


4.2.8 Hadoop参数调优

1)在hdfs-site.xml文件中配置多目录,最好提前配置好,否则更改目录需要重新启动集群

2)NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。

dfs.namenode.handler.count=20* log2(Cluster Size),比如集群规模为10台时,此参数设置为60

3)编辑日志存储路径dfs.namenode.edits.dir设置与镜像文件存储路径dfs.namenode.name.dir尽量分开,达到最低写入延迟

4)服务器节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。yarn.nodemanager.resource.memory-mb

5)单个任务可申请的最多物理内存量,默认是8192(MB)。yarn.scheduler.maximum-allocation-mb


4.2.9项目经验之基准测试

搭建完Hadoop集群后需要对HDFS读写性能和MR计算能力测试。测试jar包在hadoop的share文件夹下。


4.2.10 Hadoop宕机

1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)

2)如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。


4.3 Zookeeper相关总结4.3.1 选举机制

        半数机制


4.3.2 常用命令

        ls、get、create


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:大数据技术 大数据 面试题 ALLOCATION completed

三重虫 发表于 2022-1-5 13:03:18 |显示全部楼层 |坛友微信交流群

使用道具

癸巳 在职认证  发表于 2022-8-5 16:40:25 |显示全部楼层 |坛友微信交流群
学习了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 22:44