大数据面试(hadoop)

第3章 Hadoop基础
3.1 hadoop支持三种调度器
答:
(1)先进先出的调度器:最先的 hadoop 采用的是 FIFO(默认-先进先出的)调度器调度用户提交的做业。做业按照提交的顺序被调度,做业必须等待轮询到本身才能运行。 可是考虑到公平在多用户之间分配资源,设置了做业的优先级功能,可是不支持抢占式的。
(2)公平调度器:公平调度器的目标是让每个用户公平的共享集群能力,充分的利用闲置的任务槽,采用“让用户公平的共享集群”的方式分配资源。做业放在做业池之中,每一个用户拥有本身的做业池。提交的做业越多并不会所以得到更多的资源,公平调度器支持抢占式的机制,一个做业池中若没有公平的共享资源,则会将多余的资源空出来。
(3)容量调度器:集群中不少的队列组成的,这些队列具备必定的层次结构,每一个队列都有必定的容量。每一个队列的内部支持 FIIFO 方式。本质上容量调度器容许用户或则组织模拟出一个使用 FIFO 调度策略的独立 MapReduce 集群
3.2 hadoop 二级排序
hadoop 默认的是对 key 进行排序,若是想要再对 value 进行排序,那么就要使用:二级排序 二级排序的方式: 1:将 reduce 接收到的 value-list 的值缓存,而后作 reduce 内排序,再写出,这样排序速度快一些,因为value-list 的数据可能很庞大,可能会形成内存的溢出 2:将值的一部分或则整个部分加入 key ,生成一个合并的能够。生成组合 key 的过程很简单。咱们须要先分析一下,在排序时须要把值的哪些部分考虑在内,而后,把它们加进 key 里去。随后,再修改 key 类的 compareTo 方法或是 Comparator 类,确保排序的时候使用这个组合而成的 key。
3.3 请简述 hadoop 怎样实现二级排序(对 key 和 value 双排序)
第一种方法是,Reducer 将给定 key 的全部值都缓存起来,而后对它们在 Reduce 内部作一个内排序。可是,因为 Reducer 须要缓存给定 key 的全部值,数据量多的话可能会致使内存不足。
第二种方法是,将值的一部分或整个值键入到原始 key 中,从新组合成一个新的 key 。这两种方法各有各的特色,第一种方法编写简单,可是须要较小的并发度,数据量大的话可能会形成内存耗尽卡死的状态。 第二种方法则是将排序的任务交给 MapReduce 框架进行 shuffle,更符合 Hadoop/Reduce 的设计思想。
3.4 hadoop 框架怎么来优化
答:能够从不少方面来进行:好比 hdfs,mapreduce,yarn 的 job 调度,hbase,hive 能够优化的有太多地方了,具体要在哪里优化只能看你数据的特色了,根据真实场景来判断。
3.5 hadoop 中经常使用的数据压缩算法
答:Lzo,Gzip,Default,Snapyy 若是要是对数据进行压缩的话最好将数据转化一下:quenceFile 或者 Parquet File(spark)
3.6 搭建 hadoop 集群 , master 和 slaves 都运行哪些服务
答:master 是主节点,slaves 是从节点
3.7 hadoop 运行原理
答:hadoop 的主要由两部分组成,HDFS 和 mapreduce,HDFS 就是把数据进行分块存储。 Mapreduce 的原理就是使用 JobTracker 和 TaskTracke r来进行做业的执行。Map 就是将任务展开,reduce 是汇总处理后的结果。简单的来讲就是提交一个 jar 包,这个时候须要 mapreduce 来处理。
3.8 如何确认 hadoop 集群的健康情况
答:有完善的集群监控体系(ganglia,nagios) Hdfs dfsadmin –report Hdfs haadmin –getServiceState nn1node

3.9 Hadoop 做者 答案 Dlinux

a) Martin Fowler b) Kent Beck c) Doug cutting
3.10下列哪项一般是集群的最主要瓶颈 答案 Cios

a) CPU b)网络 c)磁盘 d)内存
解析:首先集群的目的是为了节省成本,用廉价的pc机,取代小型机及大型机。小型机和大型机有什么特色?
1.cpu处理能力强
2.内存够大
因此集群的瓶颈不多是a和d
3.网络是一种稀缺资源,可是并非瓶颈。
4.因为大数据面临海量数据,读写数据都须要io,而后还要冗余数据,hadoop通常备3份数据,因此IO就会打折扣。web

3.11下列哪一个是 Hadoop 运行的模式 答案 ABC算法

a )单机版 b) 伪分布式 c) 分布式sql

3.12 Cloudera 提供哪几种安装 CDH 的方法 答案 ABCD数据库

a )Cloudera manager b) Tar ball c) Yum d) Rpm
3.13 判断题(此部分来源于网络筛选):
79. Ganglia 不只能够进行监控,也能够进行告警。( X )
80. Block Size 是不能够修改的。( X )
81. Nagios 不能够监控 Hadoop 集群,由于它不提供 Hadoop 支持。( X )
82. 若是 NameNode 意外终止, SecondaryNameNode 会接替它使集群继续工做。( X )
83. Cloudera CDH 是须要付费使用的。( X )
84. Hadoop 是 Java 开发的,因此 MapReduce 只支持 Java 语言编写。( X )
85. Hadoop 支持数据的随机读写。(X )
86. NameNode 负责管理 metadata, client 端每次读写请求,它都会从磁盘中读取或则 会写入 metadata 信息并反馈 client 端。(X )
87. NameNode 本地磁盘保存了 Block 的位置信息。(X )
88. DataNode 经过长链接与 NameNode 保持通讯。( X )
89. Hadoop 自身具备严格的权限管理和安全措施保障集群正常运行。(X )
90. Slave节点要存储数据,因此它的磁盘越大越好。(X )
91. hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。( X)
92. Hadoop 默认调度器策略为 FIFO( X)
93. 集群内每一个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。(X )
94. 由于 HDFS 有多个副本,因此 NameNode 是不存在单点问题的。(X )
95. 每一个 map 槽(进程)就是一个线程。(X )
96. Mapreduce 的 input split 就是一个 block。(X )
97. NameNode的默认 Web UI 端口是 50030,它经过 jetty 启动的 Web 服务。(X )
98. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置全部 Hadoop 守护线程的内存。它默认是200 GB。( X )
99. DataNode 首次加入 cluster 的时候,若是 log中报告不兼容文件版本,那须要 NameNode执行“Hadoop namenode -format ”操做格式化磁盘。(X )
3.1四、Hadoop是什么
一、Hadoop是什么
Hadoop是Apache软件基金会的一个开源项目,是一个分布式处理海量数据的软件框架。 它为开发者提供了一个分布式系统的基础架构,用户能够在不了解分布式系统的底层细节的状况下开发分布式的应用,充分利用由大量廉价硬件设备组成的集群的强大功能,实现存储和高速运算。Hadoop项目中包括一个分布式的文件系统HDFS,一个分布式的并行编程框架MapReduce以及包括Hive、HBase、Mahout、Pig、Zookeeper、Avro、Chukwa等周边生态系统。
二、为何使用Hadoop?(Why use Hadoop)
提高单台计算机速度是过去的办法,慢慢走到了极端,CPU的速度不可能再大幅度提高了。人们一直但愿经过增长计算机数量提高运算。
例如:在过去,计算机运算的效率依靠的是CPU的速度,随着对计算机体系结构的不断改善和研究,微型机CPU的处理速度基本达到稳定值了。也就是说过去计算速度依靠的是“我的英雄主义”。而如今呢?经过增长计算机数量(专业术语:集群)并行运算以提高运算和数据处理速度。可见,如今计算速度依靠的是“团体做战主义”。若是过去一台计算机处理一批数据须要24小时,如今经过同时在240台计算机上并行处理数据,仅仅须要10分钟。
三、Hadoop框架的做用
它为应用程序提供了一组既稳定又可靠的接口。Hadoop计算框架的目的是构建一个具备高可靠性和良好扩展性的分布式操做系统。编程

四、Hadoop的特性(The feature of Hadoop)
(1)Hadoop是可靠的,若是计算元素或者存储数据失败,它能够启动和维护多个工做数据副本,确保失败的节点从新对数据进行分布式处理。
(2)Hadoop是高效的,它的工做方式是并行的,采用这种方式加快处理数据的速度。
(3)Hadoop是可伸缩的,能够处理不一样级别的数据,大到可以处理PB级的数据。(1PB=1000TB)缓存

五、Hadoop的应用前景(The application prospect of Hadoop)
云计算是IT界的第三次浪潮。在此次浪潮中,各大厂商面临着极大的挑战–他们须要从TB级乃至PB级数据中挖掘出有用的数据,并对这些海量的数据进行更快捷、高效率的处理。因而IT厂商推出了本身的云计算平台。Google的MapReduce、GFS、BigTable成为互联网的领头羊,然而它的技术是保密的,Google公司并无开源MapReduce的
实现细节。Amazon的AWS、微软的Azure和IBM的蓝云等也是云计算的典型表明,但它们都是商业性平台,对想要继续研究和发展云计算技术的人员或科研团队来讲,没法得到更多的了解。
Hadoop是Google云计算平台的开源实现(山寨版),愈来愈多的公司和组织选择使用Hadoop开源项目做为其解决方案。
Hadoop能够应用到:搜索引擎、广告优化、机器学习。
在将来,企业应用需求要求有更强的计算能力、更普遍的数据分布、更低的耦合性、更强的稳定性以及更灵活的可扩展性,采用传统的集群模式在这些要求面前显得力不从心了。若是采用分布式技术,就能够运用本身已有的资源,组织更加庞大的计算机网络、更大的集群来知足各行业对应用的需求,而Hadoop就是一个至关成功的分布式计算平台。
现代社会的信息量飞速增加,在这些信息里包含着大量的数据,主要有我的数据和工业数据。到2020年,预计数字信息超过1/3的内容将驻留在云平台或者借助云平台来进行处理数据。那么,如何高效地存储和管理这些数据,又如何分析这些数据呢?能够采用Hadoop系统,它在面对存储、管理分析这些数据时,采用分布式存储方式来存储数据,提升了读/写数据的速度并扩大了数据的存储容量;采用MapReduce来整合分布式文件系统的数据,使得分析和处理数据达到了高效率;同时Hadoop采用存储冗余数据的方式来保证数据的安全性。
起源于Apache基金会项目,随着愈来愈多的用户加入,扩大了使用面,对其进一步开发和完善,到如今已经造成一个强大的生态系统。从2009年开始,大力发展云计算和大数据,Hadoop做为海量数据分析的最佳解决方案,受到愈来愈多IT厂商的关注,使得Hadoop发展飞速,出现了Hadoop的商业版以及相匹配的Hadoop产品,包括软件和硬件产品。
国内淘宝、中国移动、金山、腾讯、百度、网易、新浪等。淘宝的Hadoop系统用于存储并处理电子商务交易的相关数据;中国移动研究院基于Hadoop的“大云”系统用于对数据进行分析并对外提供服务;金山专一安全云;腾讯提出“腾云”、WebQQ;百度采用Hadoop进行搜索日志的分析和网页数据的挖掘工做。
3.15 Hadoop数据倾斜问题(1.5.2)
一、数据倾斜
数据倾斜在MapReduce编程模型中十分常见,用最通俗易懂的话来讲,数据倾斜无非就是key分布式不均匀致使大量的相同key被partition分配到一个分区里,形成了’一我的累死,其余人闲死’的状况。
二、数据倾斜发生时的现象:
(1)绝大多数task执行得都很是快,但个别task执行的极慢。
(2)本来能正常执行的Spark做业,某天忽然爆出OOM(内存溢出)异常。观察异常栈,是咱们写的业务代码形成的安全

三、数据倾斜发生的原理 :
在进行shuffle的时候,必须将各个节点上相同的Key拉取到某个节点上的一个task来进行处理,好比按照key进行聚合或者join操做。若是某个key对应的数据量特别大的话,会发生数据倾斜。好比大部分key对应的10条数据,但个别key却对应了100万条数据,那么大部分task会只分配到10条数据,而个别task可能会分配了100万数据。整个spark做业的运行进度是由运行时间最长的那个task决定的。
所以出现数据倾斜的时候,spark做业看起来会运行得很是缓慢,甚至可能由于某个task处理的数据量过大致使OOM。
四、解决方
(1)增长jvm内存,这适用于第一种状况(惟一值很是少,极少数值有很是多的记录值(惟一值少于几千)),这种状况下,每每只能经过硬件的手段来进行调优,增长jvm内存能够显著的提升运行效率。
(2)增长reduce的个数,这适用于第二种状况(惟一值比较多,这个字段的某些值有远远多于其余值的记录数,可是它的占比也小于百分之一或千分之一),咱们知道,这种状况下,最容易形成的结果就是大量相同key被partition到一个分区,从而一个reduce执行了大量的工做,而若是咱们增长了reduce的个数,这种状况相对来讲会减轻不少,毕竟计算的节点多了,就算工做量仍是不均匀的,那也要小不少。
(3)自定义分区,这须要用户本身继承partition类,指定分区策略,这种方式效果比较显著。
(4)从新设计key,有一种方案是在map阶段时给key加上一个随机数,有了随机数的key就不会被大量的分配到同一节点(小概率),待到reduce后再把随机数去掉便可。

(5)使用combinner合并,combinner是在map阶段,reduce以前的一个中间阶段,在这个阶段能够选择性的把大量的相同key数据先进行一个合并,能够看作是local reduce,而后再交给reduce来处理,这样作的好处不少,即减轻了map端向reduce端发送的数据量(减轻了网络带宽),也减轻了map端和reduce端中间的shuffle阶段的数据拉取数量(本地化磁盘IO速率),推荐使用这种方法。
3.16 ETL是哪三个单词的缩写(1.3.22)
Extraction-Transformation-Loading的缩写,中文名称为数据提取、转换和加载。
3.17 集群的监控用的什么
Cloudera Manager
3.18 有没有用过HDP CDH
用过CDH , 没有用过HDP
3.19 有没有使用OZ调度hadoop任务
没有用过
3.20 cdh版本多少
CDH 6.0.1 hadoop3.0.0 spark-2.2.0 hbase-2.0.0
CDH5.12.0 hadoop-2.6.0 spark-1.6.0 hbase-1.2.0
3.21 什么是kdd(Knowledge-Discovery in Databases)? 数据挖掘与知识发现
解析:知识发现(KDD : Knowledge Discovery in Database )是从数据集中识别出有效的、新颖的、潜在有用的,以及最终可理解的模式的非平凡过程。
3.22 列举几个hadoop生态圈的组件并作简要描述

Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper能够实现同步服务,配置维护,命名服务。
Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS做为其存储系统.
Hive:基于Hadoop的一个数据仓库工具,能够将结构化的数据档映射为一张数据库表,并提供简单的sql 查询功能,能够将sql语句转换为MapReduce任务进行运行。
Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也能够将HDFS的数据导进到关系型数据库中。
3.23 Hadoop 中 jobTracker 和 taskTraker 之间的区别是什么?
JobTracker 是一个 master 服务,软件启动以后 JobTracker 接收 Job,负责调度 Job
的每个子任务 task 运行于 TaskTracker 上,并监控它们,若是发现有失败的 task 就从新运行它。通常状况应该把 JobTracker 部署在单独的机器上。
TaskTracker 是运行在多个节点上的 slaver 服务。TaskTracker 主动与 JobTracker 通讯,
接收做业,并负责直接执行每个任务
3.24 Hadoop 中经过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,Hadoop采用何种机制应对这个状况?
答: 推测执行机制是 Hadoop 对“拖后腿”的任务的一种优化机制,当一个做业的某些任务运行速度明显慢于同做业的其余任务时,Hadoop 会在另外一个节点 上为“慢任务”启动一个备份任务,这样两个任务同时处理一份数据,而 Hadoop 最终会将优先完成的那个任务的结果做为最终结果,并将另外一个任务杀掉。
3.25 说说你对Hadoop生态的认识。
hadoop生态主要分为三大类型,1)分布式文件系统,2)分布式计算引擎,3)周边工具
1)分布式文件系统:HDFS
2)分布式计算引擎:Spark,MapReduce
3)周边工具:如zookeeper,fume,hive,hbase,sqoop,kafka等
3.26 Hadoop会有哪些重大故障,如何应对?至少给出5个

一、 namenode 单点故障:经过 zookeeper 搭建 HA 高可用,可自动切换 namenode。 二、ResourceManager单点故障:可经过配置YARN的HA,并在配置的namenode上手动启动ResourceManager做为Slave,在 Master 故障后,Slave 会自动切换为Master。 三、reduce阶段内存溢出:是因为单个reduce任务处理的数据量过多,经过增大reducetasks数目、优化partition 规则使数据分布均匀进行解决。 四、datanode内存溢出:是因为建立的线程过多,经过调整linux的maxuserprocesses参数,增大可用线程数进行解决。 五、 集群间时间不一样步致使运行异常:经过配置内网时间同步服务器进行解决。