10个基本的Hadoop面试问题 *

最好的Hadoop开发人员和工程师可以回答的全面来源的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

Hire a Top Hadoop Developer Now
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, and project managers in the world. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

如何为MapReduce作业定义自定义输入和输出数据格式?

View answer

Hadoop MapReduce内置了对许多常见文件格式的支持,比如SequenceFile. 要实现自定义类型,必须实现 InputFormat and OutputFormat 分别用于读取和写入的Java接口.

A class implementing InputFormat (and similarly OutputFormat), 是否应该实现逻辑来分割数据,以及如何从每个分割中读取记录的逻辑. 后者应该是一种执行 RecordReader (and RecordWriter) interfaces.

Implementations of InputFormat and OutputFormat 可以从HDFS上的文件以外的方式检索数据. 例如,Apache Cassandra附带的实现 InputFormat and RecordReader.

2.

What is HDFS?

View answer

HDFS (Hadoop Distributed File System)是一个分布式文件系统,是Hadoop软件集合的核心部分. HDFS试图抽象出分布式文件系统的复杂性, including replication, high availability, and hardware heterogeneity.

HDFS的两个主要组件是NameNode和一组datanode. NameNode公开文件系统API, persists metadata, 并协调datanode之间的复制.

MapReduce原生地使用HDFS的数据局部性API来调度MapReduce任务到数据所在的位置运行.

3.

HDFS提供了什么样的读写一致性保证?

View answer

即使数据分布在多个datanode中, NameNode是文件元数据和复制的中心权威, a single point of failure). The configuration parameter dfs.NameNode.replication.min 定义一个块应该复制到多少个副本,这样写操作才能成功返回.

申请加入Toptal的发展网络

并享受可靠、稳定、远程 Freelance Hadoop Developer Jobs

Apply as a Freelancer
4.

MapReduce编程范式是什么?如何使用它来设计并行程序?

View answer

MapReduce是一种用于实现并行程序的编程模型. 它提供了一种编程模型,可以在一组分布式机器上运行程序. 类似的“Hadoop MapReduce”是MapReduce模型的实现.

MapReduce的输入和输出数据建模为键值对的记录.

Central to MapReduce are map and reduce programs, reminiscent of map and reduce in functional programming. 它们分两个阶段转换数据,每个阶段并行运行且线性可扩展.

The map 函数接受每个键值对并输出一个键值对列表. The reduce 的实例的所有输出中为每个键发出的所有值的集合 map 调用,并将其减少为单个最终值.

MapReduce与HDFS集成,为其处理的数据提供数据局部性. For sufficiently large data, a map or reduce 程序最好发送到数据所在的地方运行,而不是将数据带到数据所在的地方.

Hadoop对MapReduce的实现提供了对JVM运行时的原生支持,并扩展了对其他运行时通过标准输入/输出通信的支持.

5.

在HDFS中存储数据有哪些常见的数据序列化格式?它们的属性是什么?

View answer

HDFS can store any type of file regardless of format; however, 某些属性使某些文件格式更适合分布式计算.

HDFS以固定大小的块组织和分发文件. 例如,给定一个128MB的块大小,一个257MB的文件被分成三个块. 因此,块边界上的记录可能会被分割. 分割时使用的文件格式, also called “splittable,,包括记录组之间的“同步标记”,以便可以使用文件的任何连续块. 此外,压缩可能需要与可分裂性结合在一起.

对压缩的支持尤其重要,因为它权衡了IO和CPU资源. 压缩文件从磁盘加载速度更快,但需要额外的时间来解压缩.

例如,CSV文件是可分割的,因为它们在记录之间包含“行分隔符”. 但是,它们不适合二进制数据,也不支持压缩.

The SequenceFile format, native to the Hadoop ecosystem, 是存储键值记录的二进制格式吗, is splittable, 并支持块和记录级别的压缩.

Apache Avro,一个数据序列化和RPC框架,定义了 Avro Object Container File 存储avro编码记录的格式. 它既可分裂又可压缩. 它还具有灵活的模式定义语言,因此被广泛使用.

The Parquet file format, another Apache project, supports columnar data, 属于每个列的字段被有效地存储在一起.

6.

HDFS提供了什么样的可用性保证?

View answer

HDFS依赖于NameNode来存储存储不同块的datanode的元数据. 因为NameNode运行在单个节点上, 它是一个单点故障,它的故障导致HDFS不可用.

备用NameNode可以配置为能够故障转移到,以实现高可用性. In order to achieve this, Active NameNode向一组journalnode发送突变日志, 备用NameNode从中接收对文件系统元数据的最新更改.

可以通过在Zookeeper集群的仲裁上维护一个临时锁来配置主备namenode之间的自动故障转移. namenode上的故障转移控制器进程负责检查namenode的运行状况, 用于维护临时锁, 并执行一个防护机制,以确保在故障转移时, 前面的NameNode确实是被动的.

7.

Hadoop Streaming的目的是什么?它是如何工作的?

View answer

Hadoop Streaming是Hadoop的MapReduce API的扩展,它使得在运行时中运行的程序可以像JVM一样运行 map and reduce programs. Hadoop Streaming定义了一个接口,在这个接口中,数据可以通过 standard out and standard in 操作系统提供的流(因此得名).

8.

什么是投机执行,什么时候可以使用?

View answer

一个MapReduce程序可能会在不同的HDFS datanode上转换成对mapper和reducer任务的多次调用. If a task is slow to respond, MapReduce“推测性地”在另一个副本上运行相同的任务, 因为第一个节点可能已经过载或出现故障.

为投机执行正确工作, tasks need to have no side effects; or if they do they need to be “idempotent.“无副作用的任务是除了产生预期的输出之外的任务, 不改变任何外部状态(比如写入数据库). 在这种情况下,幂等性意味着如果副作用被重复应用(由于推测执行), 它不会改变最终的结果. Nevertheless, 对于MapReduce任务来说,副作用通常是不希望出现的,无论推测执行情况如何.

9.

Hadoop的“小文件问题”是什么?

View answer

NameNode是HDFS中所有元数据的注册表. The metadata, although journaled on disk, 是从内存中提供的,因此受到运行时的限制. NameNode, being a Java application, 使用JVM运行时运行,不能有效地使用较大的堆分配.

10.

Explain rack awareness in Hadoop.

View answer

HDFS将块复制到多台机器上. 为了对机架故障(网络或物理)具有更高的容错能力, HDFS能够跨多个机架分发副本.

Hadoop通过调用用户定义的脚本或加载Java类来获取网络拓扑信息,Java类应该是 DNSToSwitchMapping interface. 选择方法是管理员的责任, to set the right configuration, 并提供所述方法的实现.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

Tired of interviewing candidates? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

Hire a Top Hadoop Developer Now

我们的专属Hadoop开发者网络

希望找到一份Hadoop开发人员的工作?

让Toptal为你找到合适的工作.

Apply as a Hadoop Developer

工作机会从我们的网络

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, at the sole discretion of Toptal, LLC.

* All fields are required

Looking for Hadoop Developers?

Looking for Hadoop Developers? 查看Toptal的Hadoop开发人员.

Adrian Dominiczak

Freelance Hadoop Developer
PolandToptal Member Since July 21, 2020

Adrian是一名拥有近十年专业经验的高级大数据工程师. 艾德里安的职业生涯是从三星R&他在Santander和Lingaro从事过一系列项目,从银行和制药行业的机器学习和大数据工程到大数据和云架构. Adrian的专业领域主要是Hadoop和Spark.

Show More

Selahattin Gungormus

Freelance Hadoop Developer
TurkeyToptal Member Since May 4, 2021

Selahattin是一名数据工程师,拥有多年使用开源技术构建可扩展数据集成解决方案的实践经验. 他擅长使用Hadoop等分布式处理平台开发数据应用程序, Spark, and Kafka. Selahattin在AWS和Azure等云架构类型方面也有实践经验, 以及使用Python和JavaScript框架开发微服务

Show More

Dmitry Kozlov

Freelance Hadoop Developer
CanadaToptal Member Since February 24, 2021

Dmitry是一名高级大数据架构师,在数据仓库方面拥有16年以上的经验, BI, ETL, analytics, and the cloud. 他领导的团队在金融行业交付了24个项目, insurance, telecommunications, government, education, mining, manufacturing, and retail. 德米特里在快节奏的环境中茁壮成长, 表现出有效领导的能力, manage, and support teams, 并以BI的身份为多个项目提供咨询, data warehouse, and big data expert.

Show More

Toptal Connects the Top 3% 世界各地的自由职业人才.

Join the Toptal community.

Learn more