Hadoop和MapReduce功能的基础知识

Hadoop和MapReduce功能的基础知识,mapreduce,hadoop2,hadoop-partitioning,Mapreduce,Hadoop2,Hadoop Partitioning,我刚刚开始学习Hadoop和map reduce的概念,在继续学习之前,我想澄清以下几个问题: 据我所知: Hadoop专门用于涉及大量数据的情况。当我们将文件存储在HDFS中时,会发生这样的情况:文件被分割成不同的块(块大小通常为64MB或128MB…或为当前系统配置的任何块)。现在,一旦大文件被分割成不同的块,那么这些块就存储在集群上。这是由hadoop环境内部处理的。 问题的背景是: 假设系统中存储了多个如此巨大的文件。现在,这些不同文件的块可以存储在数据节点a(有3个数据节点a、B和C

我刚刚开始学习Hadoop和map reduce的概念,在继续学习之前,我想澄清以下几个问题:

据我所知:

Hadoop专门用于涉及大量数据的情况。当我们将文件存储在HDFS中时,会发生这样的情况:文件被分割成不同的块(块大小通常为64MB或128MB…或为当前系统配置的任何块)。现在,一旦大文件被分割成不同的块,那么这些块就存储在集群上。这是由hadoop环境内部处理的。

问题的背景是:

假设系统中存储了多个如此巨大的文件。现在,这些不同文件的块可以存储在数据节点a(有3个数据节点a、B和C)处。而且,同一文件的多个块也可以存储在同一数据节点A。

场景1

如果客户端请求需要访问同一数据节点上同一文件的多个块,那么会发生什么?是否将多个映射器分配给这些不同的块,或者同一映射器将处理多个块

同一问题中的另一部分是,客户机如何知道处理需要哪些块或let来表示文件的哪些部分? 由于客户端不知道文件是如何存储的,它将如何向NameNode请求块位置等信息或者对于每一次这样的处理,都会处理相应文件的所有块?我的意思是问,NameNode上存储了哪些元数据

场景2

如果有两个不同的请求访问同一数据节点上不同文件的块,那么会发生什么?在这种情况下,将有其他数据节点没有工作要做,并且单个数据节点上不会有瓶颈吗?

1)映射器数量=文件块数量。也就是说,每个块都有单独的映射器。理想情况下,集群中的节点数量应该非常高,并且同一台机器上不存储同一文件的两个块

2) 每当客户机提交作业时,作业将在整个文件上执行,而不是在特定的块上执行

3) 当客户机提交作业或将文件存储在HDFS中时,其功能取决于框架。客户不应该知道hadoop的功能,基本上这不关他的事。客户机应该只知道两件事——文件和作业(.jar)

4) Namenode存储有关HDFS中存储的所有文件的所有元数据信息。它存储文件在多少块内被分发/分割的信息。文件的每个块存储在多少个节点/机器上平均而言,为了存储每个块的元数据信息,namenode需要150字节。

5) 场景2:Namenode可以很好地处理此类问题。HDFS的默认复制因子为3,这意味着每个块将存储在3个不同的节点上。所以,通过这些其他节点,HDFS可以管理负载平衡,但复制的主要目标是确保数据可用性。但是要考虑到读取文件内容的请求会非常少。Hadoop用于处理数据,而不仅仅是读取内容

我希望这能解决你的一些疑问

如果出现需要访问多个块的客户端请求 在同一个数据节点上创建同一个文件,那么会发生什么

客户端不需要是映射器,在这个级别上,我们正在处理HDFS,数据节点将向任何请求它们的客户端提供相同的数据

是否将多个映射器分配给这些不同的块,或者>同一映射器将处理多个块

每个map reduce作业都有自己的映射器。涉及相同数据块的作业越多,意味着处理相同数据的映射器越多

同一问题的另一部分是,客户如何知道 block或let表示需要文件的哪一部分 处理? 由于客户端不知道文件是如何存储的,它将如何询问 块位置等的名称节点? 或者对于每个这样的处理,相应文件的所有块 处理过了?我的意思是问,NameNode上存储了哪些元数据

客户机知道由于namenode的原因需要哪些块。在文件访问开始时,客户机使用文件名转到namenode,并返回一个块列表,其中数据存储在一起,而datanode保存这些数据。 namenode将“目录信息”保存在数据所在的块列表中,所有这些信息都存储在RAM中,并在每次系统启动时更新。datanode还向namenode发送心跳信号以及块分配信息。 每个datanode都向每个namenode报告

如果有两个不同的请求访问不同的 同一数据节点上的文件,那么会发生什么情况?在这种情况下,, 将有其他数据节点没有工作要做,不会有 单个数据节点上的瓶颈

除非datanode没有响应(失败),否则访问总是在同一datanode上进行。复制并不是用来让事情快速进行的,而是要确保不会丢失任何数据。 即:当您写入HDFS时,您的数据将被转发到任何复制块,这使得写入速度非常慢。我们需要确保数据是安全的