在使用一个工具之前,应该先对它的机制、组成等有深入的了解,以后才会更好的使用它。下面来介绍一下什么是HDFS,以及他的构架是什么样的。

1.什么是HDFS?

Hadoop主要是用于进行大数据处理,那么如何有效的存储大规模的数据呢?显然,集中式的物理服务器保存数据是不现实的,其容量、数据传输速度等都会成为瓶颈。那么要实现海量数据的存储,势必要使用十几台、几百台甚至是更多的分布式服务节点。那么,为了统一管理这些节点上存储的数据,必须要使用一种特殊的文件系统——分布式文件系统。HDFS(Hadoop Distributed File System)就是Hadoop提供的一个分布式文件系统。

HDFS具有大规模数据分布式存储能力、高并发访问能力、强大的容错能力、顺序式文件访问、简单的一致性模型(一次写多次读)、数据块存储模式等优点。

2.HDFS的基本框架

2.1 Architecture

HDFS一Master-Slave模式运行,主要由两类节点:一个NameNode(即Master)和多个DataNode(即Slave),其框架图如下图所示:

2.2  NameNode、DataNode、JobTracker和TaskTracker

  1. NameNode是一个主服务器,用来管理整个文件系统的命名空间和元数据,以及处理来自外界的文件访问请求。

    NameNode保存了文件系统的三种元数据:

    • 命名空间:即整个分布式文件系统的目录结构;
    • 数据块与文件名的映射表;
    • 每个数据块副本的位置信息,每一个数据块默认有3个副本。

  2. DataNode。HDFS对外提供了命名空间,让用户的数据可以存储在文件中,但是在内部,文件可能被分成若干个数据块,DataNode用来实际存储和管理文件的数据块。

  3. JobTracker对应于NameNode,TaskTracker对应于DataNode(如上图所示),NameNode与Datanode是针对数据存储而言的,JobTracker与TaskTracker是针对与MapReduce的执行而言的。

2.3 HDFS的基本文件访问过程

  1. 用户的应用程序通过HDFS的哭护短程序将文件名发送至NameNode;
  2. NameNode接收到文件名之后,在HDFS目录中检索文件名对应的数据块,在根据数据块信息找到保存数据块的DataNode地址,将这些地址送回客户端;
  3. 客户端接收到这些DataNode地址之后,与这些DataNode并行的进行数据传输操作,同时将操作结果的相关日志提交到NameNode。

2.4 MapReduce的执行过程

  1. JobClient会在客户端通过JobClient类将对应已经配置好的参数打包成Jar,存储到HDFS,并把路径提交到JobTracker,然后由JobTracker创建每一个Task(即Map Task和Reduce Task),并将它们分发到各个TaskTracker服务中执行;
  2. JobTracker是一个master服务,软件启动后JobTracker接收Job,负责调度Job的每一个子任务task,并监控它们,如果发现有失败的Task就重新运行它;
  3. TaskTracker是运行在多个节点上的Slave服务,运行在HDFS的DataNode节点上,主动与JobTracker通信,接收作业,并负责执行每一个任务。

2.5 SecondaryNameNode

Hadoop中使用SecondaryNameNode来备份NameNode备份NameNode的元数据,以便在NameNode失效时能从SecondaryNameNode恢复出NameNode上的元数据,它充当NameNode的一个副本,它本身并不处理任何请求,周期性保存NameNode的元数据

参考链接:

[1]. hadoop JobTracker和TaskTracker——http://wz102.blog.51cto.com/3588520/1327972

[2]. HDFS学习(三)—NameNode and DataNode——http://shitouer.cn/2012/12/hdfs-namenode-datanode/

[3]. 深入理解大数据-大数据处理与编程实践

Hadoop——HDFS的构架的更多相关文章

  1. Hadoop HDFS 用户指南

    This document is a starting point for users working with Hadoop Distributed File System (HDFS) eithe ...

  2. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

  3. Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /mydir is exceeded: quota=100000 file count=100001

    集群中遇到了文件个数超出限制的错误: 0)昨天晚上spark 任务突然抛出了异常:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: T ...

  4. Hadoop程序运行中的Error(1)-Error: org.apache.hadoop.hdfs.BlockMissingException

    15/03/18 09:59:21 INFO mapreduce.Job: Task Id : attempt_1426641074924_0002_m_000000_2, Status : FAIL ...

  5. Hadoop HDFS编程 API入门系列之HDFS_HA(五)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs3; import java.io.FileInputStream;import ...

  6. Hadoop HDFS编程 API入门系列之简单综合版本1(四)

    不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import ja ...

  7. [转]hadoop hdfs常用命令

    FROM : http://www.2cto.com/database/201303/198460.html hadoop hdfs常用命令   hadoop常用命令:  hadoop fs  查看H ...

  8. org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/hive/warehouse/page_view. Name node is in safe mode

    FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteExceptio ...

  9. Hadoop HDFS文件常用操作及注意事项

    Hadoop HDFS文件常用操作及注意事项 1.Copy a file from the local file system to HDFS The srcFile variable needs t ...

随机推荐

  1. dubbo之注册管理中心

    一.在dubbo的框架中注册中心是必要的一个环节,这个也是分布式部署的一个必要环节.在dubbo的架构基本图中可以看出,基本上所有的服务都是通过注册中心进行注册,然后在通过注册中心,暴露出接口来. 二 ...

  2. cakephp中find('list')的使用

    运用一.快速实现下拉菜单 控制器中,使用find('list')返回的是键值对的数组,键名是array的第一个参数id,键值就是第二个参数content. public function list_s ...

  3. Linux工作环境搭建

    云主机工作环境搭建 网易云主机 需要申请弹性公网IP,不然需要OpenVPN才可以链接. 低于50块钱时,不能进行云主机创建. 更新yum源 cd /etc/yum.repos.d/ mkdir re ...

  4. 「日常训练」Maximum Multiple(HDU-6298)

    题意与分析 一开始以为是一条高深的数学题,跳过去了,后来查其他题目的代码的时候无意看到,一看emmmmmm 稍微思考一下就有了.\(1=\frac{1}{3}+\frac{1}{3}+\frac{1} ...

  5. 接口测试工具postman(八)上传文件接口

    涉及到选择文件的接口,在[Body]页签下,key选择File选项,会显示“选择文件”按钮,选择本地的文件

  6. 【label】标签组件说明

    label标签组件 用来改进表单组件的可用性,使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件.目前可以绑定的控件有:<button/>, <che ...

  7. NHibernate3快速上手教程FluentNHibernate配置与DBHelper(已过期,有更好的)

    很多学习NHibernate的新手很容易卡在配置文件这一关,正所谓万事开头难,上手后再配合官方文档就比较容易了. 网上关于配置文件的资料非常多,但由于版本的问题,许多老的教程中都没有明确指出类库的版本 ...

  8. Paper Reading - Learning like a Child: Fast Novel Visual Concept Learning from Sentence Descriptions of Images ( ICCV 2015 )

    Link of the Paper: https://arxiv.org/pdf/1504.06692.pdf Innovations: The authors propose the Novel V ...

  9. LeetCode 96——不同的二叉搜索树

    1. 题目 2. 解答 以 \(1, 2, \cdots, n\) 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树.当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将 ...

  10. Python高级编程-序列化

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: dict1 = {'name': 'Rob', 'age': 19, 'score': 90} 可以随时修改变量,比如把age改成 ...