Hadoop面试题



亲爱的读者们,这些Hadoop面试题专为帮助您了解在Hadoop面试中可能遇到的问题类型而设计。根据我的经验,优秀的面试官很少会预先计划好要问哪些具体问题,通常问题会从该主题的一些基本概念开始,然后根据后续讨论和您的回答继续深入。

它显示运行Hadoop集群的守护进程的状态。输出会显示namenode、datanode、secondary namenode、Jobtracker和Task tracker的状态。

步骤1. 点击stop-all.sh,然后点击start-all.sh 或者

步骤2. 输入sudo hdfs (按回车),su-hdfs (按回车),/etc/init.d/ha (按回车),然后/etc/init.d/hadoop-0.20-namenode start (按回车)。

Hadoop可以运行的三种模式是:

  1. 独立(本地)模式
  2. 伪分布式模式
  3. 完全分布式模式

/etc/init.d指定了守护进程(服务)的存放位置,或查看这些守护进程的状态。这是非常Linux特有的,与Hadoop无关。

它无法成为Hadoop集群的一部分。

当Namenode宕机时,您的集群就会停止运行,这是因为Namenode是HDFS中的单点故障。

大数据只不过是如此庞大和复杂的数据集合,以至于使用现有的数据库管理工具或传统数据处理技术来捕获、存储、处理、检索和分析它变得非常繁琐。

大数据的三个特征是:

 

体量(Volume) - Facebook每天生成500+TB的数据。

速度(Velocity) - 每天分析200万条记录以找出损失的原因。

多样性(Variety) - 图片、音频、视频、传感器数据、日志文件等。真实性(Veracity):数据中的偏差、噪声和异常。

有效的大数据分析提供了许多业务优势,因为组织将了解哪些领域需要关注,哪些领域不那么重要。大数据分析提供了一些早期关键指标,可以防止公司遭受巨大损失,或帮助抓住绝佳机会!精确的大数据分析有助于决策!例如,如今人们在购买任何产品或服务之前,都非常依赖Facebook和Twitter。这一切都归功于大数据的爆发。

每天都有大量非结构化数据被导入我们的机器中。主要的挑战不是将大型数据集存储在我们的系统中,而是在组织中检索和分析大数据,这些数据分布在不同位置的不同机器上。在这种情况下,就需要Hadoop。Hadoop能够非常快速且经济高效地分析不同位置不同机器上的数据。它使用MapReduce的概念,能够将查询分成小部分并并行处理它们。这也被称为并行计算。为什么Hadoop如此受欢迎这个链接详细解释了Hadoop为什么如此受欢迎!

传统RDBMS用于事务系统来报告和存档数据,而Hadoop是一种将海量数据存储在分布式文件系统中并进行处理的方法。当您想从大数据中查找一条记录时,RDBMS很有用;而当您想一次性获取大数据并在稍后对其进行分析时,Hadoop很有用。

假设您有一个存储在系统中的文件,由于某些技术问题,该文件被破坏了。那么就没有机会找回该文件中存在的数据。为了避免这种情况,Hadoop在HDFS中引入了容错功能。在Hadoop中,当我们存储文件时,它会自动复制到另外两个位置。因此,即使一两个系统崩溃,文件仍然可以在第三个系统上访问。

HDFS使用商用硬件(具有平均配置的系统),这些系统随时都可能发生崩溃。因此,为了使整个系统高度容错,HDFS会将数据复制并存储在不同位置。HDFS上的任何数据至少存储在3个不同位置。因此,即使其中一个损坏,另一个由于某种原因暂时不可用,也可以从第三个位置访问数据。因此,不会丢失数据。这个复制因子帮助我们实现Hadoop的容错特性。

不会,计算只会在原始数据上进行。主节点会知道哪个节点准确地拥有该特定数据。如果其中一个节点没有响应,则认为它已失败。只有在这种情况下,才会在第二个副本上进行所需的计算。

Namenode是运行JobTracker的主节点,包含元数据。它维护和管理存在于datanode上的数据块。它是一台高可用性机器,也是HDFS中的单点故障。

不是。Namenode永远不可能是商用硬件,因为整个HDFS都依赖于它。它是HDFS中的单点故障。Namenode必须是一台高可用性机器。

Datanode是部署在每台机器上的从节点,提供实际的存储空间。它们负责为客户端提供读写请求服务。

与跨多个文件分散的小量数据相比,HDFS更适合于单个文件中大量的数据集。这是因为Namenode是一个非常昂贵的高性能系统,因此不应通过为多个小文件生成的过多元数据来占用Namenode中的空间。因此,当单个文件中存在大量数据时,namenode将占用较少的空间。因此,为了获得优化的性能,HDFS支持大型数据集而不是多个小文件。

JobTracker是一个在namenode上运行的守护进程,用于提交和跟踪Hadoop中的MapReduce作业。它将任务分配给不同的TaskTracker。在一个Hadoop集群中,只有一个JobTracker,但有很多TaskTracker。它是Hadoop和MapReduce服务的单点故障。如果JobTracker宕机,所有正在运行的作业都将停止。它根据TaskTracker发送的心跳来决定分配的任务是否已完成。

TaskTracker也是一个在datanode上运行的守护进程。TaskTracker管理从节点上单个任务的执行。当客户端提交作业时,JobTracker将初始化作业,划分工作并将其分配给不同的TaskTracker以执行MapReduce任务。在执行此操作时,TaskTracker将通过发送心跳与JobTracker同时通信。如果JobTracker在指定时间内没有从TaskTracker收到心跳,则它将假设TaskTracker已崩溃,并将该任务分配给集群中的另一个TaskTracker。

心跳是一个指示其处于活动状态的信号。Datanode向Namenode发送心跳,TaskTracker向JobTracker发送心跳。如果Namenode或JobTracker没有收到心跳,它们将判断Datanode出现问题或TaskTracker无法执行分配的任务。

“块”是可以读取或写入的最小数据量。在HDFS中,默认块大小为64 MB,而Unix/Linux中的块大小为8192字节。HDFS中的文件被分解成块大小的块,这些块作为独立单元存储。与磁盘块相比,HDFS块很大,特别是为了最大限度地减少查找的成本。如果特定文件为50 MB,HDFS块是否仍然会消耗64 MB作为默认大小?不会!64 MB只是一个存储数据的单元。在这种特定情况下,只有50 MB会被HDFS块消耗,而14 MB将空闲以存储其他内容。它是主节点以高效的方式进行数据分配。

一个文件可以大于网络中任何单个磁盘的容量。没有任何要求规定文件的各个块必须存储在同一磁盘上,因此它们可以利用集群中的任何磁盘。将抽象单元设为块而不是文件,简化了存储子系统。块提供了容错和可用性。为了防止块损坏以及磁盘和机器故障,每个块都会被复制到少量物理上分离的机器(通常是三台)。如果一个块不可用,则可以从另一个位置读取副本,而客户端对此是透明的。

Hadoop有自己的索引方式。根据块大小,一旦数据存储完毕,HDFS将继续存储数据的最后一部分,这部分数据会指明数据的下一部分存储位置。

是的,JobTracker和TaskTracker位于不同的机器上。原因是JobTracker是Hadoop MapReduce服务的单点故障。如果它宕机,所有正在运行的作业都将停止。

通信方式是SSH。

机架是一个存储区域,所有DataNode都放在一起。这些DataNode可以物理上位于不同的位置。机架是存储在单个位置的DataNode的物理集合。单个位置可以有多个机架。

Secondary NameNode不断地从NameNode的RAM中读取数据并将其写入硬盘或文件系统。它不是NameNode的替代品,因此如果NameNode发生故障,整个Hadoop系统将崩溃。

NameNode接收输入并将其分成几部分,并将它们分配给DataNode。这些DataNode处理分配给它们的task,并生成键值对,并将中间输出返回给Reducer。Reducer收集所有DataNode的这些键值对,并将它们组合起来,生成最终输出。

通过MapReduce程序,读取文件时可以通过分割其块来读取。但在写入时,由于系统还不知道传入的值,因此无法应用MapReduce,也不可能进行并行写入。

使用“-distcp”命令进行复制。

hadoop fs -setrep -w 2 apache_hadoop/sample.txt

机架感知是指NameNode如何根据机架定义来决定放置块的方式。Hadoop将尝试最小化同一机架内DataNode之间的网络流量,只有在必要时才会联系远程机架。NameNode能够通过机架感知来控制这一点。

core-default.xml

hadoop dfsadmin -report

在这种情况下,您不需要关闭和/或重启整个集群。

首先,将新节点的DNS名称添加到主节点上的conf/slaves文件。

然后登录到新的从节点并执行:

$ cd path/to/hadoop

$ bin/hadoop-daemon.sh start datanode

$ bin/hadoop-daemon.sh start tasktracker

然后发出hadoop dfsadmin -refreshNodes和hadoop mradmin -refreshNodes命令,以便NameNode和JobTracker知道已添加了附加节点。

Hadoop job –kill jobid

不会。在安全模式下,块的复制是被禁止的。NameNode等待所有或大部分DataNode报告其块。

文件一旦创建就会出现在命名空间中。如果一个写入器正在向文件写入数据,而另一个客户端重命名文件本身或其任何路径组件,那么原始写入器将在写入当前块完成时或关闭文件时收到IOException。

Hadoop提供“下线”功能来停用一组现有的DataNode。要停用的节点应包含在*排除文件*中,排除文件的名称应指定为配置参数**dfs.hosts.exclude**。

可以通过随时编辑配置或排除文件并重复**-refreshNodes**命令来终止下线过程。

可以。例如,要列出所有以字母a开头的文件,可以使用带*通配符的ls命令:

hdfs dfs –ls a*

HDFS只支持独占写入。

当第一个客户端联系NameNode打开文件进行写入时,NameNode会授予该客户端创建此文件的租约。当第二个客户端尝试打开同一个文件进行写入时,NameNode将看到该文件的租约已授予另一个客户端,并将拒绝第二个客户端的打开请求。

NameNode没有任何可用的DataNode。

Combiner是一个“迷你reduce”过程,它只对Mapper生成的数据进行操作。Combiner将接收作为输入由给定节点上的Mapper实例发出的所有数据。然后将Combiner的输出发送到Reducer,而不是Mapper的输出。

Hadoop将生成5个分片,如下所示:

  • - 64K文件1个分片
  • - 65MB文件2个分片
  • - 127MB文件2个分片

它将在另一个TaskTracker上重新启动该任务,并且只有当任务失败超过四次(默认设置,可以更改)时,它才会终止该作业。

HDFS不擅长处理大量的小文件。因为HDFS中的每个文件、目录和块都在NameNode的内存中表示为一个对象,每个对象大约占用150字节,所以1000万个文件(每个文件使用一个块)将占用大约3GB的内存。当我们处理10亿个文件时,NameNode的内存需求将无法满足。

如果一个节点运行速度似乎很慢,主节点可以冗余地执行同一任务的另一个实例,并采用第一个输出。这个过程称为推测执行。

可以,通过Apache Kafka、Apache Flume和Apache Spark等技术,可以进行大规模流处理。

随着越来越多的文件被添加,NameNode会创建大型的编辑日志,这可能会大大延迟NameNode的启动,因为NameNode会重新应用所有编辑。检查点是一个将fsimage和编辑日志压缩成新的fsimage的过程。这样,NameNode就可以直接从fsimage加载最终的内存状态,而不是重放潜在的无限编辑日志。这是一个更高效的操作,可以减少NameNode的启动时间。

下一步是什么?

接下来,您可以回顾一下您之前完成的与该主题相关的作业,并确保您可以自信地谈论它们。如果您是应届毕业生,面试官并不期望您能回答非常复杂的问题,而是要确保您的基础概念非常扎实。

其次,如果您无法回答一些问题,这并不重要,重要的是,无论您回答了什么,都必须充满自信地回答。所以在面试中要有自信。我们在tutorialspoint祝您面试顺利,并祝您未来的事业一切顺利。干杯 :-)

hadoop_questions_answers.htm
广告
© . All rights reserved.