一. hdfs设计的动机

为大规模分布式计算准备的分布式文件系统,并非实时性要求很高的文件系统。

二. 设计的取舍

1. 因为要求有高吞吐量,所以牺牲读取文件的实时性,实时性要求高的分布式文件系统可以选择hbase

2. 使用廉价的机器,所以任意一个存储节点可能会挂掉,将之视为hadoop的常态

3. 流式存储,一次写入,多次读取进行数据迭代,写入也尽量采取在文件的末尾进行追加的方式,在任意一处写入数据的操作代价很高,尽量不要做

4. 不鼓励使用大量的小文件处理,每个小文件都需要都有一个元数据来存储这些小文件的信息,并且这些信息都存储在namenode上,一条元数据大概是150K左右的大小,而namenode的容量是有限的

三. hdfs中的块

hdfs中的块与普通文件系统中的块(这里是逻辑块,不同于磁盘中的块)的概念类似,都是文件系统可操作的最小单位,但是大小差别很大,常见的文件系统的块通常为磁盘块大小(512字节)的整数倍,而hdfs中的块默认大小为64M

hdfs的块之所以那么大,是为了尽快寻址,并且hadoop中的不鼓励处理小文件,而大小小于64M的文件会被单独占一个块,只是这个块的大小等于文件的大小,并不是64M

hdfs中的块很适合做备份,通常每个块都会有三个备份,然后存储在不同的节点上,即使其中一个节点挂掉,仍然可以找到备份的数据块(如何将块尽量的比较均匀分布在不同的节点上?)

四.namenode和datanode

namenode是管理者,datanode是执行者

namenode存储着文件块的位置、索引信息、namespace,这些信息在系统重启时重建,还存储操作日志

datanode上存储着具体的文件块,并且在一个固定的时间段内(心跳),会向namenode报告自己的状态和块列表信息

如果namenode上的信息丢失,将是整个文件系统的灾难,所以要有一定的机制来保证文件存储的可靠性

hdfs一般通过两个机制来保证可靠性:

a. 写时copy:在namenode进行写操作(原子操作)的同时,在向本地磁盘写的同时,也会向网络上的某个机器上写同样的内容,通常通过NFS完成

b. 镜像备份:定期将namenode上的数据在另一个机器上创建镜像,进行备份,如果namenode出现问题,则通过镜像进行恢复,缺点是仍然会损失一些数据

从上述这张图中,可以看出,用户写文件并不是经过namenode进行转发,而是直接往datanode上写,然后由datanode将自己节点上块信息传给namenode,这样就避免了namenode成为系统IO的瓶颈。

五. 常见hdfs命令

1. 见$hadoop fs -help  http://hadoop.apache.org/docs/r1.2.1/file_system_shell.html    阅读帮助和文档是最好的学习命令的方式

2. 修改~/.bashrc 映射常用命令

hdfs: 一个分布式文件系统(一)的更多相关文章

  1. 【整理学习Hadoop】H D F S 一个分布式文件系统

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别 ...

  2. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  3. HDFS:分布式文件系统

    HDFS是GFS的简化版,它同一时刻只允许一个用户对同一文件进行追加写操作(GFS允许并发写).它适合存储大文件,并提供高吞吐量的顺序读/写访问. 它的早期版本两大问题,例如:单点失效和水平扩展不佳. ...

  4. configure HDFS(hadoop 分布式文件系统) high available

    注:来自尚学堂小陈老师上课笔记 1.安装启动zookeeper a)上传解压zookeeper包 b)cp zoo_sample.cfg zoo.cfg修改zoo.cfg文件 c)dataDir=/o ...

  5. Hadoop分布式文件系统(HDFS)详解

    HDFS简介: 当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区 (partition)并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统成为分布式文件系统 (D ...

  6. Hadoop分布式文件系统HDFS详解

    Hadoop分布式文件系统即Hadoop Distributed FileSystem.        当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并 ...

  7. 大数据 --> 分布式文件系统HDFS的工作原理

    分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...

  8. Hadoop分布式文件系统HDFS的工作原理

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

  9. 1)HDFS分布式文件系统 2)HDFS核心设计 3 )HDFS体系结构

    一.HDFS简介 1.HDFS:Hadoop distributed file system 一个分布式文件系统 基于流数据模式访问和处理超大文件的需要而开发 适合应用在大规模数据集上 2. 优点 处 ...

随机推荐

  1. [Hive - LanguageManual ] Windowing and Analytics Functions (待)

    LanguageManual WindowingAndAnalytics     Skip to end of metadata   Added by Lefty Leverenz, last edi ...

  2. HTML编码

    JavaScript encodeURI() 函数 JavaScript encodeURIComponent() 函数 1.encodeURI: 不编码字符① - _ * . ! ~ ' ( ) ; ...

  3. angularJS笔记

    1.MVC ng-app: html表头处,每个htnl文件只能有一个ng-app ng-controller :js文件中定义 ng-model:只要引用了angularJS就可以使用 js文件代码 ...

  4. Android强大的开源库与系统架构工具

    后来加上的,因为太强大了,android上百个可立即使用的开源库介绍:https://github.com/Trinea/android-open-project 一款功能强大且实用的开发工具可以为开 ...

  5. 第三百零六天 how can I 坚持

    今天做了件并不是我风格的事,送了张公交卡,还没送出去,好难搞啊.这天会铭记的.如果将来我们能走在一起. 中午去朝阳门拿了我的荣事达破壁机,好大啊,怎么带回家啊,还有,回家要不要买两只烤鸭啊. 今天聊了 ...

  6. Shell中的变量

    一.什么是变量 变量在 bash 环境中是非常重要的,简单的说,就是让某一个特定字符串来代表不固定的内容.举例: 那就是:『 y = ax + b 』这东西,在等号左边的(y)就是变量,在等号右边的( ...

  7. crontab 定时任务格式

    如下内容节选自<Linux Crontab 定时任务 命令详解> 用crontab -e 添加要执行的命令 添加的命令必须以如下格式: * * * * * /command path 前五 ...

  8. DBMS_ERRLOG记录DML错误日志(二)

    上一篇简单介绍了DML记录语句的限制,虽然所有的例子都是利用INSERT语句,但是LOG ERRORS语句并没有这个限制,UPDATE.DELETE和MERGE都可以使用这个语句.下面要说的就是这篇的 ...

  9. UVa 1252 Twenty Questions (状压DP+记忆化搜索)

    题意:有n件物品,每件物品有m个特征,可以对特征进行询问,询问的结果是得知某个物体是否含有该特征,要把所有的物品区分出来(n个物品的特征都互不相同), 最小需要多少次询问? 析:我们假设心中想的那个物 ...

  10. CodeForces 706B Interesting drink (二分查找)

    题意:给定 n 个数,然后有 m 个询问,每个询问一个数,问你小于等于这个数的数有多少个. 析:其实很简单么,先排序,然后十分查找,so easy. 代码如下: #pragma comment(lin ...