我是靠谱客的博主 活泼犀牛,最近开发中收集的这篇文章主要介绍大数据面试题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、MR与Spark的区别

  1. hadoop中的一个任务称为job,一个job分为map task和reduce task 每个task都是在自己的进程中运行的,当task 运行结束以后,进程也会结束
  2. spark的一个任务叫做application,一个application中有多个job,每触发一次action操作就会产生一个job,这些job可以并行也可以串行计算,每个job中有多个stage,stage是shuffle过程中DAGScheduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset,然后由taskscheduler来进行分发到exector中进行执行,executor的生命周期和app的生命周期是一样的,即使没有job运行也是存在。所以task可以快速启动读取内存进行计算。
  3. hadoop的job只有map和reduce操作,表达能力欠缺且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系,spark的迭代计算都是在内存汇总进行的,api提供了大量的rdd操作如join,groupby等,而且通过DAG图可以实现良好的容错。

2、Spark在Client与在集群运行的区别

从广义上来讲,yarn-client适用于调试和交互,yarn-cluster模式适用于生产环境

集群和client模式最大的区别就是app master的区别,client模式下,driver运行在本地,他仅仅负责向yarn申请exector,client会和请求的container进行交互,也就是说client不能离开,并且伴随着网络io。cluster模式是driver 在am中执行,也就是applicaitonmaster中执行,它负责向yarn申请资源以及调度exector,提交作业之后就可以关闭客户端了

3、相同的SQL在HiveSql与SparkSQL的实现中,为什么Spark比Hadoop快

  1. hive底层是hadoop,spark sql 的底层是spark core
  2. hadoop进行计算的时候伴随着大量的hdfs的io,spark对mr进行了优化,不需要大量的hdfs 的io
  3. hadoop 迭代计算需要依赖于hdfs 的读写,但是spark自己就可以很强势的进行迭代计算。

4、hive怎么自定义udf

编写一个java类继承UDFS类 重写aluate方法即可,返回一条数据

5、设计HBase表需要注意的点

  1. 如果有可能建议添加boomfilter,boomfilter可以进行 列族和行键的单独boomfilter,在写入的时候会把行键的hash写入到boomfilter中,这样大大减少了检索数据的时间
  2. version可以控制数据的版本,假如老数据我们不关心,那么就设置为1,可以节约大约三分之二的空间
  3. 可以进行压缩推荐使用snappy压缩,如果是冷数据建议gzip压缩率更高,在snappy之前google默认的压缩是lzo,在snappy之后,snappy是默认的压缩格式
  4. ttl可以给列族加上清除时间,如果version的最少保留是1个副本,那么会保留最新的1个版本,如果是0个,那么ttl时间到了之后,该列族下所有的数据将会被删除。
  5. 预分区 默认情况下 在创建Hbase表的时候会自动创建一个region分区,当导入数据的时候,所有客户端都向这一个region写数据,直到整个region足够大了才进行切分。一种可以加快批量写的方法是通过预先创建一个空的regions,这样当数据写入Hbase时,会按照region分区情况,在集群内做数据的负载均衡。在实际工作当中,创建表时一般都需要提前做预分区处理,一般来说每台服务器上面设置两个到五个的预分区,这么做可以更好地减少Split的过程,在设置预分区时,rowKey的设计尤为重要
  6. 列族的设计尽量一个并且只有一个字母
  7. rowkey设计原则,长度原则不要超过16个字节。因为hbase是一个keyvalue键值数据库,那么如果长度太长的话,会影响hfile的存储,还有了memstore会存储在内存中。如果rowkey如果太大的话会导致内存利用率低,操作系统都是64位系统,内存8字节对齐,控制在16个字节,8的整数倍利用操作系统的最佳特性,rowkey的唯一原则,rowkey是按照字典顺序排序存储的,因此设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一起

6、HBase的HLog

首先我们要明确一件事情,Hlog是存储在hdfs上的。并且一台HRegionServer就有一个hlog所一一对应。那么谈到Hbase的Hlog,我们不得不说一下hbase的写流程。

HBase往kakfa写数据的时候,首先获取到HBaseClient,然后链接到Zookeeper 获取到root表,从root表中定位meta表的位置,然后从RegionServer中定位到Region的信息,然后region写数据之前会先检查memstore里面的 boomfilter。

如果此Region的MemStore已经有缓存已有写入的数据,则直接返回,如果没有缓存,写入HLog(WAL)再写入MemStore成功后在返回。MemStore的内存达到一定值的时候会调用flush成为storefile然后存储到hdfs。

在堆HBase插入数据时,插入到内存MemStore所以很快,对于安全性不高的英勇可以关闭HLog,可以获得更高的写性能。

未完待续。。

最后

以上就是活泼犀牛为你收集整理的大数据面试题的全部内容,希望文章能够帮你解决大数据面试题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部