6道常见hadoop面试题及答案解析

news2025/1/20 1:45:27

 Q1.什么是Hadoop?   Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容:   HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统):HDFS允许你以一种分布式和冗余的方式存储大量数据。例如,1GB(即1024MB)文本文件可以拆分为16*128MB文件,并存储在Hadoop集群中的8个不同节点上。每个分裂可以复制3次,以实现容错,以便如果1个节点故障的话,也有备份。HDFS适用于顺序的“一次写入、多次读取”的类型访问。

  MapReduce:一个计算框架。它以分布式和并行的方式处理大量的数据。当你对所有年龄>18的用户在上述1GB文件上执行查询时,将会有“8个映射”函数并行运行,以在其128MB拆分文件中提取年龄>18的用户,然后“reduce”函数将运行以将所有单独的输出组合成单个最终结果。

  YARN(YetAnotherResourceNagotiator,又一资源定位器):用于作业调度和集群资源管理的框架。

  Hadoop生态系统,拥有15多种框架和工具,如Sqoop,Flume,Kafka,Pig,Hive,Spark,Impala等,以便将数据摄入HDFS,在HDFS中转移数据(即变换,丰富,聚合等),并查询来自HDFS的数据用于商业智能和分析。某些工具(如Pig和Hive)是MapReduce上的抽象层,而Spark和Impala等其他工具则是来自MapReduce的改进架构/设计,用于显著提高的延迟以支持近实时(即NRT)和实时处理。

  Q2.为什么组织从传统的数据仓库工具转移到基于Hadoop生态系统的智能数据中心?

  Hadoop组织正在从以下几个方面提高自己的能力:

  现有数据基础设施:

  主要使用存储在高端和昂贵硬件中的“structureddata,结构化数据”

  主要处理为ETL批处理作业,用于将数据提取到RDBMS和数据仓库系统中进行数据挖掘,分析和报告,以进行关键业务决策。

  主要处理以千兆字节到兆字节为单位的数据量

  基于Hadoop的更智能的数据基础设施,其中结构化(例如RDBMS),非结构化(例如images,PDF,docs)和半结构化(例如logs,XMLs)的数据可以以可扩展和容错的方式存储在较便宜的商品机器中。

  可以通过批处理作业和近实时(即,NRT,200毫秒至2秒)流(例如Flume和Kafka)来摄取数据。

  数据可以使用诸如Spark和Impala之类的工具以低延迟(即低于100毫秒)的能力查询。

  可以存储以兆兆字节到千兆字节为单位的较大数据量。这使得组织能够使用更强大的工具来做出更好的业务决策,这些更强大的工具用于获取数据,转移存储的数据(例如聚合,丰富,变换等),以及使用低延迟的报告功能和商业智能。

Q3.更智能&更大的数据中心架构与传统的数据仓库架构有何不同?

  传统的企业数据仓库架构

  基于Hadoop的数据中心架构

Q4.基于Hadoop的数据中心的好处是什么?

  随着数据量和复杂性的增加,提高了整体SLA(即服务水平协议)。例如,“SharedNothing”架构,并行处理,内存密集型处理框架,如Spark和Impala,以及YARN容量调度程序中的资源抢占。

  缩放数据仓库可能会很昂贵。添加额外的高端硬件容量以及获取数据仓库工具的许可证可能会显著增加成本。基于Hadoop的解决方案不仅在商品硬件节点和开源工具方面更便宜,而且还可以通过将数据转换卸载到Hadoop工具(如Spark和Impala)来补足数据仓库解决方案,从而更高效地并行处理大数据。这也将释放数据仓库资源。

  探索新的渠道和线索。Hadoop可以为数据科学家提供探索性的沙盒,以从社交媒体,日志文件,电子邮件等地方发现潜在的有价值的数据,这些数据通常在数据仓库中不可得。

  更好的灵活性。通常业务需求的改变,也需要对架构和报告进行更改。基于Hadoop的解决方案不仅可以灵活地处理不断发展的模式,还可以处理来自不同来源,如社交媒体,应用程序日志文件,image,PDF和文档文件的半结构化和非结构化数据。

  Q5.大数据解决方案的关键步骤是什么?

  提取数据,存储数据(即数据建模)和处理数据(即数据加工,数据转换和查询数据)。

提取数据

  从各种来源提取数据,例如:

  RDBM(RelationalDatabaseManagementSystems)关系数据库管理系统,如Oracle,MySQL等。

  ERPs(EnterpriseResourcePlanning)企业资源规划(即ERP)系统,如SAP。

  CRM(CustomerRelationshipsManagement)客户关系管理系统,如Siebel,Salesforce等

  社交媒体Feed和日志文件。

  平面文件,文档和图像。

  并将其存储在基于“Hadoop分布式文件系统”(简称HDFS)的数据中心上。可以通过批处理作业(例如每15分钟运行一次,每晚一次,等),近实时(即100毫秒至2分钟)流式传输和实时流式传输(即100毫秒以下)去采集数据。

  Hadoop中使用的一个常用术语是“Schema-On-Read”。这意味着未处理(也称为原始)的数据可以被加载到HDFS,其具有基于处理应用的需求在处理之时应用的结构。这与“Schema-On-Write”不同,后者用于需要在加载数据之前在RDBM中定义模式。

 存储数据

  数据可以存储在HDFS或NoSQL数据库,如HBase。HDFS针对顺序访问和“一次写入和多次读取”的使用模式进行了优化。HDFS具有很高的读写速率,因为它可以将I/O并行到多个驱动器。HBase在HDFS之上,并以柱状方式将数据存储为键/值对。列作为列家族在一起。HBase适合随机读/写访问。在Hadoop中存储数据之前,你需要考虑以下几点:

  数据存储格式:有许多可以应用的文件格式(例如CSV,JSON,序列,AVRO,Parquet等)和数据压缩算法(例如snappy,LZO,gzip,bzip2等)。每个都有特殊的优势。像LZO和bzip2的压缩算法是可拆分的。

  数据建模:尽管Hadoop的无模式性质,模式设计依然是一个重要的考虑方面。这包括存储在HBase,Hive和Impala中的对象的目录结构和模式。Hadoop通常用作整个组织的数据中心,并且数据旨在共享。因此,结构化和有组织的数据存储很重要。

  元数据管理:与存储数据相关的元数据。

  多用户:更智能的数据中心托管多个用户、组和应用程序。这往往导致与统治、标准化和管理相关的挑战。

  处理数据Hadoop的处理框架使用HDFS。它使用“SharedNothing”架构,在分布式系统中,每个节点完全独立于系统中的其他节点。没有共享资源,如CPU,内存以及会成为瓶颈的磁盘存储。Hadoop的处理框架(如Spark,Pig,Hive,Impala等)处理数据的不同子集,并且不需要管理对共享数据的访问。“SharedNothing”架构是非常可扩展的,因为更多的节点可以被添加而没有更进一步的争用和容错,因为每个节点是独立的,并且没有单点故障,系统可以从单个节点的故障快速恢复。

  Q6.你会如何选择不同的文件格式存储和处理数据?

  设计决策的关键之一是基于以下方面关注文件格式:

  使用模式,例如访问50列中的5列,而不是访问大多数列。

  可并行处理的可分裂性。

  块压缩节省存储空间vs读/写/传输性能

  模式演化以添加字段,修改字段和重命名字段。

  CSV文件CSV文件通常用于在Hadoop和外部系统之间交换数据。CSV是可读和可解析的。CSV可以方便地用于从数据库到Hadoop或到分析数据库的批量加载。在Hadoop中使用CSV文件时,不包括页眉或页脚行。文件的每一行都应包含记录。CSV文件对模式评估的支持是有限的,因为新字段只能附加到记录的结尾,并且现有字段不能受到限制。CSV文件不支持块压缩,因此压缩CSV文件会有明显的读取性能成本。

  JSON文件JSON记录与JSON文件不同;每一行都是其JSON记录。由于JSON将模式和数据一起存储在每个记录中,因此它能够实现完整的模式演进和可拆分性。此外,JSON文件不支持块级压缩。

  序列文件序列文件以与CSV文件类似的结构用二进制格式存储数据。像CSV一样,序列文件不存储元数据,因此只有模式进化才将新字段附加到记录的末尾。与CSV文件不同,序列文件确实支持块压缩。序列文件也是可拆分的。序列文件可以用于解决“小文件问题”,方式是通过组合较小的通过存储文件名作为键和文件内容作为值的XML文件。由于读取序列文件的复杂性,它们更适合用于在飞行中的(即中间的)数据存储。

注意:序列文件是以Java为中心的,不能跨平台使用。

  Avro文件适合于有模式的长期存储。Avro文件存储具有数据的元数据,但也允许指定用于读取文件的独立模式。启用完全的模式进化支持,允许你通过定义新的独立模式重命名、添加和删除字段以及更改字段的数据类型。Avro文件以JSON格式定义模式,数据将采用二进制JSON格式。Avro文件也是可拆分的,并支持块压缩。更适合需要行级访问的使用模式。这意味着查询该行中的所有列。不适用于行有50+列,但使用模式只需要访问10个或更少的列。Parquet文件格式更适合这个列访问使用模式。

  Columnar格式,例如RCFile,ORCRDBM以面向行的方式存储记录,因为这对于需要在获取许多列的记录的情况下是高效的。如果在向磁盘写入记录时已知所有列值,则面向行的写也是有效的。但是这种方法不能有效地获取行中的仅10%的列或者在写入时所有列值都不知道的情况。这是Columnar文件更有意义的地方。所以Columnar格式在以下情况下工作良好

  在不属于查询的列上跳过I/O和解压缩

  用于仅访问列的一小部分的查询。

  用于数据仓库型应用程序,其中用户想要在大量记录上聚合某些列。

  RC和ORC格式是专门用Hive写的而不是通用作为Parquet。

  Parquet文件Parquet文件是一个columnar文件,如RC和ORC。Parquet文件支持块压缩并针对查询性能进行了优化,可以从50多个列记录中选择10个或更少的列。Parquet文件写入性能比非columnar文件格式慢。Parquet通过允许在最后添加新列,还支持有限的模式演变。Parquet可以使用AvroAPI和Avro架构进行读写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scrum经验性过程

软件开发是一个复杂的活动, 在软件产品开发的过程中不仅存在着需求的不确定性,也存在着技术的不确定性,再加上参与软件开发的主体通常是由多人组成的软件开发团队,加上人的因素,就让整个软件开发的活动变得非常复杂。如…

MySQL的索引详解

1.什么是MySQL的索引 1.1索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 所以索引归根结底只是在做一件事,添加了索…

数据结构-Redis(三)

前面介绍了redis的String和哈希,接下来看看其他的数据结构 List LPUSH:左边放入 RPUSH:右边放入 LPOP:取出左边第一个数,并且移除 RPOP:取出右边第一个数,并且移除 由上操作可以看出&#…

chatgpt赋能python:Python中一行输出的方法

Python中一行输出的方法 Python是一种高级编程语言,其语法简洁、易于阅读、丰富的库和解释器使其成为了众多程序员的选择。在Python中有时需要一行输出多个值、变量或者其他信息,因此在本文中将介绍如何在Python中实现一行输出的方法。 一般的输出方法…

chatgpt赋能python:Python如何一行一行运行?

Python 如何一行一行运行? Python是一门广泛应用于开发Web、科学计算、人工智能等领域的高级编程语言。相比其他编程语言,Python简单易学,语法简洁优雅,拥有许多强大的第三方库和工具。但作为一个新手,可能会对Python…

【复习笔记】FreeRTOS(四) 列表项的插入和删除

本文是FreeRTOS复习笔记的第四节,列表项的插入和删除。 上一篇文章: 【复习笔记】FreeRTOS(三)任务挂起和恢复 文章目录 一、列表和列表项1.1. 列表1.2. 列表项1.3. 迷你列表项 二、实验目的三、测试例程四、实验效果 一、列表和列表项 列表和列表项是F…

Dubbo 注册,调用,通信,容错

Dubbo简化模型 3种开发方式 开发方式 举例 特点 XML配置 等 业务代码零侵入 扩展修改方便 注解方式 EnableDubbo DubboService DubboReference 扩展修改方便 修改需要重新编译代码 API编程 DubboBootstrap ServiceConfig ReferenceConfig应用 业务侵入性大 修改复杂…

【前端学习】React学习资料

React 是一种开源的 JavaScript 库,用于构建用户界面。它由 Facebook 开发并维护,已经成为了当今最流行的前端库之一。与其他框架不同,React 主要专注于视图层(View),旨在通过声明式、组件化的方式来构建复…

Pagination分页(antd-design组件库)展示所有配置选项和onChange的作用

1.Pagination分页 采用分页的形式分隔长列表,每次只加载一个页面。 2.何时使用 当加载/渲染所有数据将花费很多时间时; 可切换页码浏览数据。 组件代码来自: 分页 Pagination - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-d…

redis到底是怎么样进行渐进式hash的

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。那么redis的底层是如何来存储数据的呢? 一、redis如何在存储大量的key时候,查询速度还能接近O(1)呢&#xf…

分布式事务方案学习

第100篇文章啦!分布式事务在面试中分布式事务也是十分重要的点,所以学习完分布式锁后我们就来学习分布式事务吧。 事务表示的是我们在业务逻辑中对数据库进行操作的一组单元,需要同时成功或同时失败,不了解的小伙伴们可以看一下下…

Linux编译器-gcc/g++(动静态链接)

目录 一、Linux编译器-gcc/g的使用1.1 背景知识1.2 预处理,编译,汇编,链接1.3 动静态链接 二、补充sudo设置 一、Linux编译器-gcc/g的使用 1.1 背景知识 我们为什么能在windows或者linux下进行C/C或者其它形式的开发呢?前提条件…

我在VScode学Java(Java一维数组、二维数组、JVM中的堆和栈)重制版

​ 我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:《我在VScode学Java》 Java一维数组、二维数组 零._.在Java中_什么是数组Java 数组是一种数据结构,存储一组相同类型的数据。引…

Docker网络模型(七)使用 IPvlan 网络

使用 IPvlan 网络 IPvlan 驱动为用户提供了全面控制 IPv4 和 IPv6 寻址的能力。 IPvlan 让操作者能完全操控二层(数据链路层)网络的 vlan 标签,甚至也提供了三层(网络传输层)路由控制给感兴趣的用户。对于抽象出物理限…

【SpringSecurity】CSRF、环境配置、授权、认证功能、记住我功能实现

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击开发环境搭建认证直接认证使用数据库认证自定义登录界面 授权基于角色的授权基于权限的授权使用注解判断权限 记住我SecurityContext SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核…

Java快速安装以及入门指南

安装 Java 环境教程 Java 是一种广泛应用于软件开发、Web 应用程序和移动应用程序等领域的编程语言。如果您要使用 Java 进行开发或运行需要 Java 程序,您需要先在计算机上安装 Java 环境。 本教程将向您介绍如何在 Windows 操作系统上安装和验证 Java 环境。还将…

第2章 可行性研究

文章目录 第2章 可行性研究2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.3.1符号2.3.3 分层 2.4 数据流图2.4.1 符号1. 数据源点或终点2. 数据加工(变换数据的处理)3. 数据存储4.数据流数据流与数据加工之间的关系 2.4.2绘制数据流图的例子顶…

chatgpt赋能python:Python3.6.5到Python3.7.5:升级指南

Python 3.6.5到Python 3.7.5:升级指南 Python是一种广泛使用的编程语言,拥有强大的库和框架,能够开发各种类型的应用程序。在Python的发行版中,版本更新是常见的过程,以提供更好的性能和新的功能。 本文将介绍如何将…

手记系列之六 ----- 分享个人使用kafka经验

前言 本篇文章主要介绍的关于本人从刚工作到现在使用kafka的经验,内容非常多,包含了kafka的常用命令,在生产环境中遇到的一些场景处理,kafka的一些web工具推荐等等。由于kafka这块的记录以及经验是从我刚开始使用kafka&#xff0…

chatgpt赋能python:Python怎么一行一行读文本?

Python怎么一行一行读文本? 在Python中,要一行一行地读取文本文件,我们可以使用Python内置函数readline()。它每次读取一行文本,并且会自动把文本的换行符\n去掉。下面我们来详细了解如何使用readline()函数读取文本文件。 读取…