`
cooler1217
  • 浏览: 373807 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Hadoop集群配置中如何写入和读取数据?

 
阅读更多
转载--学习  原著地址  http://developer.51cto.com/art/201006/204092.htm

本节和大家继续学习一下有关Hadoop集群性能优化中机架感知配置方面的内容,主要包括写入数据和读出数据两大部分,希望通过本节的介绍大家对Hadoop集群中机架感知配置有一定的认识。

Hadoop集群功能测试

以下是分别就配置了机架感知信息和没有配置机架感知信息的hadoopHDFS启动instance进行的数据上传时的测试结果。

写入数据

当没有配置机架信息时,所有的机器hadoop都默认在同一个默认的机架下,名为“/default-rack”,这种情况下,任何一台datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下,此时,就很容易出现之前提到的增添机架间网络负载的情况。例如,对没有机架信息的hadoopHDFS启动instance上传一个文件,其block信息如下:
从上图可以看出,在没有机架信息的情况下,namenode默认将所有的slaves机器全部默认为在/default-rack下,根据hadoop代码的分析也能知道哦啊,此时在写block时,三个datanode机器的选择完全是随机的。

而当Hadoop集群中配置了机架感知信息以后,hadoop在选择三个datanode时,就会进行相应的判断:

1.如果上传本机不是一个datanode,而是一个客户端,那么就从所有slave机器中随机选择一台datanode作为第一个块的写入机器(datanode1)。
a)而此时如果上传机器本身就是一个datanode(例如mapreduce作业中task通过DFSClient向hdfs写入数据的时候),那么就将该datanode本身作为第一个块写入机器(datanode1)。

2.随后在datanode1所属的机架以外的另外的机架上,随机的选择一台,作为第二个block的写入datanode机器(datanode2)。

3.在写第三个block前,先判断是否前两个datanode是否是在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个datanode作为写入机器(datanode3)。而如果datanode1和datanode2没有在同一个机架上,则在datanode2所在的机架上选择一台datanode作为datanode3。

4.得到3个datanode的列表以后,从namenode返回该列表到DFSClient之前,会在namenode端首先根据该写入客户端跟datanode列表中每个datanode之间的“距离”由近到远进行一个排序。如果此时DFS写入端不是datanode,则选择datanode列表中的第一个排在第一位。客户端根据这个顺序有近到远的进行数据块的写入。在此,判断两个datanode之间“距离”的算法就比较关键,hadoop目前实现如下,以两个表示datanode的对象DatanodeInfo(node1,node2)为例:
a)首先根据node1和node2对象分别得出两个datanode在整个hdfs集群中所处的层次。这里的层次概念需要解释一下:每个datanode在hdfs集群中所处的层次结构字符串是这样描述的,假设hdfs的拓扑结构如下:

如上图所示,每个datanode都会对应自己在集群中的位置和层次,如node1的位置信息为“/rack1/datanode1”,那么它所处的层次就为2,其余类推。
b)得到两个node的层次后,会沿着每个node所处的拓朴树中的位置向上查找,如“/rack1/datanode1”的上一级就是“/rack1”,此时两个节点之间的距离加1,两个node分别同上向上查找,直到找到共同的祖先节点位置,此时所得的距离数就用来代表两个节点之间的距离。所以,如上图所示,node1和node2之间的距离就为4.
5.当根据“距离”排好序的datanode节点列表返回给DFSClient以后,DFSClient便会创建BlockOutputStream,并想这次block写入pipeline中的第一个节点(最近的节点)开始写入block数据。
6.写完第一个block以后,依次按照datanode列表中的次远的node进行写入,直到最后一个block写入成功,DFSClient返回成功,该block写入操作结束。
通过以上策略,namenode在选择数据块的写入datanode列表时,就充分考虑到了将block副本分散在不同机架下,并同时尽量的避免了之前描述的网络多于开销。
对配置了机架信息的hadoopHDFS启动instance上传一个文件,其block信息如下:
从上图可以看出,在配置了机架信息的情况下,为了减少机架间的网络流量,namenode会将其中两个副本写在同一个机架上,并且为了尽量做到容错,会将第三个block写道另一个机架上的datanode上。

读取数据

我们看一下Hadoop集群配置中如何读取数据。当对某个文件的某个block进行读取的时候,hadoop采取的策略也是一样:

1.首先得到这个block所在的datanode的列表,有几个副本数该列表就有几个datanode。

2.根据列表中datanode距离读取端的距离进行从小到大的排序:
a)首先查找本地是否存在该block的副本,如果存在,则将本地datanode作为第一个读取该block的datanode
b)然后查找本地的同一个rack下是否有保存了该block副本的datanode
c)最后如果都没有找到,或者读取数据的node本身不是datanode节点,则返回datanode列表的一个随机顺序。本节关于Hadoop集群相关内容介绍完毕。
分享到:
评论

相关推荐

    Hadoop集群资源硬件建议

    - **MapReduce**:这是一个批量处理框架,负责从HDFS中读取数据,并进行分布式计算。MapReduce的特点是会读取整个数据集,并且数据的写入量取决于具体的应用场景。例如,ETL处理是读写密集型应用,而机器学习则主要...

    理解hadoop集群

    Hadoop集群的搭建和管理是一项复杂的工作,它需要考虑硬件资源、网络配置、数据安全和监控等多个方面。通过理解Hadoop集群的基本原理,可以更好地部署和优化Hadoop环境,实现对大数据的高效处理和分析。

    Java访问Hadoop集群源码

    在Java编程环境中,访问Hadoop集群是一项常见的任务,特别是在大数据处理和分析的场景下。Hadoop是一个开源框架,主要用于存储和处理大规模数据集。本文将深入探讨如何利用Java API来与Hadoop集群进行交互,包括读取...

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    - 在Eclipse中配置Hadoop集群的详细信息,包括NameNode和JobTracker的地址。 - 测试连接以确保一切正常。 **3. 开发Map-Reduce应用程序** - 使用Eclipse创建新的Map-Reduce项目。 - 编写Map和Reduce函数。 - 配置...

    Linux下Hadoop的分布式配置和使用.doc

    本文档主要介绍了在 Linux 系统下 Hadoop 的分布式配置和使用,涵盖了从集群网络环境介绍到 Hadoop 集群配置和启动、Hadoop 使用等多个方面的知识点。 一、集群网络环境介绍 在配置 Hadoop 集群之前,需要先配置...

    Hadoop集群安装指南

    其中,文件权限的设置主要是为了确保Hadoop文件系统能够正确地写入和读取数据;格式化文件系统是初始化HDFS的操作,为存储数据做准备;启动Hadoop服务则涉及到启动Hadoop集群中的多个守护进程,包括NameNode和...

    Hadoop数据迁移--从Oracle向Hadoop

    Recorder类中应包含与Oracle数据库中表字段相对应的数据成员,并且需要实现write和readFields方法,这两个方法用于将数据写入到HDFS和从HDFS读取数据。 MapReduce程序大致分为三个主要部分:Map阶段、Shuffle阶段和...

    Hadoop及Spark集群搭建文档

    学习PySpark,你需要理解RDD(弹性分布式数据集)、DataFrame和Spark SQL的概念,以及如何使用这些工具进行数据读取、转换和写入操作。 在压缩包中,可能包含以下文档: 1. Hadoop集群搭建教程:详述上述Hadoop和...

    基于Hadoop集群平台的计算架构.docx

    基于 Hadoop 集群平台的计算架构 本文介绍了基于 Hadoop 集群平台的计算架构,讨论了 Hadoop 的...通过本文,读者可以了解 Hadoop 集群平台的基本原理和搭建步骤,从而更好地应用 Hadoop 集群平台进行数据处理和分析。

    Hadoop 2.2.0 配置文件

    Hadoop 2.2.0 是 Apache Hadoop ...安装完成后,进行格式化名称节点(首次安装必需)、启动服务和测试HDFS写入读取等基本操作,以验证集群的正确性。在实际生产环境中,还需要考虑容错性、扩展性和性能调优等高级话题。

    Hadoop集群搭建共10页.pdf.zip

    【描述】:Hadoop集群搭建是大数据处理中的关键步骤,它涉及到多个节点的配置、网络通信以及数据存储和处理。这个10页的PDF文档将带你逐步完成这一过程,确保你能理解并实践每个环节。 【标签】:"Hadoop集群搭建" ...

    Hadoop集群搭建(简单版)

    7. **验证安装**:通过Web UI(默认端口50070和8088)检查Hadoop集群的状态,或者使用Hadoop命令测试写入和读取文件。 8. **实战测试**:运行一个简单的WordCount程序,验证MapReduce功能是否正常。 在“微软运行...

    基于Hadoop集群平台的计算架构.pdf

    基于 Hadoop 集群平台的计算...本文对基于 Hadoop 集群平台的计算架构进行了详细的介绍,包括 Hadoop 的简介、HDFS 体系结构和 Hadoop 集群搭建等方面的知识点,为读者提供了一个全面的了解 Hadoop 集群平台的机会。

    基于Hadoop集群平台的计算架构 (2).docx

    2. 数据一致性,适合一次写入多次读取的模型。 3. 文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会有复制文件块来保证数据的安全性。 三、Hadoop 集群搭建 搭建 Hadoop 集群的主要...

    【IT十八掌徐培成】Hadoop第05天-03.数据完成性-校验和.zip

    总的来说,"IT十八掌徐培成"的Hadoop课程中关于数据完成性的这一部分,不仅涵盖了校验和的基本原理,还可能涉及到如何在实际操作中应用这些概念,例如如何配置和监控Hadoop集群的校验和设置,以及如何处理校验和不...

    Hadoop大数据期末考试重点

    4. **Secondary NameNode的作用**:Secondary NameNode并非用于缩短Hadoop集群启动时间,而是辅助NameNode合并编辑日志,减少NameNode的重启时间。 5. **Hadoop的硬件需求与可靠性**:Hadoop设计允许在普通硬件上...

    基于Hadoop集群的分布式日志分析系统研究

    HDFS与MapReduce之间存在着紧密的联系,MapReduce依赖HDFS进行数据的读取和写入,而HDFS则确保数据的可靠存储和高效访问。 ##### 2. 实验集群搭建 为了演示Hadoop的实际应用场景,本文使用4台PC机搭建了一个小型的...

    如何将Lucene索引写入Hadoop?

    6. **性能调优**:在实际应用中,还需要考虑如BlockCache、Shard配置、索引压缩等因素,以优化索引的读取速度和降低存储成本。 总之,将Lucene索引写入Hadoop是一项复杂但必要的任务,它允许我们在大数据环境中实现...

    Hadoop数据迁移--从Hadoop向Oracle

    为了实现上述步骤,需要确保Hadoop集群已经安装并配置好了Oracle JDBC驱动,以便MapReduce作业能够通过JDBC连接到Oracle数据库。 在Hadoop到Oracle的数据迁移过程中,还需要考虑到数据的一致性、安全性、以及可能的...

    hadoop 安装配置说明,以及相关实验等

    Hadoop集群的搭建还需要格式化HDFS文件系统,然后启动Hadoop集群。克隆VMware虚拟机后还需要对网络进行重新配置以确保各个节点间能够正确通信。 HDFS编程实践部分,需要在安装了Eclipse集成开发环境之后进行。本...

Global site tag (gtag.js) - Google Analytics