0


Hadoop面试题01

介绍下Hadoop?


Hadoop是一个分布式系统基础框架,主要为了解决海量数据存储和分析问题。

Hadoop核心组件:

Hadoop1.x :

  • HDFS(分布式文件系统,用于数据存储)
  • MapReduce(计算+资源调度)
  • Common(辅助工具,为其他Hadoop模块提供基础设施)

Hadoop2.x /3.x :

  • HDFS(分布式文件系统,用于数据存储)
  • MapReduce(计算)
  • Common(辅助工具,为其他Hadoop模块提供基础设施)
  • YARN(资源调度与集群资源管理,分担MapReduce的工作)

Hadoop的特点?


1. 高可靠性

    Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障时,也不会大量数据的丢失。

2. 高扩展性(动态扩展)

    在集群间分配任务数据,可方便的扩展数以千计的节点。

3. 高效性(并行计算)

    在MapReduce的思想下,Hadoop是并行工作,加快任务处理速度。

4. 高容错性

    能够自动将失败的任务重新分配。

说下Hadoop生态圈组件及其作用?


1Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。

2Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

3Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。

4Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表,并提供简单的sql 查询功能,可以将sql语句转换为MapReduce任务进行运行。

5Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。


Hadoop****主要分哪几个部分?他们有什么作用?


Hadoop主要组件如上图,主要是HDFS、MapReduce、YARN、Common

**HDFS **

    HDFS是一个文件系统,用于存储文件,通过目录树来定位文件。 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。 

    使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。 

**MapReduce **

    MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 

    MapReduce将计算过程分为两个阶段:**Map**和**Reduce **

            Map阶段并行处理输入数据 

            Reduce阶段对Map结果进行汇总 

**YARN **

    YARN在Hadoop中的作用,就是上面两个问题的答案。Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。 

**Common **

    Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。

Hadoop****集群工作时启动哪些进程?它们有什么作用?


1. NameNode

就是Master,Hadoop的主管、管理者

  1. 管理HDFS的名称空间;
  2. 配置副本策略;
  3. 管理数据块(Block)映射信息;
  4. 处理客户端读写请求。

2. DataNode

就是Slave。NameNode下达命令,DataNode执行实际的操作。

  1. 存储实际的数据块;
  2. 执行数据块的读/写操作

3. Secondary NameNode

Secondary NameNode并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。而是提供周期检查点和清理任务,帮助NN合并editslog,减少NN启动时间。

  1. 辅助NameNode,分担其工作量,如定期合并Fsimage和Edits,并推送给NameNode
  2. 在紧急情况下,可辅助恢复NameNode

4. ResourceManagerJobTracker****)

整个集群资源(内存、CPU等)的老大。负责集群中所有资源的统一管理和分配,它接受来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(即

ApplicationMaster)。

  1. 与客户端交互,处理来自客户端的请求。
  2. 启动和管理ApplicatinMaster,并在它运行失败时重新启动它。
  3. 管理NodeManager,接受来自NodeManager的资源管理汇报信息,并向NodeManager下达管理命令(比如杀死Contanier)等。
  4. 资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源(核心)。

5. NodeManagerTaskTracker****)

NodeManager是YARN中单个节点的代理(单个节点服务器资源老大),它需要与应用程序的 ApplicationMaster和集群管理者ResourceManager交互;它从ApplicationMaster上接收有关Container的命令并执行(比如启动、停止Contaner);向ResourceManager汇报各个Container运行状态和节点健康状况,并领取有关Container的命令(比如清理Container)。

NodeManager管理的是Container而不是任务,一个Container中可能运行着各种任务,但是对

NodeManager而言是透明的,它只负责Container相关操作,比如管理Container的生命周期,即启动Container、监控Container和清理Container等。

  1. 管理单个节点上的资源
  2. 处理来自ResourceManager的命令
  3. 处理来自ApplicationMaster的命令

6. DFSZKFailoverController

高可用时它负责监控NameNode的状态,并及时的把状态信息写入Zookeeper。它通过一个独立线程周期性的调用NameNode上的一个特定接口来获取NameNode的健康状态。ZKFC也有选择谁作为Active NameNode的权利,因为最多只有两个节点,选择策略比较简单(先到先得,轮换)。

7. JournalNode

高可用情况下存放NameNode的editlog文件。


在集群计算的时候,什么是集群的主要瓶颈?


磁盘IO(正解),CPU,内存,网络带宽


搭建Hadoop集群的xml文件有哪些?


  • core**-**site.xml
  • hdfs**-**site.xml
  • yarn**-**site.xml
  • mapred**-**site.xml

Hadoop****的默认块大小是多少?为什么要设置这么大?


**默认块大小: **

    Hadoop 2.7.2版本及之前默认64MB,Hadoop 2.7.3版本及之后默认128M 

**块大小: **

    HDFS的块设置太小,会**增加寻址时间**,程序一直在找块的开始位置,而且NameNode需要大量内存来存储元数据,不可取。 

    如果块设置的太大,从**磁盘传输数据的时间**会明显**大于定位这个块开始位置所需的时间**。导致程序在处理这块数据时,会非常慢。 

    如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小128MB。 

块的大小: 10ms100100M/s = 100M ,如图

HDFS块的大小设置主要取决于磁盘传输速率。


Hadoop****常见的压缩算法?


Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持。

*1Gzip***压缩 **

** 优点压缩率比较高,而且压缩****/**解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;大部分linux系统都自带gzip命令,使用方便。

** 缺点不支持****split。 **

** 应用场景**:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。例如说一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

*2Bzip2***压缩 **

** 优点:支持split;具有很高的压缩率,比gzip压缩率都高**;hadoop本身支持,但不支持native;在linux 系统下自带bzip2命令,使用方便。

** 缺点压缩****/解压速度慢不支持native。 **

** 应用场景**:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序 (即应用程序不需要修改)的情况 。

*3Lzo***压缩 **

** 优点压缩/解压速度也比较快,合理的压缩率;支持**split,是hadoop中最流行的压缩格式;可以在 linux系统下安装lzop命令,使用方便。

** 缺点压缩率比gzip要低一些hadoop**本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

** 应用场景**:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

*4Snappy***压缩 **

** 优点高速压缩速度和合理的压缩率**。

** 缺点不支持split;压缩率比gzip要低;hadoop本身不支持,**需要安装;

** 应用场景**:当Mapreduce作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格式;或者作为一个Mapreduce作业的输出和另外一个Mapreduce作业的输入。



本文转载自: https://blog.csdn.net/weixin_44758573/article/details/143331120
版权归原作者 牙疼啊 所有, 如有侵权,请联系我们删除。

“Hadoop面试题01”的评论:

还没有评论