2023大数据面试题真题总结(附答案)

栏目:未来教育  时间:2023-07-11
手机版

  网络图源,侵权联删客户端跟namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在namenode返回是否可以上传client请求第一个block该传输到哪些datanode服务器上namenode返回3个datanode服务器ABCclient请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将这个pipeline建立完成,逐级返回客户端client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答当一个block传输完成之后,client再次请求namenode上传第二个block的服务器.网络搜图,侵权联删client跟namenode通信查询元数据,找到文件块所在的datanode服务器挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)客户端以packet为单位接收,先在本地缓存,然后写入目标文件hdfs有namenode,secondraynamenode,datanode组成,为n+1模式

  Namenode负责管理和记录整个文件系统的元数据DataNode负责管理用户的文件数据块,文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上,每一个文件块可以有多个副本,并存放在不同的datanode上,DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量Hdfs的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行secondraynamenode负责合并日志Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来;如果是长时间宕机了,那么datanode上的数据应该已经备份到其他机器了,那这台datanode就是一台新的datanode了,删除它的所有数据文件和状态文件,重新启动即可先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了,但是最终解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA(高可用)namenode对数据的管理采用了三种存储形式:

  内存元数据(NameSystem)磁盘元数据镜像文件(fsimage镜像)数据操作日志文件(可通过日志运算出元数据)(edit日志文件)每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)

  网络搜图,侵权联删namenode和secondary namenode的工作目录存储结构完全相同,所以,dangnamenode故障退出需要重新恢复时,可以从secondarynamenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据

  网络搜图,侵权联删

  用户向Yarn中提交应用程序,其中包括ApplicationMaster程序,启动ApplicationMaster的命令,用户程序等;ResourManager为该应用程序分配第一个Container, 并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster;ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态, 然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7;ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务;NodeManager为任务设置好运行环境(包括环境变量,JAR包,二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务,在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态;应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己;combiner是发生在map的最后一个阶段,父类就是Reducer,意义就是对每一个maptask的输出进行局部汇总,以减少网络传输量,缓解网络传输瓶颈,提高reducer的执行效率;partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊数据倾斜:map/reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称为数据倾斜;

  (1) 局部聚合加全局聚合

  第一次在map阶段对那些导致了数据倾斜的key加上1到n的随机前缀,这样本来相同的key也会被分到多个Reducer中进行局部聚合,数量就会大大降低;

  第二次mapreduce,去掉key的随机前缀,进行全局聚合;

  思想:二次MR,第一次将key随机散列到不同reducer进行处理达到负载均衡的目的,第二次再根据去掉key的随机前缀,按原key进行reduce处理;

  这个方法进行两次mapreduce,性能稍差

  (2) 增加Reducer,提高并行度;

  (3) 实现自定义分区

  根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer

  网络搜图,侵权联删shuffle:洗牌,发牌-(核心机制:缓存,数据分区,排序,Merge进行局部value的合并)

  具体来说:就是将maptask输出到处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行分区和排序

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

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

  (3)每个Reduce拉取Map端对应分区的数据,拉取数据后先存储到内存中,内存不够了,再存储到磁盘,拉取完所有数据后,采用归并排序将内存和磁盘中的数据都进行排序;

  在进入到Reduce方法前,可以对数据进行分组操作;

  map的数量由输入切片的数量决定,128M切分一个切片,只要是文件也分为一个切片,有多少个切片就有多少个map Task;

  reduce数量自己配置

  设置合理的map和reduce的个数,合理设置blocksize避免出现数据倾斜combine函数对数据进行压缩小文件处理优化: 事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名, value:文件内容)参数优化求平均数的时候就不需要用combiner,因为不会减少reduce执行数量,在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率

  网络搜图,侵权联删一个MR程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:利用客户指定的inputformat来获取RecordReader读取数据,形成输入KV对将输入KV对传递给客户定义的map()方法,做逻辑运算,并将map()方法输出的KV对收集到缓存将缓存中的KV对按照K分区排序后不断溢写到磁盘文件MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据范围(数据分区)Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干个maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算,并收集运算输出的结果KV,然后调用客户指定的outputformat将结果数据输出到外部存储网络搜图,侵权联删HDFS数据安全性如何保证?

  存储在HDFS系统上的文件,会分割成128M大小的block存储在不同的节点上,block的副本数默认3份,也可配置成更多份;第一个副本一般放置在与client(客户端)所在的同一节点上(若客户端无datanode,则随机放),第二个副本放置到与第一个副本同一机架的不同节点,第三个副本放到不同机架的datanode节点,当取用时遵循就近原则;datanode以block为单位,每3s报告心跳状态,做10min内不报告心跳状态则namenode认为block已经死掉,namenode会把其上面的数据备份到其他一个datanode节点上,保证数据的副本数量;datanode会默认每小时把自己节点上的所有块状态信息报告给namenode;采用safemode模式:datanode会周期性的报告block信息,Namenode会计算block的损坏率,当阀值<0.999f时系统进入安全模式,HDFS只读不写,HDFS元数据采用了secondaryname备份或者HA备份 在写入的时候不会重新分配到datanode,如果写入时,一个datanode挂掉,会将已经写入的数据放置到queue的顶部,并将挂掉的datanode移出pipline,将数据写入到剩余的datanode,在写入结束后,namenode会收集datanode的信息,发现此文件的replication没有达到配置的要求(default=3),然后寻找一个datanode保存副本

  HDFS小文件影响影响Namenode的寿命,因为文件元数据存储在NameNode的内存中影响计算引擎的任务数量,比如每个小时的文件都会生成一个Map任务数据输入小文件处理:合并小文件:对小文件进行归档(Har),自定义Inputformat将小文件存储成SequenceFile文件;采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景;对于大量小文件Job,可以开启JVM重用Map阶段增大环形缓冲区大小,由100M扩大到200M增大环形缓冲区溢写的比例,由80%扩大到90%减少对溢写文件的merge次数;(10个文件,一次20个merge)不影响实际业务的前提下,采用Combiner提前合并,减少I/O;Reduce阶段合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多;太少,会导致Task等待,延长处理时间;太多,会导致Map,Reduce任务间竞争资源,造成处理超时等错误;设置Map,Reduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间;规避使用Reduce,因为Ruduce在用于连接数据集的时候将会产生大量的网络消耗;增加每个Reduce去Map中拿数据的并行数集群性能可以的前提下,增大Reduce端存储数据内存的大小;IO传输采用数据压缩的方式,减少网络IO的时间,安装Snappy和LZOP压缩编码器使用SequenceFile二进制文件整体MapTask默认内存大小为1G,可以增加MapTask内存大小为4-5GReduceTask默认内存大小为1G,可以增加ReduceTask内存大小为4-5G 可以增加MapTask的cpu核数,增加ReduceTask的CPU核数增加每个Container的CPU核数和内存大小调整每个Map Task和Reduce Task的最大重试次数NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate;SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务;帮助NN合并editslog,减少NN启动时间;DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点);每个存储数据的节点运行一个datanode守护进程;ResourceManager(JobTracker) JobTracker负责调度DataNode上的工作,每个DataNode有一个TaskTracker,它们执行实际工作;NodeManager(TaskTracker)执行任务DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK,它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态,FC也有选择谁作为Active NN的权利,因为最多只有两个节点;目前选择策略还比较简单(先到先得,轮换)JournalNode高可用情况下存放namenode的editlog文件Job是我们对一个完整的mapreduce程序的抽象封装

  Task是job运行时,每一个处理阶段的具体实例,如map task,reduce task,map task和reduce task都会有多个并发运行的实例

  HDFS高可用原理:

  Hadoop HA(High Available) 通过同时配置两个处于Active/Passive模式的Namenode来解决上述问题,状态分别是Active和Standby, Standby Namenode作为热备份,从而允许在机器发生故障时能够快速进行故障转移,同时在日常维护的时候使用优雅的方式进行Namenode切换,Namenode只能配置一主一备,不能多于两个Namenode;

  主Namenode处理所有的操作请求(读写),而Standby只是作为slave,维护尽可能同步的状态,使得故障时能够快速切换到Standby;为了使Standby Namenode与Active Namenode数据保持同步,两个Namenode都与一组Journal Node进行通信;当主Namenode进行任务的namespace操作时,都会确保持久会修改日志到Journal Node节点中;Standby Namenode持续监控这些edit,当检测到变化时,将这些修改同步到自己的namespace;

  当进行故障转移时,Standby在成为Active Namenode之前,会确保自己已经读取了Journal Node中的所有edit日志,从而保持数据状态与故障发生前一致;

  为了确保故障转移能够快速完成,Standby Namenode需要维护最新的Block位置信息,即每个Block副本存放在集群中的哪些节点上;为了达到这一点,Datanode同时配置主备两个Namenode,并同时发送Block报告和心跳到两台Namenode;

  确保任何时刻只有一个Namenode处于Active状态非常重要,否则可能出现数据丢失或者数据损坏;当两台Namenode都认为自己的Active Namenode时,会同时尝试写入数据(不会再去检测和同步数据);为了防止这种脑裂现象,Journal Nodes 只允许一个Namenode写入数据,内部通过维护epoch数来控制,从而安全地进行故障转移;

  使用root账户登录;修改IP修改Host主机名配置SSH免密登录;关闭防火墙安装JDK上传解压Hadoop安装包配置Hadoop的核心配置文件Hadoop-env.sh, core-site.xml,mapred-site.xml,hdfs-site.xml,yarn-site.xml配置hadoop环境变量格式化hdfs#bin/hadoop namenode -format启动节点start-all.shfsimage: filesystem image的简写,文件镜像;

  客户端修改文件的时候,先更新内存中的metadata信息,只有当对文件操作成功的时候,才会写到editlog

  fsimage是文件meta信息的持久化的检查点,secondary namenode会定期的将fsimage和editlog合并dump成新的fsimage;

  FIFO Scheduler把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推;

  Capacity(容量)调度器,有一个专门的队列用来运行小任务,但是为了小任务专门设置了一个队列会预先占用一定的集群资源,这就导致了大任务的执行时间会落后于使用FIFO调度器时的时间;

  在Fair(公平)调度器中,我们不需要预先占用一定的系统资源,Fair资源器会为所有运行的job动态的调整系统资源;当第一个大job提交时,只有这一个job在运行,此时他获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源;

  需要注意的是,在下图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container;小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源;最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成;

  mapjoin方案

  join因为空值导致长尾(key为空值是用随机值代替)

  join因为热点值导致长尾,也可以将热点和非热点数据分开处理,最后合并

  UDF操作作用于单个数据行,并且产生一个数据作为输出;大多数函数都属于这一类(比如数学函数和字符串函数)

  UDAF接受多个输入数据行,并产生一个输出数据行;像COUNT和MAX这样的函数就是聚焦函数

  UDTF操作作用于单个数据行,并且产生多个数据行---一个表作为输出;lateral view explore()

  简单来说:

  UDF: 返回对应值,一对一

  UDAF: 返回聚类值,多对一

  UDTF: 返回拆分值,一对多

  内存数据库derby,安装小,但是数据存在内存,不稳定mysql数据库,数据存储模式可以自己设置,持久化好,查看方便内部表: 加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除

  外部表: 不加载数据到hive所在的hdfs目录,删除时,只删除表结构

  这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享元数据

  因为外部表不会加载数据到hive,减少数据传输,数据还能共享;hive不会修改数据,所以无需担心数据的损坏删除表时,只删除表结构,不删除数据;insert into: 将数据写到表中

  override write: 覆盖之前的内容

  hive的条件判断(if,coalesce,case)

  hive主要是做离线分析的

  hive建表有三种方式

  直接建表法查询建表法(通过AS查询语句完成建表:将子查询的结果存在新表里,有数据,一般用于中间表)like建表法(会创建结构完全相同的表,但是没有数据)hive表有2种: 内部表和外部表

  union去重

  union all不去重

  group by 注: group by优于 distinct group 情形: group by 维度小,某值的数量过多后果: 处理某值得reduce非常耗时解决方式: 采用sum() group by 得方式来替换count(distinct)完成计算;count(distinct)count(distinct xx)情形: 某特殊值过多后果: 处理此特殊值得reduce耗时; 只有一个reduce任务解决方式: count distinct时,将值为空得情况单独处理,比如可以直接过滤空值的行,在最后的结果中加1,如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行unionmapjoin不同数据类型关联产生数据倾斜情形: 比如用户表中user_id字段为int,log表中user_id字段既有String类型也有int类型;当按照user_id进行两个表的Join操作时;后果: 处理此特殊值的reduce耗时; 只有一个reduce任务默认的Hash操作会按int型的id来进行分配,这样会导致所有string类型id的记录都分配到一个Reducer中;解决方式: 把数字类型转换成字符串类型5. 开启数据倾斜时负载均衡

  思想:就是先随机分发并处理,再按照key group by 来分发处理;

  操作:当选项设定为true,生成的查询计划会有两个MRJob;

  第一个MRJob中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果时相同的GroupByKey有可能被分发到不同的Reduce中,从而达到负载均衡的目的;

  第二个MRJob再根据预处理的数据结果按照GroupByKey分布到Reduce中(这个过程可以保证相同的原始GroupByKey被分布到同一个Reduce中),最后完成最终的聚合操作;

  点评:它使计算变成了两个mapreduce,现在第一个中在shuffle过程的partition时随机给key打标记,使每个key随机均匀分布到各个reduce上计算,但是这样只能完成部分计算,因为相同key没有分配到相同reduce上;

  所以需要第二次的mapreduce,这次就回归正常shuffle,但是数据分布不均匀的问题在第一次mapreduce已经有了很大的改善,因此基本解决数据倾斜;因为大量计算已经在第一次mr中随机分布到各个节点完成;

  6)控制空值分布

  将为空的key转变为字符串加随机数或纯随机数,将因空值而造成倾斜的数据分布到多个Reducer;

  注: 对于异常值如果不需要的话,最好是提前在where条件里过滤掉,这样可以使计算量大大减少;

  MapJoin如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成Common Join,即: 在Reduce阶段完成join;容易发生数据倾斜;可以用MapJoin把小表全部加载到内存在map端进行join,避免reducer处理;

  2.行列过滤

  列处理: 在SELECT中,只拿需要的列,如果有,尽量使用分区过滤,少用SELECT * ;

  行处理: 在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在Where后面,那么就会先全表关联,之后再过滤

  3.列式存储

  4.采用分区技术

  5.合理设置Map数

  (1) 通常情况下,作业会通过input的目录产生一个或者多个map任务

  主要的因素有:input 的文件总个数,input的文件大小,集群设置的文件块大小;

  (2) 是不是map数越多越好?

  答案是否定的,如果一个任务有很多小文件(远远小于块大小128M),则每个小文件也会被当作一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费;而且,同时可执行的map数是受限的;

  (3) 是不是保证每个map处理接近128M的文件块,就高枕无忧了?

  答案也是不一定, 比如有一个127M的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时;

  针对上面的问题2和3,我们需要采取两种方式来解决: 即减少map数和增加map数;

  6.小文件进行合并

  在Map执行前合并小文件,减少Map数: CombineHiveInputFormat具有对小文件进行合并的功能(系统默认的格式); HiveInputFormat没有对小文件合并功能;

  7. 合理设置Reduce数

  Reduce个数并不是越多越好

  (1) 过多的启动和初始化Reduce也会消耗时间和资源;

  (2) 另外,有多少个Reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;

  在设置Reduce个数的时候也需要考虑这两个原则: 处理大数据量利用合适的Reduce数;使得单个Reduce任务处理数据量大小要合适;

  8. 常用参数

  9.开启map端combiner(不影响最终业务逻辑)

  10. 压缩(选择快的)

  设置map端输出,中间结果压缩;(不完全是解决数据倾斜的问题,但是减少了IO读写和网络传输,能提高很多效率)

  11. 开启JVM重用

  delete 删除数据库

  drop 删除表

  truncate 摧毁表结构并重建

  Sort By: 分区内有序Order By: 全局排序,只有一个Reducer;Distribute By: 类似MR中的Partition,进行分区,结合sort by使用Cluster By: 当Distrubute by和Sorts by字段相同时,可以使用Cluster by方式;Cluster by除了具有Distribute by的功能外还兼具Sort by的功能; 但是排序只能是升序排序,不能指定排序规则为ASC或者DESC;hive默认的字段分隔符为ASCII码的控制符\001(^A),建表的时候用fields terminated by '\001'

  遇到过字段里边有/t的情况,自定义InputFormat,替换为其他分隔符再做后续处理;

  分区表: 原来的一个大表存储的时候分成不同的数据目录进行存储;如果说是单分区表,那么在表的目录下就只有一级子目录,如果说是多分区表,那么在表的目录下有多少分区就有多少级子目录;不管是单分区表,还是多分区表,在表的目录下,和非最终分区目录下是不能直接存储数据文件的;

  分桶表: 原理和hashpartitioner一样,将hive中的一张表的数据进行归纳分类的时候,归纳分类规则就是hashpartitioner; (需要指定桶字段,指定分成多少桶)

  分区表和分桶表的区别除了存储的格式不同外,最主要的是作用:

  分区表:细化数据管理,缩小mapreduce程序,需要扫描的数据量。分桶表:提高join查询的效率,在一份数据会被经常用来做连接查询的时候建立分桶,分桶字段就是连接字段;提高采样的效率。网络来源,侵权联删Mapjoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。

  Hive0.7之前,需要使用hint提示/+mapjoin(table)*/才会执行MapJoin,否则执行Common Join,但在0.7版本之前

  在hive的row_bumber中distribute by 和partition by的区别?

  hive开发中遇到什么问题?如何解决

  什么时候使用内部表,什么时候使用外部表

  hive都有哪些函数,你平常工作中用到哪些

  手写sql,连续活跃用户

  left semi join和left join的区别

  group by 为什么要排序

  说说印象最深的一次优化场景,hive常见的优化思路

  rdd的属性算子分为哪几类(RDD支持哪几种类型的操作)创建rdd的几种方式spark运行流程Spark中的coalesce与repartition的区别sortBy和sortByKey的区别map和mapPartitions的区别数据存入Redis优先使用map mapPartitions foreach foreachPartitions哪个?reduceByKey和groupByKey的区别cache和checkPoint的比较spark streaming流式统计单词数量代码简述map和flatMap的区别和应用场景计算曝光数和点击数分贝列出几个常用的transformation和action算子按照需求使用spark编写一下程序,要求使用scala语言spark应用程序的执行命令是什么?Spark应用执行有哪些模式,其中哪几种是集群模式请说明spark中广播变量的用途以下代码会报错吗?如果会怎么解决val arr=new ArrayList[String]; arr.foreach(parintln)写出你用过的spark的算子,其中哪些会产生shuffle过程Spark中rdd与partition的区别请写出创建DateSet的几种方式描述一下RDD,DataFrame,DataSet的区别描述一下Spark中stage是如何划分的?描述一下shuffle的概念Spark在yarn上运行需要做哪些关键的配置工作?如何kill 一个Spark在yarn运行中Application通常来说,Spark与MapReduce相比,Spark运行效率更高. 请说明效率更高来源于Spark内置的那些机制?请例举常见spark的运行模式?rdd中的数据在哪?如果对RDD进行cache操作后,数据在哪里?Spark中partition的数量由什么决定Scala里面的函数和方法有什么区别SparkStreaming怎么进行监控?Spark判断Shuffle的依据?Scala有没有多继承?可以实现多继承吗?Sparkstreaming和flink做实时处理的区别Sparkcontext的作用Sparkstreaming读取kafka数据为什么选择直连方式离线分析什么时候用sparkcore和sparksqlSparkstreaming实时的数据不丢失的问题简述宽依赖和窄依赖概念,groupByKey,reduceByKey,map,filter,union五种操作哪些会导致宽依赖,哪些会导致窄依赖数据倾斜可能会导致哪些问题,如何监控和排查,在设计之初,要考虑哪些来避免有一千万条短信,有重复,以文本文件的形式保存,一行一条数据,请用五分钟时间,找出重复出现最多的前10条现有一文件,格式如下,请用spark统计每个单词出现的次数共享变量和累加器当Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数?特别大的数据,怎么发送到excutor中?Spark调优都做过哪些方面?spark任务为什么会被yarn kill掉?Spark on Yarn作业执行流程? yarn-client和yarn-cluster有什么区别?FlatMap底层编码实现?spark_1.X与spark_2.X区别说说spark与flinkkafka名词解释和工作方式Consumer与topic关系kafka中生产数据的时候,如何保证写入的容错性?如何保证kafka消费者消费数据是全局有序的?有两个数据源,一个记录的是广告投放给用户的日志,一个记录用户访问日志,另外还有一个固定的用户基础表记录用户基本信息(比如学历,年龄等等),现在要分析广告投放对于哪类用户更有效,请采用数据的技术描述思路.另外如果两个数据源都是实时数据源(比如kafka),他们数据在时间上相差5分钟,需要哪些调整来解决实时分析问题?Kafka和SparkStreaing如何集成?例举Kafka的优点,简述Kafka为什么可以做到每秒数十万甚至上百万消息的高效分发?为什么离线分析要用kafka?kafka怎么进行监控?kafka与传统的消息队列服务有什么不同Kafka api low-level 与high-level有什么区别,使用low-level需要处理哪些细节Kafka的ISR副本同步队列Kafka消息数据积压, Kafka消费能力不足怎么处理?Kafka中的ISR,AR又代表什么?Kafka中的HW,LEO等分别代表什么?哪些情景会造成消息漏消费?当你使用kafka-topics.sh创建了一个topic之后,Kafka背后会执行什么逻辑?topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?Kafka有内部的topic吗?如果有是什么?有什么所用?聊一聊Kafka Controller的作用?失效副本是指什么?有哪些应对措施?Hbase调优Hbase的rowKey怎么创建好?列族怎么创建比较好?Hbase过滤器实现用途Hbase宕机如何处理Hive跟Hbase的区别是?hbase写流程?hbase读流程?hbase数据flush过程数据合并过程Hmaster和Hgionserver职责HBase列族和region的关系?请简述Hbase的物理模型是什么请问如果使用Hbase做即席查询,如何设计二级索引如何避免读,写Hbase时访问热点问题?布隆过滤器在Hbase中的应用Hbase是用来干嘛的?什么样的数据会放到hbase维表和宽表的考查(主要考察维表的使用及维度退化手法)数仓表命名规范拉链表的使用场景一亿条数据查的很慢,怎么查快一点有什么维表数据源都有哪些你们最大的表是什么表,数据量多少数仓架构体系数据平台是怎么的,用到阿里的那一套吗?你了解的调度系统有哪些?你们公司用的是哪种调度系统你们公司数仓底层是怎么抽数据的?为什么datax抽数据要比sqoop快?埋点数据你们是怎样接入的如果你们业务库的表有更新,你们数仓怎么处理的?能独立搭建数仓吗搭建过CDH集群吗?说一下你们公司的大数据平台架构?你有参与吗?介绍一下你自己的项目和所用的技术对目前的流和批处理的认知?就是谈谈自己的感受你了解哪些OLAP引擎,MPP知道一些吗?clickHouse了解一些吗?你自己做过测试性能吗?Kylin有了解过吗?介绍一下原理datax源码有改造过吗?你们数仓的APP层是怎么对外提供服务的?数据接入进行,你们是怎样规划的,有考虑数据的膨胀问题吗?简述拉链表,流水表以及快照表的含义和特点全量表(df),增量表(di),追加表(da),拉链表(dz)的区别及使用场景你们公司的数仓分层,每一层是怎么处理数据的什么是事实表,什么是维表星型模型和雪花模型缓慢变化维如何处理,几种方式datax与sqoop的优缺点datax抽数碰到emoji表情怎么解决工作中碰到什么困难,怎么解决的?如何用数据给公司带来收益需求驱动和业务驱动,数据开发和ETL开发,实战型和博客型如何用数据实现业务增长,黑客增长?什么是大数据?千万级别的数据完全可以用传统的关系数据库集群解决,为什么要用到大数据平台数据质量,元数据管理,指标体系建设,数据驱动什么是数仓,建设数仓时碰到过什么问题实时数仓技术选型及保证exactly-once维度建模和范式建模的区别埋点的码表如何设计集市层和公共层的区别缓慢变化维的处理方式聊聊数据质量说说你从0-1搭建数仓都做了什么?你觉得最有挑战的是什么?Flink实时计算时落磁盘吗?日活DAU的统计需要注意什么Flink调优Flink的容错是怎么做的Parque格式的好处?什么时候读的快什么时候读的慢flink中checkPoint为什么状态有保存在内存中这样的机制?为什么要开启checkPoint?flink保证Exactly_Once的原理flink的时间形式和窗口形式有几种?有什么区别,你们用在什么场景下的?flink的背压说下?flink的watermark机制说下,以及怎么解决数据乱序的问题?flink on yarn执行流程说一说spark和flink的区别hashMap底层源码,数据结构写出你用过的设计模式,并举例说明解决的实际问题Java创建线程的几种方式请简述操作系统的线程和进程的区别Java程序出现OutOfMemoryError:unable to create new native thread 的原因可能有哪些?如何分析和解决?采用java或自己熟悉的任何语言分别实现简单版本的线性表和链表,只需实现add,remove方法即可ArrayList和LinkedListd的区别JVM内存分哪几个区,每个区的作用是什么?Java中迭代器和集合的区别?HashMap和HashTable区别线程池使用注意哪些方面?HashMap和TreeMap的区别?TreeMap排序规则?用Java实现单例模式使用递归算法求n的阶乘:n!,语言不限HashMap和Hashtable的区别是什么TreeSet和HashSet区别Stringbuffer和Stringbuild区别Final,Finally,Finalize== 和Equals区别比较ArrayList,LinkedList的存储特性和读写性能Java类加载过程java中垃圾收集的方法有哪些?如何判断一个对象是否存活?(或者GC对象的判断方法)JVM,堆栈为什么要用es?存进es的数据是什么格式的,怎么查询什么是flumeflume运行机制Flume采集数据到Kafka中丢失数据怎么办Flume怎么进行监控?Flume的三层架构,collector,agent,storageSqoop底层运行的任务是什么Sqoop的迁移数据的原理Sqoop参数Sqoop导入导出Null存储一致性问题Sqoop数据导出一致性问题缓存穿透,缓存雪崩,缓存击穿数据类型持久化悲观锁和乐观锁redis是单线程的,为什么那么快redis的热键问题?怎么解决请写出mysql登录命令,用户名user,密码123456,地址192.168.1.130为什么Mysql的索引要使用B+树而不是其他树形结构?比如B树?二分查找快排归并排序冒泡排序字符串反转Btree简单讲一下动态规划,最大连续子序列和二叉树概念,特点及代码实现链表常用高级命令有些

上一篇:云南成人高考:不学习不考试一周速拿毕业证,有这好事?
下一篇:三河市燕郊育才学校2023年招生简章(普高部)

最近更新未来教育