大数据面试宝典(分析题)

  金三银四,正值求职的黄金季节,求职大数据的小伙伴们,看过来了,小编给你送福利了,大数据面试宝典已经为你备好,请各位小主儿过目。

  

大数据面试宝典(分析题)

  一、hive的使用,内外部表的区别,分区作用,UDF和Hive优化

  (1)hive使用:仓库、工具

  (2)hive内外部表:内部表数据永久删除,外部表数据删除后、其他人依然可以访问

  (3)分区作用:防止数据倾斜

  (4)UDF函数:用户自定义的函数(主要解决格式,计算问题),需要继承UDF类

  java代码实现

  class TestUDFHive extends UDF {

  public String evalute(String str){

  try{

  return "hello"+str

  }catch(Exception e){

  return str+"error"

  }

  }

  }

  (5)Hive优化:看做mapreduce处理

  a\排序优化:sort by 效率高于 order by

  b\分区:使用静态分区 (statu_date="20160516",location="beijin"),每个分区对应hdfs上的一个目录

  c\减少job和task数量:使用表链接操作

  d\解决groupby数据倾斜问题:设置hive.groupby.skewindata=true ,那么hive会自动负载均衡

  e\小文件合并成大文件:表连接操作

  f\使用UDF或UDAF函数:

  二、简要描述如何安装配置一个apache开原本hadoop,只描述即可,无需列出完整步骤,能列出步骤更好。

  流程:

  1.创建hadoop用户

  2.修改IP

  3.安装JDK,并配置环境变量

  4.修改host文件映射

  5.安装SSH,配置无秘钥通信

  6.上传解压hadoop安装包

  7.配置conf文件夹下的hadoop-env.sh、core-site.xlmapre-site.xml、hdfs-site.xml

  8.配置hadoop的环境变量

  9.Hadoop namenode -format

  10.start-all

  三、MapReduce优化

  1. 任务调度

  I/O 方面:Hadoop 会尽量将 Map 任务分配给 InputSplit 所在的机器,以减少网

  络 I/O 的消耗。

  2.数据预处理与 InputSplit 的大小

  合理地设置 block块大小是很重要的调节方式。除此之外,也可以通过合理地

  设置 Map 任务的数量来调节 Map 任务的数据输入。

  3. Map 和 Reduce 任务的数量

  当 Reduce 任务的数量是任务槽的 1.75 倍时,执行速度快的机器可以获得更多

  的 Reduce 任务,因此可以使负载更加均衡,以提高任务的处理速度。

  4. Combine 函数

  MapReduce 框架运行用户写的 combine 函数用于本地合并,这会大大减少网

  络 I/O 操作的消耗

  四、spark集群运算的模式

  Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,目前能很好的运行在 Yarn和 Mesos 中,当然 Spark 还有自带的 Standalone 模式,对于大多数情况 Standalone 模式就足够了,如果企业已经有 Yarn 或者 Mesos 环境,也是很方便部署的。

  standalone(集群模式):典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现 HA

  on yarn(集群模式): 运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算

  on mesos(集群模式): 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算

  on cloud(集群模式):比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3

  五、spark streaming 读取kafka数据的两种方式

  这两种方式分别是:

  Receiver-base

  使用Kafka的高层次Consumer API来实现。receiver从Kafka中获取的数据都存储在Spark Executor的内存中,然后Spark Streaming启动的job会去处理那些数据。然而,在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制,让数据零丢失,就必须启用Spark Streaming的预写日志机制(Write Ahead Log,WAL)。该机制会同步地将接收到的Kafka数据写入分布式文件系统(比如HDFS)上的预写日志中。所以,即使底层节点出现了失败,也可以使用预写日志中的数据进行恢复。

  Direct

  Spark1.3中引入Direct方式,用来替代掉使用Receiver接收数据,这种方式会周期性地查询Kafka,获得每个topic+partition的最新的offset,从而定义每个batch的offset的范围。当处理数据的job启动时,就会使用Kafka的简单consumer api来获取Kafka指定offset范围的数据。

  以上五道大数据的经典面试题,各位小主先用着,待小编深度挖掘讲师的满满大数据技术干货库,为大家谋福利!