一、介绍


HDFS : 分布式文件系统(distributed filesystem),主从结构。

以流式数据访问模式来存储超大文件,运行于商用硬件集群上。

超大文件: 几百M,几百G,甚至几百TB大小的文件。

流式数据访问: 一次写入,多次读取。每次读取都涉及到数据集的大部分数据甚至是全部,因

此读取整个数据集的延迟比读取一条数据的延迟更为重要)

商用硬件:不需要运行在高昂的高可靠的硬件上。

官方介绍: http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

二、NameNode 和 DataNodes

HDFS是一个主从master/slave架构。一个HDFS集群包含一个NameNode,这是一个master服务器,用来管理文件系统的命名空间以及调节客户端对文件的访问。除此,会有一堆DataNode,通常是集群里每个节点一个DataNode,管理在此节点上的数据存储。HDFS对外暴露一个文件系统命名空间,并允许用户数据以文件的形式存储。在内部,一个文件被分成一个或多个块并且这些块被存储在一组DataNode上。NameNode来执行文件系统命名空间的操作比如打开、关闭、重命名文件和目录。NameNode同时也负责决策将数据块映射到对应的DataNode。而DataNode负责服务文件系统客户端发出的读写请求。DataNode同时也负责接受NameNode的指令来进行数据块的创建、删除和复制。

NameNode和DataNode都是被设计为在普通PC机上运行的软件程序。这些机器最典型的就是运行在一个GNU/Linux操作系统上。HDFS是Java写的;任何支持Java的机器都可以运行NameNode或者DataNode。Java语言本身的可移植性意味着HDFS可以被广泛的部署在不同的机器上。一个典型的部署就是一台专用机器来运行NameNode。集群中的其他机器每台运行一个DataNode实例。该架构并不排除在同一台机器上运行多个DataNode实例,但在实际的部署中很少的情况下会这么做。

单一NameNode的设计极大的简化了集群的系统架构。NameNode是所有HDFS元数据的仲裁和存储库。系统被设计为用户数据从来不会流经NameNode。

整体架构


假设和目标

硬件失效

硬件失效是常态而不是特例。一个HDFS集群可能包含了成百上千的服务器,每个都会存储文件系统的部分数据。而大量的组件就会导致组件出错的概率非常高,而这也意味着HDFS的部分组件会经常不工作。因此,检查缺陷和快速自动地恢复就成了HDFS的核心架构目标。

流式数据访问

运行在HDFS上的应用程序需要流式访问数据集的能力。它们不是普通的运行在普通文件系统上的程序。HDFS被设计用来应对批量计算的场景,而不是用来和用户交互。重点是数据访问的高吞吐而不是低延迟。POSIX引入了大量的硬性需求来约束应用程序,而这些需求不是HDFS的目标需求。POSIX语义在一些关键领域被认为可以提高数据吞吐率。

大规模数据集

运行在HDFS上的程序拥有大规模的数据集。一个HDFS文件可能是GB级别或是TB级别的存储。因此HDFS被调优为存储大文件。它应该提供高聚合的数据带宽并且可以在单个集群内扩展到其他的上百上千的节点。程序应该支持在单实例中存在千万级别的文件。

简单的一致性模型

HDFS程序需要一个一次写入多次读出的文件访问模型。一旦一个文件被创建、写入数据然后关闭,这个文件应该不再需要被改动。此假设简化了数据一致性的问题,并且支持了数据的高吞吐。一个Map/Reduce程序或者一个网络爬虫程序就非常符合这种模型。未来有计划支持对于文件的追加写。

“迁移计算比迁移数据成本要低”

一个程序如果在运行计算任务时能更贴近其依赖的数据,那么计算会更高效。尤其是在数据集规模很大时该效应更加明显。因为这会最小化网络消耗而增加系统整体的吞吐能力。这一假设就是:把计算靠近数据要比把数据靠近计算成本更低。HDFS提供给应用程序接口来做到移动程序使其离数据更近。

跨异构硬件软件平台的可移植性

HDFS被设计为可以很容易的从一个平台移植到另一个平台。这有利于推广HDFS,使其作为广泛首选的大数据集应用的平台。

HDFS文件访问方式


replication(复制因子):定义了每份数据保存几个副本,可以在hdfs-core.xml配置文件中设置,默认值是 3。

1. 命令行访问:

上传文件到hdfs:       hdfs dfs –put /localfile /hdfsdir

从hdfs拉文件到本地: hdfs dfs –get  /hdfsdir /localfile

查看文件: hdfs dfs –ls /

创建目录: hdfs dfs –mkdir /newDir

2. http

通过http方式访问hdfs有两种方式:

a) 直接访问: 主要是访问namenode和datanode内嵌的web服务器作为WebHDFS的端节点运行(由于dfs.webhdfs.enabled被设置为true,WebHDFS默认是启用状态)。 文件元数据由namenode管理,文件读写操作首先被发往 namenode,由namenode发送一个http重定向至某个客户端,指示以流方式传输文件数据的目的或源datanode。

b) 依靠一个或者多个代理服务器http访问hdfs。(由于代理服务是无状态的,因此可以运行在标准的负载均衡器之后。)

3. NFS

使用hadoop的NFSv3网关将HDFS挂载为本地客户端的文件系统,然后你可以使用Unix实用程序(ls和cat)与该文件系统交互。

4. C语言

提供访问hdfs的c语言库。

Java接口

待补充

参考:

《hadoop权威指南》

http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

Hadoop生态系统之HDFS的更多相关文章

  1. Hadoop概念学习系列之Hadoop 生态系统(十二)

    当下 Hadoop 已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有 Hadoop 的身影.下图是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出现的各种数 ...

  2. Hadoop生态系统如何选择搭建

    Apache Hadoop项目的目前版本(2.0版)含有以下模块: Hadoop通用模块:支持其他Hadoop模块的通用工具集. Hadoop分布式文件系统(HDFS):支持对应用数据高吞吐量访问的分 ...

  3. Hadoop组件之-HDFS(HA实现细节)

    NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和 JobTracker 都存在着单点问题,这其中以 NameNode ...

  4. Hadoop 生态系统

    1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归 ...

  5. hadoop生态系统的详细介绍

    1.Hadoop生态系统概况 Hadoop是一个能够对大量数据进行分布式处理的软件框架.具有可靠.高效.可伸缩的特点. Hadoop的核心是HDFS和MapReduce,hadoop2.0还包括YAR ...

  6. hadoop 之Hadoop生态系统

    1.Hadoop生态系统概况 Hadoop是一个能够对大量数据进行分布式处理的软件框架.具有可靠.高效.可伸缩的特点. Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YAR ...

  7. 04_Apache Hadoop 生态系统

    内容提纲: 1)对 Apache Hadoop 生态系统的认识(Hadoop 1.x 和 Hadoop 2.x) 2) Apache Hadoop 1.x 框架架构原理的初步认识 3) Apache ...

  8. Hadoop概念学习系列之Hadoop 生态系统

    当下 Hadoop 已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有 Hadoop 的身影.下图是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出现的各种数 ...

  9. Apache Kudu: Hadoop生态系统的新成员实现对快速数据的快速分析

    A new addition to the open source Apache Hadoop ecosystem, Apache Kudu completes Hadoop's storage la ...

随机推荐

  1. Codeforces Round #499 (Div. 2)

    Codeforces Round #499 (Div. 2) https://codeforces.com/contest/1011 A #include <bits/stdc++.h> ...

  2. 100-days: ten

    Title: Emma Watson(艾玛·沃森), Keira Knightley(凯拉·奈特莉) among stars(众多明星之一)  urging(竭力主张,呼吁某事) better pro ...

  3. 项目总结18-使用textarea无法判断空值之坑

    项目总结18-使用textarea无法判断空值之坑 今天使用js判断textarea为空,发现怎么都无法成功仔细做了对比测试,发现结果如下: 1-JS代码 if($("#content&qu ...

  4. Windows Server 2016离线安装.NET Framework 3.5

    windows server 2016默认是不安装.netframework3.5的,可以在添加删除程序中单独添加.但是有时候系统安装文件不在的时候,找不到安装程序就不能安装成功. 这时候单独下载do ...

  5. 最短路径(SP)问题相关算法与模板

    相关概念: 有向图.无向图:有向图的边是双行道,无向图的边是单行道.在处理无向图时,可以把一条无向边看做方向相反的两条有向边. 圈 cycle / 回路 circuit:在相同顶点上开始并结束且长度大 ...

  6. MySQL开发——【字符集、校对集】

    字符集 查看MySQL中的字符集 基本语法: show character set; 查看MySQL中的默认字符集 基本语法: show variables like ‘character_set%’ ...

  7. python 05集合

    1.集合 特性:可变的,不同元素组成,无序,集合中元素类型必须是不可变(数字,元组,字符串) 形式:s={1,"good",(2,3)} 方法:add(), clear()清空, ...

  8. Java 装箱和拆箱

    1.装箱机制 基础类型引用到其包装类型,这样就可以调用其各种方法. 例如,我们声明: Integer a = 1; 其在编译过程中会自动解释成: Integer a = Integer.valueOf ...

  9. php,单引号与双引号的区别

    代码示例 <?php $s='666'; $s2="999"; $test = 'name{$s} - {$s2}'; $test2 = "name{$s} - { ...

  10. Canny边缘检测算法的一些改进

    传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果(可以参考上一篇Canny边缘检测算法的实现).但是Canny算法本身也有一些缺陷,可以有改进的地方. 1. Canny边缘 ...