今天来翻译一篇hadoop的面试题相关内容,巩固一些在数据领域的专业英语词汇和语法,也复习一下hadoop相关知识,平时看中文博客比较多,今天看看老外怎么评价hadoop的。
1. Hadoop面试问题
在这篇博客文章中,我们将覆盖前100的hadoop面试问题和它们的详细答案,并且基于面试问题,给出相应的使用场景。这些问题和答案,适合初学者,也适合有经验的开发者,我们也会分享在面试中如何介绍占比比较重的hadoop项目,一些hadoop实时的面试问题,将帮助你更容易地赢得面试。
在这篇hadoop博客中,我们将会介绍最新的hadoop面试问题,并且会基于不同的hadoop生态系统组件,比如hive hbase hdfs mapreduce yarn等。
我们已经将这些hadoop的面试问题和答案按照生态系统组件进行了分类,如下:
Hadoop Interview Questions
Hadoop HDFS Interview Questions
Hadoop MapReduce Interview Questions
2. Hadoop面试问题和答案
Hadoop面试问题这一部分,我们会覆盖Hadoop的基本问题和答案,适合初学者和有经验的开发者。这部分完了之后会讲下HDFS和YARN这两部分。
Q.1 什么是Hadoop?
Hadoop作为大数据问题的解决方案出现,是Apache项目的一部分,是Apache软件基金会赞助的。它是开源的软件框架,能够实现分布式存储和分布式处理大数据集的任务,开源意味着免费,我们可以任意按照自己的需求修改源代码。Hadoop框架让几千台普通机器之间运行程序成为可能。它的分布式文件系统提供了节点之间的数据快速传输。它也支持节点宕机时继续进行处理。
Hadoop提供了:
- 存储层:HDFS
- 批处理引擎:MapReduce
- 资源管理层:YARN
Q.2 我们为什么需要Hadoop?
Hadoop的出现是为了应对大数据的挑战,大数据的挑战是:
- 存储-当数据量很大时,存储这么大量的数据是相当困难的
- 安全-文件大小很大时,安全性也是一个挑战
- 数据分析-在大数据领域,很多时候我们不知道正在处理的是什么类型的数据,因此分析数据变得更加困难了
- 数据质量-在大数据领域,数据是非常混乱的,不一致的,不完全的
- 数据挖掘-使用强大的算法很难发现其中的模型和洞察
Hadoop是开源的软件框架,支持大数据分布式存储和分布式计算,是存储和处理大数据量的最佳解决方案,原因如下:
- 存储-Hadoop开源存储巨大的原始数据,不需要指定任何元数据
- 高扩展性-我们可以添加任意多的节点(hadoop2<=10000,hadoop3>=10000),从而显著地提高性能
- 可靠性-即使在节点挂掉的时候,也不会丢失数据,非常可靠
- 高可用-在hadoop里,即使节点挂掉,数据也可以被正常访问,不管是机器挂掉或者硬件坏了,我们都能够通过另一种方式访问数据
- 经济性-Hadoop运行在廉价的普通机器上
————-2022.03.27————-
Q.3 Hadoop有哪些核心组件
Hadoop是开源的软件框架,解决分布式存储和大数据集的处理的问题。核心组件是HDFS、MapReduce和YARN。
- HDFS-Hadoop Distributed File System(HDFS)是Hadoop的主要存储系统,HDFS运行在非常普通的硬件上,存储很大的文件,它的原理就是存储少了的大文件,而不是大量的小文件,并且非常可靠,即使在节点挂掉的时候,应用程序也可以并行地高吞吐地访问它们。
- MapReduce-MapReduce是Hadoop的处理层,你可以写一个程序处理大的结构化和非结构化的存储在HDFS上的数据。MapReduce并行地处理大数据量,它通过拆分Job为一系列的task进行处理。在Hadoop中,MapReduce把处理过程分为两个阶段:Map和Reduce,Map是处理的第一阶段,在这里编写所有的复杂逻辑,Reduce是处理的第二阶段,它负责轻量级的汇总或者集合操作。
- YARN-YARN是Hadoop中的处理框架,它提供资源管理功能,并且允许多种数据处理引擎,比如,实时流、数据科学、批处理。
Q.4 Hadoop有哪些特点

- 开源-Hadoop是Apache开源软件框架,意味着它是免费的,并且你可以按照你的需求修改源码。
- 分布式处理-HDFS将数据分布式存储在集群的不同机器上,MapReduce在集群的不同机器间进行并行处理。
- 容错性-Hadoop是高容错的,默认情况下,单个机器中每个block块在集群的其他机器上都有3个备份,我们可以根据需要更改这个数量,因此如果某台机器宕机了,我们可以从其他机器上恢复,框架自动实现节点或任务的恢复。
- 可靠性-即使机器失败了,它依然提供数据存储服务
- 高可用性-即使节点失败,数据也是可用并且可访问的,在hadoop中,当一台机器失败或者宕机了,我们依然可用通过另一种方式访问数据。
- 扩展性-hadoop是可扩展的,所以我们可以添加一台新的硬件机器到集群中
- 经济性-hadoop运行在廉价的普通机器上,我们不需要为他定制机器
- 易用性-客户端节点不需要处理分布式计算,框架考虑了所有的事情,所以使用起来很方便
————-2022.04.03————-
Q.5 对比下Hadoop和RDBMS
Hadoop是未来的数据库,因为它能够存储和处理大数据量,这是传统数据库不能实现的,Hadoop和RDBMS有以下不同点:
- 架构-传统数据库有ACID事物特性,然而Hadoop是分布式计算处理框架,有两大核心组件HDFS和MapReduce
- 数据验收-RDBMS只接收结构型数据,而Hadoop可以接收结构型和非结构型数据,它可以存储所有的东西,并且没有数据丢失,这是它最大的特性
- 扩展性-RDBMS传统型数据库提供了垂直性的扩展能力,因此如果数据增长了,我们必须增加额外的系统配置来应付。然而Hadoop提供了水平扩展能力,因此我们可以添加1台或者多台机器到集群中,就可以满足额外的数据存储需求。
- OLTP(real-time data processing)和OLAP-传统数据库支持OLTP,Hadoop不支持OLTP,Hadoop支持大批量的数据处理工作流(OLAP)
- 开销-有软件许可证,因此需要为软件付费,但是Hadoop是完全开源的,我们不需要付任何费用
————-2022.04.05————-
针对新手的Hadoop面试问题
Q.6 Hadoop运行的几种模式
有三种模式:
- 本地(单机)模式:默认作为一个java进程运行在单机、非分布式的模式下。本地模式的文件输入输出操作使用的是本地文件系统,也可用于调试,不支持HDFS的使用,因此,在这种模式下,不需要修改指定的自定义配置;
- 伪分布式:类似单机模式,Hadoop伪分布式运行在单台机器上,不同的是,此模式下,每个后台进程都是单独的进程,需要修改至少4个配置文件,这样的话,所以进程都运行在这套机器上,Master和Slave都在这台机器上运行;
- 完全分布式:在这种模式下,所以的进程运行在不同的机器上,组成一个集群,因此,Master和Slave允许在不同机器上启动。
Q.7 Standalone有什么特点?
默认情况下,Hadoop运行在单节点、非分布式模式下,只有一个Java进程,本地模式使用了本地文件系统作为文件的输入输出,也可以进行调试,不支持HDFS分布式文件系统。该模式适合开发时进行测试,因此,在这个模式下,不需要自定义配置文件,配置文件如下:
1 | core-site.xml |
Q.8 伪分布式有什么特点?
运行在单个机器上,区别是每个Hadoop后台进程均运行在不同的Java进程里,需要修改至少4个配置文件,所有进程均运行在单节点上,Master和Slave也是。
伪分布式适合开发和测试。
Q.9 完全分布式有什么特点?
在这个模式下,所以进程均运行在不同节点上,组成一个集群,Master和Slave允许在不同的节点上。
主要在生产环境使用这种模式,n台机器组成一个集群,Hadoop进程运行在一组机器上,一台机器作为NameNode节点运行,其他机器作为DataNode节点运行,因此,NodeManager在跟每一个DataNode在一起,并且在每台DataNode节点上负责任务的执行。
ResourceManager负责管理这些NodeManager,ResourceManager接收这些NodeManager的请求,然后根据这些NodeManager的请求发送对应的响应。
————-2022.04.10————-
Q.10 Hadoop的配置文件有哪些?
core-site.xml-包含Hadoop的核心配置,比如IO HDFS MapReduce,它用hostname和port,最经常用的端口是9000.
1
2
3
4
5
6<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>hdfs-site.xml-包含HDFS后台进程的配置,也有指定hdfs默认block块副本和权限的检查。
1
2
3
4
5
6<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>mapred-site.xml-这个文件,我们说它是专门为MapReduce框架服务的。我们可以通过
mapreduce.framework.name指定框架的名称。1
2
3
4
5
6<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>yarn-site.xml-这个文件是配置ResourceManager和NodeManager的
1
2
3
4
5
6
7
8
9<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name> <value>
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
</configuration>
Q.12 Hadoop的限制是啥?
各种限制如下:
1.小文件问题
Hadoop不适合小文件
在Hdfs系统中最大的问题就是小文件,小文件明显小于Hdfs的block块大小(默认128M),如果你存储大量的这类小文件,Hdfs不能处理这么多的小文件,hdfs的工作方式就是存储少量的大文件,而不是大量的小文件,如果有人存储巨量的小文件,这将给NameNode带来很大的负担,让它处于过载状态。NameNode存储Hdfs的命名空间,Har文件,Sequence文件,因此Hbase克服了这个问题。处理速度
由于有并行和分布式算法,MapReduce可以处理大量数据,MapReduce有2个阶段task:Map和Reduce,MapReduce需要许多时间处理这些task,因此增加了延迟,由于数据是分布式的,在整个集群内处理,因此这需要时间来降低处理速度。仅支持批处理
仅支持批处理,不能处理流式数据,因此性能方面会慢一点,MapReduce框架没有最大限度地利用集群的内存资源迭代处理
Hadoop处理迭代任务是不高效的,不支持循环处理类数据流,它采用stage的链条处理方式,前一个stage的数据,即是下一个stage的输入。天生易受攻击-Hadoop完全是由java写的,java是世界上最受欢迎的语言之一,因此,java被网络犯罪分子利用得最为严重,因此也有许多安全漏洞
安全-Hadoop正在挑战管理复杂的应用程序,缺少在存储和网络方面的加密方案,这也是大家最关心的一点,Hadoop支持Kerberos认证,但是很难去管理。
这篇文章太长,翻译下来需要时间,我会不定期更新,敬请关注。
Keep reading, Keep writing, Keep coding.
欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
欢迎交流,这是我的微信:
一起学习,一起进步。
