Hadoop面试必须知道的那些事儿
呼呼 知乎

1:Hadoop VS Spark


2. Hadoop实时应用有哪些?

Hadoop,众所周知的Apache Hadoop,是一个开放源代码软件平台,用于大容量数据的可扩展和分布式计算。它提供对数字平台和企业内部生成的结构化和非结构化数据的快速,高性能和成本效益的分析。它如今几乎应用在所有部门 。比如:

?交通管理

?流处理

?内容管理和电子邮件存档

?使用Hadoop计算集群处理大鼠脑神经元信号

?欺诈检测和预防

?广告定向平台正在使用Hadoop捕获和分析点击流,事务,视频和社交媒体数据

?在社交媒体平台上管理内容,信息,图片和视频

?实时分析客户数据,以提高业务绩效

?公共部门领域,如情报,国防,网络安全和科学研究

?金融机构正在使用大数据Hadoop来降低风险,分析欺诈模式,识别流氓交易者,更精确地根据客户细分定位营销活动,并提高客户满意度

?访问非结构化数据,例如医疗设备输出,医生笔记,实验室结果,成像报告,医疗通信,临床数据和财务数据。

3. Hadoop与其它计算系统的不同?

Hadoop是一个分布式文件系统,它允许您在云计算机上存储和处理大量数据,尤其是处理冗余数据。通过这个HDFS内容来了解分布式文件系统的工作原理。 这样最主要好处是,由于数据存储在几个节点中,因此最好以分布式方式处理。 每个节点可以处理存储在其上的数据,省去在网络上移来移去的时间。

相反,在关系数据库计算系统中,你可以实时查询数据,但是当数据庞大时,数据存储并不高效。

Hadoop还提供了一个使用Hadoop HBase构建列数据库的方案,用于对行运行查询。

4. Hadoop可以运行在哪些模式中?

Hadoop可以以三种模式运行:

1.独立模式:Hadoop的默认模式,它使用本地文件系统进行输入和输出操作。 此模式主要用于调试目的,不支持使用HDFS。 此外,在此模式下,不存在mapred-site.xml,core-site.xml,hdfs-site.xml文件所需的自定义配置。 比其他模式更快。

2.伪分布模式(单节点群集):在这种模式下,需要配置上述所有三个文件,所有守护程序都在一个节点上运行,因此,主节点和从节点是相同的。

3.完全分布式模式(多个集群节点):这是Hadoop的生产阶段,其中数据被使用并分布在Hadoop集群上的多个节点上。 单独的节点分配为主服务器和从服务器。

5 HDFS Block和Input Split之间的主要区别

简单来说,“block”是数据的物理表示,而split是block中存在的数据的逻辑表示。分割作用是block和mapper之间的中介。假设我们有两个block:

block 1:iintteell

block 2:Ii ppaatt

现在,考虑到映射,它将从第一个block读到ll,但不知道如何同时处理第二个block。此时split将发挥它的作用,它将形成逻辑组,即将Block1和Block2的作为一个整块处理。然后使用输入格式和记录读取器形成键值对,并发送映射以进行进一步处理使用输入拆分,如果资源有限,则可以增加拆分大小以限制映射数量。例如,如果有10块640MB(每个64MB)并且资源有限,可以将“分割大小”指定为128MB。这将形成一个128MB的逻辑组,每次只执行5个映射。

然而,如果”分割大小”属性设置为false,整个文件将形成一个输入拆分,并由单个映射处理,当文件较大时,消耗更多的时间。

6.什么是分布式缓存,它有什么好处?

Hadoop中的分布式缓存是Map-Reduce框架在需要缓存文件时的服务。 点击这里了解MapReduce课程信息。 一旦为指定作业缓存文件,hadoop将使其在系统和内存中的每个数据节点上可用,其中map和reduce任务正在执行。然后,可以轻松访问和读取缓存文件并在编码中填充任何集合,比如数组,哈希映射。

使用分布式缓存的好处是:

?它分发简单的只读文本/数据文件和/或复杂类型,如jar,存档和其他。 这些存档然后在从节点处被归档。

?分布式缓存跟踪缓存文件的修改时间,通知正在正确执行作业之前不应修改文件。

7. NameNode,Checkpoint NameNode和BackupNode之间的区别

NameNode是管理元数据HDFS的核心 - 什么文件映射到什么块位置的信息以及什么块存储在什么datanode上。简单来说,它是关于存储数据的数据。 NameNode支持由Hadoop集群上HDFS中存在的所有文件组成的目录树状结构。它使用以下文件命名空间:

fsimage file-它跟踪命名空间的最新Checkpoint。

Edit file - 它是对命名空间从Checkpoint以后所做的更改的日志。

Checkpoint NameNode具有与NameNode相同的目录结构,并通过下载fsimage和edits文件并在本地目录中进行边距限定,以定期间隔为命名空间创建Checkpoint。合并后的新映像将上传到NameNode。

有一个类似的节点像Checkpoint,通常称为辅助节点,但它不支持“上传到NameNode”功能。

BackupNode提供与Checkpoint类似的功能,执行与NameNode的同步。它维护文件系统命名空间的最新内存副本,并且不需要在固定时间间隔后保存更改。BackupNode需要将内存中的当前状态保存到映像文件以创建新的checkpoint。

8. Hadoop中最常见的输入格式是什么?

在Hadoop中有三种最常见的输入格式:

?文本输入格式:Hadoop中的默认输入格式。

?键值输入格式:用于纯文本文件,其中文件被分成行

?顺序文件输入格式:用于顺序读取文件

9. DataNode 定义,NameNode如何处理DataNode故障?

DataNode(数据节点)将数据存储在HDFS中; 它是实际数据驻留在文件系统中的节点。 每个数据节点发送实时消息,以示其活跃状态。 如果namenode确实没有接收到来自datanode的消息10分钟,则它认为它已死或不在位,并开始复制在该数据节点上托管的块,以便将它们托管在某些其他数据节点上. A BlockReport 包含DataNode上所有block的列表。 现在,系统开始复制存储在死DataNode中的内容。

NameNode管理从一个DataNode到另一个DataNode的数据块的复制。 在此过程中,复制数据直接在DataNode之间传输,以使数据永远不会通过NameNode。

10. Reducer的核心方法是什么?

Reducer的三个核心方法是:

1. setup():此方法用于配置各种参数,如输入数据大小,分布式缓存。

public void set(context)

2. reduce():reducer的心脏总是每个键调用一次,关联的减少任务

public void reduce(Key,Value,context)

3. cleanup():这个方法被调用来清理临时文件,只有一次在任务结束

public void cleanup(context)

11.Hadoop中的Sequence File(序列文件) 是什么?

在MapReduce I / O格式中广泛使用,Sequence File是一个包含二进制键/值对的平面文件。 映射输出在内部存储为SequenceF ile。 它提供了Reader,Writer和Sorter类。 三个Sequence File格式是:

1.未压缩的键/值记录。

2.记录压缩的键/值记录 - 这里只压缩“值”。

3.块压缩键/值记录 - 键和值都分别在“块”中收集和压缩。 “块”的大小是可配置的。

12.Hordoop中的Job Tracker(作业跟踪器)角色是什么?

Job Tracker的主要功能是资源管理(管理任务跟踪器),跟踪资源可用性和任务生命周期管理(跟踪任务进度和容错)。

?它是一个在单独的节点上运行的进程,而不是经常在DataNode上运行

?作业跟踪器与NameNode通信以标识数据位置

?找到最佳的任务跟踪节点以在指定节点上执行任务

?监视单个任务跟踪器,并将整个作业提交给客户端。

?它跟踪从节点本地的MapReduce工作负载的执行。

13. Hadoop中 Record Reader的作用

由于Hadoop将数据拆分为各种块,因此使用RecordReader将拆分数据读取到单个记录中。 例如,如果我们的输入数据被拆分为:

Row1:欢迎来到

Row2:Bit Tiger

它将使用RecordReader读为“欢迎来到太阁”。

14. 什么是Hadoop中的投机执行?

Hadoop的一个限制是,通过在多个节点上分配任务,很少有慢节点限制程序的其余部分。有很多原因导致任务缓慢,有时不容易检测到。 Hadoop不是识别和修复慢速运行的任务,而是尝试检测任务何时运行速度低于预期,然后启动其他等效任务作为备份。 Hadoop中的此备份机制就是投机执行。

它在另一个磁盘上创建一个重复的任务。相同的输入可以并行处理多次。当作业中的大多数任务完成时,推测执行机制在当前可用的节点上调度剩余任务的副本(其速度较慢)。当这些任务完成后,它被告知JobTracker。如果其他副本以推测方式执行,Hadoop会通知TaskTracker退出这些任务并拒绝其输出。

在Hadoop中,投机执行默认为true。要禁用,请设置mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution

JobConf选项为false。

15.如果尝试运行具有已存在的输出目录的Hadoop作业,会发生什么情况?

它会抛出异常,说输出文件目录已经存在。 要运行MapReduce作业,需要确保HDFS中以前不存在输出目录。 要在运行作业之前删除目录,可以使用shell:Hadoop fs -rmr / path / to / your / output /或通过Java API:FileSystem.getlocal(conf).delete(outputDir,true)

16. 你怎么调试Hadoop代码?

首先,检查当前运行的MapReduce作业的列表。 接下来,我们需要看到没有孤立的作业运行; 如果有,需要确定RM日志的位置。

1.执行命令ps -ef | grep -I ResourceManager

并在显示的结果中查找日志目录。 从显示的列表中查找job-id,并检查是否有与该作业相关的任何错误消息。

2.根据RM日志,标识参与执行任务的工作节点。

3.现在,登录到该节点并运行 - “ps -ef | grep -iNodeManager“

4.检查节点管理器日志。 大多数错误来自每个map-reduce作业的用户级日志。

17.如何在HDFS中配置复制因子?

hdfs-site.xml用于配置HDFS。 更改hdfs-site.xml中的dfs.replication属性将更改放置在HDFS中的所有文件的默认复制。

还可以使用Hadoop FS Shell修改基于每个文件的复制因子:[training @ localhost?] $ hadoopfs -setrep -w 3 / my / file。此外,还可以更改所有文件的复制因子 目录。

[training @ localhost?] $ hadoopfs -setrep -w 3 -R / my / dir

18.如何压缩映射器输出,而不是reducer输出?

要实现此压缩,应该设置:

conf.set(‘mapreduce.map.output.compress’ ,true)

conf.set(‘mapreduce.output.fileoutputformat.compress’,false)

19. Map Side join和Reduce Side Join有什么区别?

映射侧连接在映射侧执行数据到达映射区。 需要一个严格的结构来定义映射侧连接。 另一方面,缩减侧连接(Repartitioned Join)比映射侧连接更简单,因为输入数据集不需要结构化。 然而,它的效率较低,因为它必须经历排序和随机相位,伴随而来的是网络开销。

20.如何将数据从Hive传输到HDFS?

通过编写查询:hive> insert overwrite directory'/'select * from emp;

可以将要从Hive导入的数据的查询写入HDFS。 接收的输出将存储在指定HDFS路径中的部分文件中。


CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢