以下是HDFS和关系数据库之间的主要区别:
类别 | 关系数据库管理系统 | Hadoop的 |
---|---|---|
资料类型 | RDBMS依赖于结构化数据,并且数据模式始终是已知的。 | 任何类型的数据都可以存储到Hadoop中,即结构化,非结构化或半结构化。 |
处理中 | RDBMS提供的处理能力有限或没有。 | Hadoop允许我们以并行方式处理跨集群分布的数据。 |
相对于读取的架构 | RDBMS基于“写入时的模式”,其中在加载数据之前完成架构验证。 | 相反,Hadoop遵循读取策略架构。 |
读/写速度 | 在RDBMS中,由于数据的架构是已知的,因此读取速度很快。 | HDFS中的写入速度很快,因为在HDFS写入期间不会发生架构验证。 |
成本 | 因此,我必须为许可软件付费。 | Hadoop是一个开源框架。因此,我不需要为此软件付费。 |
最合适的用例 | RDBMS用于OLTP(在线迁移处理)系统。 | Hadoop用于数据发现,数据分析或OLAP系统。 |
“大数据”是用于收集大型和复杂数据集的术语,这使得很难使用关系数据库管理工具或传统数据处理应用程序进行处理。很难捕获,整理,存储,搜索,共享,传输,分析和可视化大数据。大数据已成为公司的机遇。现在,他们可以成功地从数据中获取价值,并通过增强的业务决策能力在竞争者中拥有明显的优势。
♣提示:在这样的问题中谈论5V是一个好主意,无论是否被特别询问!
当“大数据”出现时,Apache Hadoop演变为解决方案。Apache Hadoop是一个框架,为我们提供了用于存储和处理大数据的各种服务或工具。它有助于分析大数据并据此做出业务决策,而使用传统系统无法高效地完成这些决策。
提示:现在,在解释Hadoop的同时,您还应该解释Hadoop的主要组件,即:
HDFS(Hadoop分布式文件系统)是Hadoop的存储单元。它负责在分布式环境中将不同类型的数据存储为块。它遵循主从拓扑。
♣提示:建议也解释HDFS组件,即
YARN(另一个资源协商者)是Hadoop中的处理框架,用于管理资源并为流程提供执行环境。
提示:同样,就像我们在HDFS中所做的那样,我们还应该解释YARN的两个组成部分:
通常,通过首先解释HDFS守护程序(即NameNode,DataNode和Secondary NameNode),然后转到YARN守护程序(即ResorceManager和NodeManager),最后解释JobHistoryServer,来解决此问题。
在此问题中,首先解释NAS和HDFS,然后比较它们的功能,如下所示:
这是一个重要的问题,在回答这个问题时,我们必须主要关注两点,即被动NameNode和YARN体系结构。
Hadoop 1.x | Hadoop 2.x | |
---|---|---|
被动节点 | NameNode是单点故障 | 主动和被动NameNode |
处理中 | MRV1(作业跟踪器和任务跟踪器) | MRV2 / YARN(ResourceManager和NodeManager) |
在HA(高可用性)体系结构中,我们有两个NameNode-主动“ NameNode”和被动“ NameNode”。
当主动“ NameNode”发生故障时,被动“ NameNode”将替换集群中的主动“ NameNode”。因此,群集永远不会没有“ NameNode”,因此它永远不会失败。
Hadoop框架最吸引人的功能之一是对商用硬件的利用。但是,这导致Hadoop群集中频繁出现“ DataNode”崩溃。Hadoop框架的另一个引人注目的功能是,随着数据量的快速增长,规模扩展变得容易。由于这两个原因,Hadoop管理员最常见的任务之一是调试(添加)和停用(删除)Hadoop集群中的“数据节点”。
HDFS仅支持独占写入。
当第一个客户端联系“ NameNode”以打开文件进行写入时,“ NameNode”将租约授予客户端以创建此文件。当第二个客户端尝试打开同一文件进行写入时,“ NameNode”将注意到该文件的租约已被授予另一个客户端,并且将拒绝第二个客户端的打开请求。
NameNode会定期从群集中的每个DataNode接收心跳(信号),这表明DataNode正常运行。
块报告包含DataNode上所有块的列表。如果DataNode无法发送心跳消息,则在特定时间段后将其标记为无效。
NameNode使用先前创建的副本将死节点的块复制到另一个DataNode。
NameNode恢复过程涉及以下步骤,以使Hadoop集群启动并运行:
简而言之,“检查点”是一个获取FsImage,编辑日志并将其压缩为新的FsImage的过程。因此,代替重播编辑日志,NameNode可以直接从FsImage加载最终的内存状态。这是非常有效的操作,并减少了NameNode启动时间。检查点由辅助NameNode执行。
通过HDFS存储数据时,NameNode会将数据复制到多个DataNode。默认复制因子为3。您可以根据需要更改配置因子。如果DataNode出现故障,NameNode会自动将数据从副本复制到另一个节点并使数据可用。这样可以在HDFS中提供容错功能。
这个问题的明智答案是,DataNode是商用硬件,例如个人计算机和便携式计算机,因为它存储数据并且需要大量数据。但是从您的经验来看,您可以知道NameNode是主节点,它存储有关HDFS中存储的所有块的元数据。它需要高内存(RAM)空间,因此NameNode必须是具有良好存储空间的高端计算机。
与分散在多个文件中的少量数据相比,HDFS更适合单个文件中的大量数据集。如您所知,NameNode将有关文件系统的元数据信息存储在RAM中。因此,内存量限制了我的HDFS文件系统中的文件数量。换句话说,文件过多会导致生成过多的元数据。并且,将这些元数据存储在RAM中将成为挑战。根据经验法则,文件,块或目录的元数据占用150个字节。
块不过是硬盘上存储数据的最小连续位置。HDFS将每个存储为块,然后将其分布在Hadoop集群中。HDFS中的文件分为块大小的块,这些块作为独立的单元存储。
是的,可以配置块。可以在hdfs-site.xml文件中使用dfs.block.size参数来设置Hadoop环境中块的大小。
“ jps”命令可帮助我们检查Hadoop守护程序是否正在运行。它显示了机器上运行的所有Hadoop守护程序,即namenode,datanode,resourcemanager,nodemanager等。
机架感知是一种算法,其中“ NameNode”基于机架定义来决定如何放置块及其副本,以最小化同一机架内“ DataNode”之间的网络流量。假设我们考虑复制因子3(默认值),该策略是“对于每个数据块,一个机架中将存在两个副本,另一个机架中将存在第三副本”。该规则称为“复制品放置策略”。
如果某个节点执行任务的速度较慢,则主节点可以在另一个节点上冗余地执行同一任务的另一个实例。然后,首先完成的任务将被接受,而另一个任务将被杀死。该过程称为“推测执行”。
这个问题可以有两个答案,我们将讨论两个答案。我们可以通过以下方法重新启动NameNode:
这些脚本文件位于Hadoop目录内的sbin目录中。
“ HDFS块”是数据的物理划分,而“输入拆分”是数据的逻辑划分。HDFS将数据划分为多个块以将块存储在一起,而对于处理,MapReduce将数据划分为输入拆分并将其分配给映射器功能。
Hadoop可以运行的三种模式如下:
它是一个框架/编程模型,用于使用并行编程在计算机集群上处理大型数据集。运行MapReduce程序的语法为hadoop_jar_file.jar / input_path / output_path。
用户需要在“ MapReduce”框架中指定的主要配置参数是:
这个答案包括很多要点,因此我们将按顺序进行讲解。
“ InputSplit”定义了一个工作片段,但没有描述如何访问它。“ RecordReader”类从其源加载数据,并将其转换为适合“ Mapper”任务读取的(键,值)对。“ RecordReader”实例由“输入格式”定义。
分布式缓存可以解释为MapReduce框架提供的一种用于缓存应用程序所需文件的工具。一旦为工作缓存了文件,Hadoop框架将使其在您运行/映射/减少任务的每个数据节点上可用。然后,您可以在Mapper或Reducer作业中将缓存文件作为本地文件访问。
这是一个棘手的问题。“ MapReduce”编程模型不允许“缩减器”彼此通信。“减速器”是孤立运行的。
30.“ MapReduce分区程序”做什么?
“ MapReduce分区程序”可确保单个键的所有值都到达同一个“归约器”,从而允许将地图输出均匀地分配到“归约器”上。通过确定哪个“还原器”负责特定密钥,它将“映射器”输出重定向到“还原器”。
通过执行以下步骤,可以轻松编写针对Hadoop作业的自定义分区程序:
“组合器”是执行本地“减少”任务的微型“减少器”。它从特定“节点”上的“映射器”接收输入,并将输出发送到“缩减器”。“合并器”通过减少需要发送到“缩减器”的数据量来帮助提高“ MapReduce”的效率。
“ SequenceFileInputFormat”是用于在序列文件中读取的输入格式。它是一种特定的压缩二进制文件格式,经过优化,可以将一个“ MapReduce”作业的输出之间的数据传递到其他“ MapReduce”作业的输入。
序列文件可以作为其他MapReduce任务的输出生成,并且是从一个MapReduce作业传递到另一个MapReduce作业的数据的有效中间表示。
Apache Pig是一个平台,用于分析代表Yahoo开发的数据流的大型数据集。它旨在提供对MapReduce的抽象,从而减少编写MapReduce程序的复杂性。
Pig Latin可以处理原子数据类型(如int,float,long,double等)和复杂数据类型(如元组,bag和map)。
原子数据类型:原子或标量数据类型是在所有语言(例如字符串,整数,浮点数,长整数,双精度字符,char [],byte [])中使用的基本数据类型。
复杂数据类型:复杂数据类型为Tuple,Map和Bag。
不同的关系运算符是:
如果某些函数在内置运算符中不可用,我们可以通过编程方式创建用户定义函数(UDF),以使用其他语言(如Java,Python,Ruby等)来实现这些功能,并将其嵌入脚本文件中。
Apache Hive面试问题
Apache Hive是建立在Hadoop之上的数据仓库系统,用于分析Facebook开发的结构化和半结构化数据。Hive抽象了Hadoop MapReduce的复杂性。
“ SerDe”界面使您可以指示“ Hive”如何处理记录。“ SerDe”是“ Serializer”和“ Deserializer”的组合。“ Hive”使用“ SerDe”(和“ FileFormat”)读取和写入表的行。
“ Derby数据库”是默认的“ Hive Metastore”。多个用户(进程)不能同时访问它。它主要用于执行单元测试。
Hive存储表数据的默认位置在/ user / hive / warehouse中的HDFS中。
HBase是一个开源的,多维的,分布式的,可伸缩的,用Java编写的NoSQL数据库。HBase在HDFS(Hadoop分布式文件系统)之上运行,并为Hadoop提供类似BigTable(Google)的功能。它旨在提供一种容错的方式来存储大量稀疏数据集。HBase通过在大型数据集上提供更快的读/写访问来实现高吞吐量和低延迟。
HBase具有三个主要组件,即HMaster Server,HBase RegionServer和Zookeeper。
区域服务器的组件为:
预写日志(WAL)是附加到分布式环境中每个区域服务器的文件。WAL将尚未持久保存或提交给永久存储的新数据存储。在无法恢复数据集的情况下使用它。
HBase是一个开源的,多维的,分布式的,可伸缩的,用Java编写的 NoSQL数据库。HBase在HDFS之上运行,并为Hadoop提供类似BigTable的功能。让我们看看HBase和关系数据库之间的区别。
HBase | 关系型数据库 |
---|---|
它是无架构的 | 它是基于架构的数据库 |
它是面向列的数据存储 | 它是面向行的数据存储 |
用于存储非规范化数据 | 用于存储规范化数据 |
它包含稀疏填充的表 | 它包含薄表 |
HBase已完成自动分区 | 没有这样的规定或内置的分区支持 |
这个问题的答案是,Apache Spark是一个用于分布式计算环境中的实时数据分析的框架。它执行内存中计算以提高数据处理速度。
通过利用内存计算和其他优化,它比MapReduce进行大规模数据处理的速度快100倍。
是的,您可以为特定的Hadoop版本构建“ Spark”。
RDD是弹性分布数据集(Resilient Distribution Datasets)的缩写-并行运行的操作元素的容错集合。RDD中的分区数据是不可变的且是分布式的,这是Apache Spark的关键组件。
Apache ZooKeeper在分布式环境中与各种服务进行协调。通过执行同步,配置维护,分组和命名,可以节省大量时间。
Apache Oozie是一个调度程序,用于调度Hadoop作业并将其绑定为一项逻辑工作。Oozie工作有两种:
“ Oozie”与其他Hadoop堆栈集成在一起,支持多种类型的Hadoop作业,例如“ Java MapReduce”,“ Streaming MapReduce”,“ Pig”,“ Hive”和“ Sqoop”。