㈠ “每日一道大数据面试题系列”spark如何调优
如果面试时被问到spark任务如何调优,我们该如何回答呢?
下面我们从四大方面回答这个问题,保证吊打面试官。
一、spark性能调优
1、分配更多的资源
比如增加执行器个数(num_executor)、增加执行器个数(executor_cores)、增加执行器内存(executor_memory)
2、调节并行度
spark.default.parallelism
3、重构RDD架构以及RDD持久化
尽量去复用RDD,差不多的RDD可以抽取成一个共同的RDD,公共RDD一定要实现持久化
4、广播变量
SparkContext.broadcast方法创建一个对象,通过value方法访问
5、使用kryo序列化
SparkConf中设置属性:spark.serializer: org.apache.spark.serializer.kryoSerializer
6、使用fastutil优化数据格式(代替java中的Array、List、Set、Map)
7、调节数据本地化等待时长
调节参数: spark.locality.wait
二、JVM调优
降低cache操作的内存占比 1.6版本之前使用的是静态内存管理
spark中堆内存被划分为两块:
一块是专门来给RDD作cachepersist持久化的 StorageMemory,另一块是给spark算子函数运行使用的,存放函数中自己创建的对象。
1.6版本之后采用统一内存管理机制
storage和execution各占50%,若己方不足对方空余可占用对方空间
可尝试调节executor堆外内存
spark.yarn.executor.memoryOverhead = 2048m
调节连接等待时长
spark.core.connection.ack.wait.timeout = 300
三、shuffle数据倾斜调优
1、预聚合源数据,对hive源表提前进行聚合操作,在hive聚合之后,spark任务再去读取
2、检查倾斜的key是否是脏数据,可以提前过滤
3、提高shuffle操作rece的并行度
4、使用随机key实现双重聚合
5、将rece端 join转换成map端 join
6、sample采样倾斜key,单独进行join后在union
7、使用随机数以及扩容表进行join
四、算子调优
1、使用mapPartition提升map类操作的性能
2、filter过后使用coalesce减少分区数量
3、使用foreachPartition优化写数据性能
4、使用repartition解决sparksql低并行度的性能问题
5、receByKey替换groupByKey实现map读预聚合
㈡ 大数据面试题及答案谁能分享一下
大数据时代才刚刚开始。随着越来越多的公司倾向于大数据运营,人才需求达到历史最高水平。这对你意味着什么?如果您想在任何大数据岗位上工作,它只能转化为更好的机会。您可以选择成为数据分析师,数据科学家,数据库管理员,大数据工程师,Hadoop大数据工程师等。在本文中,慧都网将介绍与大数据相关的前10大数据面试问题。
以下是最重要的大数据面试问题以及具体问题的详细解答。对于更广泛的问题,答案取决于您的经验,我们将分享一些如何回答它们的提示。
10个大数据面试入门级问题
无论何时进行大数据采访,采访者都可能会询问一些基本问题。无论您是大数据领域的新手还是经验丰富,都需要基础知识。因此,让我们来介绍一些常见的基本大数据面试问题以及破解大数据面试的答案。
1.您对“大数据”一词有何了解?
答:大数据是与复杂和大型数据集相关的术语。关系数据库无法处理大数据,这就是使用特殊工具和方法对大量数据执行操作的原因。大数据使公司能够更好地了解其业务,并帮助他们从定期收集的非结构化和原始数据中获取有意义的信息。大数据还允许公司采取数据支持的更好的业务决策。
2.大数据的五个V是什么?
答:大数据的五个V如下:
Volume -Volume表示体积大,即以高速率增长的数据量,即以PB为单位的数据量
Velocity -Velocity是数据增长的速度。社交媒体在数据增长速度方面发挥着重要作用。
Variety -Variety是指不同的数据类型,即各种数据格式,如文本,音频,视频等。
Veracity -Veracity是指可用数据的不确定性。由于大量数据带来不完整性和不一致性,因此产生了准确性。
Value -价值是指将数据转化为价值。通过将访问的大数据转换为价值,企业可以创造收入。
ResourceManager-该组件接收处理请求,并根据处理需要相应地分配给各个NodeManager。
NodeManager-它在每个单个数据节点上执行任务
处理
数据采集
HDFS在一组计算机上运行,而NAS在单个计算机上运行。因此,数据冗余是HDFS中的常见问题。相反,复制协议在NAS的情况下是不同的。因此,数据冗余的可能性要小得多。
在HDFS的情况下,数据作为数据块存储在本地驱动器中。在NAS的情况下,它存储在专用硬件中。
YARN的两个主要组成部分:
7.为什么Hadoop可用于大数据分析?
答:由于数据分析已成为业务的关键参数之一,因此,企业正在处理大量结构化,非结构化和半结构化数据。在Hadoop主要支持其功能的情况下,分析非结构化数据非常困难
此外,Hadoop是开源的,可在商用硬件上运行。因此,它是企业的成本效益解决方案。
8.什么是fsck?
答:fsck代表文件系统检查。它是HDFS使用的命令。此命令用于检查不一致性以及文件中是否存在任何问题。例如,如果文件有任何丢失的块,则通过此命令通知HDFS。
9. NAS(网络附加存储)和HDFS之间的主要区别是什么?
答:NAS(网络附加存储)和HDFS之间的主要区别 -
10.格式化NameNode的命令是什么?
答:$ hdfs namenode -format。
欢迎咨询慧都在线客服,我们将帮您转接大数据专家团队,并发送相关资料给您!
以上就是大数据面试题及答案,希望我的回答对您有帮助!
㈢ 大数据分析面试问什么
基本工具
包括规定动作和自选动作两类。
1.1 规定动作
SQL查询:JOIN ON、DISTINCT、GROUP BY、ORDER BY等等。从数据库中提取数据是数据分析的第一步。
1.2 自选动作
根据简历来问,简历上写什么就问什么,会问得比较深入。简历作为敲门砖,撰写也是非常重要的,切不可写的过于夸张和造假,奉劝各位不要作死,毕竟不作死都有可能会死。Python、Stata、R、SPSS、SAS、EViews都算比较常见的数据分析工具。
2.逻辑思维
主要分为两方面,对业务逻辑的理解能力和行文的逻辑水平。
2.1业务逻辑
虽然一个业务看似流程简单清晰,但产生数据的复杂程度往往超过大多数人的想象。对业务逻辑的考察主要通过相关项目经历。
2.2行文逻辑
毕竟最终产出是一份份报告,可能是HTML邮件也能是PDF。
3.理论储备
也分为规定动作和可选动作。
3.1 规定动作
主要是基础的统计学理论,如方差、协方差、算数平均数、几何平均数、中位数、众数、分位值、双峰数据、长尾数据、假设检验、期望迭代法则、贝叶斯原理等。
3.2 自选动作
根据简历来问,简历上写什么hr一定会问什么。
4.对细节的敏感度
作为数据分析师,每天要关注大量数据指标。对细节的敏感度是非常必要的。这主要分为两方面,对统计口径的敏感度和对数据的敏感度。
4.1 统计口径
统计口径一致是确保数据可比性的基础,这非常考验数据分析师的敏感度和行业经验。
4.2 数据
面试者对数据异常波动、离群值、平均数没有代表意义等情况的迅速识别能力。比如已知然寿司套餐单价1,500,酒水单价300,平均客单价2,500,能不能马上想到这可能是双峰数据或者长尾数据,抑或既双峰又长尾的数据?
5.学习能力
互联网行业瞬息万变,光数据的存储就有Oracle、MySQL、Hadoop、Spark、Hive、Impala、谷哥哥三驾马车等一大堆奇奇怪怪的东西。互联网行业的从业者经常要面对新需求、新工具、新方法。能否迅速掌握新知识,解决新问题面试者必须证明给hr看。主要考察的方式是了解过往项目经历,或者出作业题(比如Sci-Hub)。
6.排版和简单UI设计
数据分析报告必须简洁、清晰、重点突出。主要考察方式是出作业题让面试者限时交一份slides(就是PPT啦)出来。
7.价值观
主要看工作热情、态度、道德水平等等,这方面的问题比较随机。
㈣ 大数据面试要准备哪些
一、大数据面试要准备一些应试须知:
1、让面试官记住你的名字。很多人在介绍自己名字的时候仅仅只有简单的一句“我叫某某某”,直到你的自我介绍完毕,面试官也没有记住你的名字,如果后续的自我介绍中没有突出的表现,那么这样的自我介绍注定是失败的。
2、告诉面试官和应聘职位相关的工作经历。在自我介绍自己的工作经历时,一定要注意哪些经历是和应聘职位相关,对应聘有帮助,哪些是毫无意义的。例如应聘技术人员的职位,我们主要讲从事本职工作的经历,如果有从事其他行业的经历,比如从事过销售,组织,管理工作的,也可以略微提一下,往往会对应聘起到一定的帮助。
3、在面试官面前展现性格阳光的一面。性格也是面试官需要考察的一项,一般来说活泼、外向的性格始终会受到大家的亲睐,所以我们在面试官面前一定要展示性格阳光的一面,即使内向,也不能表现出来。
4、简单的介绍一下自己的未来规划。未来规划这一项是为了告诉面试官,我是一个有计划、有目标、有理想的人,我参加面试是因为我对这份工作比较热爱,而不是为了混口饭吃而应聘这项工作。很多老板最怕找到以混日子为目的的员工。
5、注意扬长避短。扬长避短也就是说在面试时尽量选择自己好的方面来说,只说自己的优点,避免谈及自己的缺点。从人性的角度来讲,人们总是对负面的新闻感兴趣,因此在面试时,面试官会千方百计的发现你的缺点,你的弱项,如果我们主动将缺点暴露给对方,那么产生的影响往往是负面的。
细节决定成败,一个简单的自我介绍虽然只有短短的几分钟,但是其内容却包罗万象,因此在面试时自我介绍的完美与否是举足轻重的。
二、大数据面试要准备一些常见的面试题:
1、你会Java语言吗?熟悉到什么程度?
2、你最喜欢的编程语言是什么?为什么?
3、处理过的最大的数据量?你是如何处理他们的?处理的结果如何。
2、在处理大数据过程中,如何保证得到期望值?
3、如何让一个网络爬虫速度更快、抽取更好的信息以及更好总结数据从而得到一干净的数据库?
4、点击流数据应该是实时处理?为什么?哪部分应该实时处理?
6、如何把非结构化的数据转换成结构化的数据?这是否真的有必要做这样的转换?把数据存成平面文本文件是否比存成关系数据库更好?
7、如何判别maprece过程有好的负载均衡?什么是负载均衡?
8、Spark和Hive的区别,以及Spark和Hive的数据倾斜调优问题?
9、Hive和Hbase的区别?
10、MapRece的思想,以及MapRece调优问题?
11、你所了解的开源网站?
12、有两个集群,每个集群有3个节点,使用hive分析相同的数据,sql语句完全一样,一个集群的分析结果比另外一个慢的多,给出造成这种现象的可能原因?
13、Hbase的优化?
14、集群的版本,以及集群的瓶颈问题?
15、CRM项目,怎么跟Spark结合?
16、如何创建一个关键字分类?
17、海量日志数据,提取出某日访问网络次数最多的那个IP?
18、Hadoop和Spark处理数据时,出现内存溢出的处理方法?
19、有一个1G大小的一个文件,里面每一是一个词,词的大小不超过16字节,内存大小限制大小1M,返回频率最高的50个词。
20、你是如何处理缺少数据的?你是推荐使用什么样的处理技术,或者说你是用什么样的技术处理呢?
㈤ 面试题-关于大数据量的分布式处理
面试题-关于大数据量的分布式处理
题目:生产系统每天会产生一个日志文件F,数据量在5000W行的级别。文件F保存了两列数据,一列是来源渠道,一列是来源渠道上的用户标识。文件F用来记录当日各渠道上的所有访问用户,每访问一次,记录一条。
请问如何快速计算出各渠道上新增的用户?
问题分析:首先本次面试的是有关于分布式数据处理以及数据分析的职位,所以相关的面试题目可能会偏向于使用分布式的思想去解决。但无奈本人当时反应太慢,实在没向分布式处理方向思考。
方案一:
本题最直观的一个处理方法就是,直接拿着当日新增的5000W条访问记录一条一条的去匹配历史访问用户。若存在历史访问记录,则忽略;若不存在访问记录,则保存为新增记录。很明显,假若历史访问用户有2亿条记录,则需要和2亿条数据比较5000W次。比较次数可想而知。
由于本人一直在做基于数据库的数据处理工作,很容易就想到将历史数据保存在数据库的一张表中,并对来源渠道和用户标识这两个字段建立索引,然后遍历日志文件F(5000W次)。根据日志文件F中的每一行去匹配数据库中的历史访问记录。由于历史数据表有索引,单次查询的速度也非常快。但是需要5000W次的数据库查询,很明显效率低下。
方案二:
既然多次单一查询无法满足要求,于是可以先通过一种数据导入技术将当日新增数据导入到数据库的另一张表中,并和历史数据做左外关联。若能关联成功,则表示此用户已存在;若关联失败,则表示此用户不存在。
此方案暂且不说5000W条记录的大表与2亿条记录的大表关联效率有多高以及使用到的数据库缓冲区的资源有多少,单就5000W条访问记录导入数据库表,都是一个不小的时间花费。
方案三:
很明显,面试时方案二的回答并未达到面试官的预期,最初被遗憾的PASS掉。一家很有潜力,自己很看好的公司,并计划做为自己未来发展方向的职位,就这样丢下我,扬长而去了。
这几天又看了下分布式相关的介绍,突然想到这道题。一下子醒悟过来,其实还是因为对题目要考察的点分析得不够透彻。当时以为只是仅仅考数据处理效率的一个题目,其实考的是一种将复杂问题拆分为简单问题的拆分思想。了解到这一层,一种新的方式立马在脑海中浮现出来。具体如下:
假如现在有N(N>=2)个存储块,并存在一个函数f(来源渠道,用户标识),对于给定的一组(来源渠道,用户标识),总能将其分发到一个固定的存储块内。那么可以使用此函数将5000W行访问记录尽量均匀的分发至N个存储块上,并同时使用此函数将历史访问记录也分发至这些存储块上。由于相同的一组记录,肯定会被分配至同一个存储块,所以比较时,只需要分别比较各个存储块上当日新增记录与历史访问用户,然后将N个存储块上比较的结果汇总,即可得到最终结果。
假设历史访问用户数据已通过函数f(来源渠道,用户标识)被分发至了N个历史文件H1、H2、…、HN。则详细处理步骤如下:
1、将F中的内容使用函数f(来源渠道,用户标识),分发至文件F1、F2、…、FN内。(可开M(M>=2)个并行,且若N-M越大,同时向同一文件写入数据的概率越小)
2、将文件F1、F2、…、FN内的访问记录去重。(可开N个并行分别处理对应的N个文件)。
3、将文件Fn(1=<n<=N)去重后的结果与对应的历史文件Hn比较得出新增用户结果Rn。(可开N个并行分别处理对应的N个文件且当N足够大时,实际要处理数据的量级就会相当小)。
4、合并第3步得到的结果R1、R2、…、RN即可得到当日新增用户。(可并行)
5、为使历史数据文件H1、H2、…、HN中的数据最全,将结果R1、R2、…、RN分别写入对应的历史文件中。(可并行)
本方案主要有以下优点:
1、数据的分发、处理、合并都可并行处理,明显提高了处理效率。
2、由于每个存储块上的新增数据,只需要与它对应存储块上的历史数据比较即可,大大减少了比较次数。(对于当日每一条记录来说,都只需要与大约历史的N分之一条数据去比较)
3、基本不需要考虑历史全量数据的保存及获取问题。
本方案缺点:
1、处理方案明显变的复杂许多,不仅需要处理数据的分发,处理,还需要一个并行的快速收集方法。
2、可能需要多台服务器并行处理。
本方案难点:
1、一个稳定(对于相同的一组来源渠道和用户标识,必定会被分发至同一存储块)、快速(根据一条来源渠道和用户标识数据,可以快速的计算出它将要被分发至的存储块)、均匀(当日新增数据及历史数据都能尽量均匀的被分发至N个存储块,最理想的情况是每个存储块上分发到的数据都是总数据的N分之一)的分发函数至关重要。
2、如何分发、并行处理及汇总数据。