Hadoop之HDFS子框架

标签: hadoop hdfs 框架 | 发表时间:2013-02-19 15:51 | 作者:JavaMan_chen
出处:http://blog.csdn.net

体系结构


由图片可以看到HDFS主要包含这样几个功能组件
Namenode:存储文档的元数据信息,还有整个文件系统的目录结构
DataNode:存储文档块信息,并且文档块之间是有冗余备份的
这里面提到了文档块的概念,同本地文件系统一样,HDFS也是按块存储的,只不过块的大小设置的相对大一些,默认为64M。如果一个文件不足64M,那么它只存储在一个块中,而且并不会占用64M的磁盘空间,
这一点需要注意,HDFS不适用于小文件存储的原因并不是因为小文件消耗磁盘空间,而是因为小文件占用了太多的块信息,每个文档块的元数据是会存储在namenode的内存里的,因此当文档块较多的时候会十分消耗namenode的内存

从功能结构来看,namenode提供了数据定位的功能,datanode提供数据传输,也就是客户端在访问文件系统的时候是直接从datanode里面读取数据的,而不是namenode

从部署结构来看,namenode作为系统的唯一单点,如果一旦出现问题那么后果是十分危险的,整个文档系统将面临瘫痪,HDFS针对此设计了secondNameNode,用来备份namenode的数据

从目录结构来看,namenode由两部分信息组成
fsimage用来封装文件系统的元数据信息(包括文档的访问时间、访问权限,所包含的数据块等)
edits用来记录文档系统的操作日志
当namenode启动的时候,fsimage会被加载到内存,然后对内存里的数据执行edits所记录的操作,以确保内存所保留的数据处于最新的状态。
当namenode启动后,所有对文件系统元数据的访问都是从内存中获取的,而不是fsimage。fsimage和edits只是实现了元数据的持久存储功能,事实上所有基于内存的存储系统大概都是采用这种方式
这样做的好处是加快了元数据的读取和更新操作(直接在内存中进行),但是也带来了负面的影响,当edits内容较大时,namenode的启动会变得非常缓慢
对此,secondNamenode提供了将fsimage和edits聚合的功能,首先将namenode里的数据拷贝过来,然后执行merge聚合操作,在将聚合后的结果返回给namenode,并且在本地保留备份,这样不但加快了namenode的启动速度,也对namenode的数据增加了冗余。

IO操作

hdfs读取文件流程

首先,连接到分布式文件系统,从namenode里获取要访问的文件由哪些块组成,每一个块的存储地址是多少
然后,定位到指定的datanode去读取文件
注意:每个块的存储地址是在hadoop启动之后才加载到namenode的内存里的,而不是持久化存储到namenode本地
namenode和datanode具备心跳通信的功能,它会定时从datanode那里收到一些反馈,包括block的存储地址信息等等

hdfs写文件流程

首先同样是连接到分布式文件系统,向namenode发送创建文件的命令
namenode保存文档的元数据信息之后会调度具体的datanode来执行数据流的写入操作,写入成功后,需要执行冗余备份,将Block复制多份,每一分存储到不同的机器节点中,防止单点故障的出现
使用HDFS来存储数据,每个block至少要备份一份,默认是3份,如果没有指定备份,或者备份的过程中出现了异常,则文件的写入操作不会成功

hdfs不适用的场景

1.低延迟的数据访问
HDFS主要针对大文件来设计的,多用于线下的数据分析,对于线上应用并且及时性要求较高的系统,可尝试使用Hbase
2.大量小文件
消耗namenode内存,可以使用SequenceFile或MapFile来作为小文件的容器
3.多线程写入,随机写入
HDFS系统中,每个文件只能并发开启一个Writer,并且写入操作只能在文件的末尾进行

作者:JavaMan_chen 发表于2013-2-19 15:51:17 原文链接
阅读:77 评论:0 查看评论

相关 [hadoop hdfs 框架] 推荐:

Hadoop之HDFS子框架

- - CSDN博客云计算推荐文章
由图片可以看到HDFS主要包含这样几个功能组件. Namenode:存储文档的元数据信息,还有整个文件系统的目录结构. DataNode:存储文档块信息,并且文档块之间是有冗余备份的. 这里面提到了文档块的概念,同本地文件系统一样,HDFS也是按块存储的,只不过块的大小设置的相对大一些,默认为64M.

Hadoop剖析之HDFS

- - CSDN博客数据库推荐文章
Hadoop的分布式文件系统(HDFS)是Hadoop的很重要的一部分,本文先简单介绍HDFS的几个特点,然后再分析背后的原理,即怎样实现这种特点的. 这是HDFS最核心的特性了,把大量数据部署在便宜的硬件上,即使其中某些磁盘出现故障,HDFS也能很快恢复丢失的数据. 这个的意思是HDFS适合一次写入,多次读取的程序,文件写入后,就不需要修改了.

hadoop深入研究:(一)——hdfs介绍

- - CSDN博客云计算推荐文章
转载请注明出处: http://blog.csdn.net/lastsweetop/article/details/8992505. 这里的非常大是指几百MB,GB,TB.雅虎的hadoop集群已经可以存储PB级别的数据.  hdfs的高可用是用软件来解决,因此不需要昂贵的硬件来保障高可用性,各个生产商售卖的pc或者虚拟机即可.

Hadoop优化 第一篇 : HDFS/MapReduce - leocook

- - 博客园_首页
比较惭愧,博客很久(半年)没更新了. 最近也自己搭了个博客,wordpress玩的还不是很熟,感兴趣的朋友可以多多交流哈. 地址是:http://www.leocook.org/. 另外,我建了个QQ群:305994766,希望对大数据、算法研发、系统架构感兴趣的朋友能够加入进来,大家一起学习,共同进步(进群请说明自己的公司-职业-昵称).

flume写入hadoop hdfs报错 Too many open files

- - CSDN博客云计算推荐文章
网络搜索,怀疑linux nofile超过最大限制,当前设置大小1024,默认值. 而查看flume进程打开的文件数量为2932(这个比较奇怪,怎么超过1024了呢. 1.修改nfile配置文件,手工增加nofile的大小. 2.重启flume进程,也就是进程29828,问题解决. 作者:hijk139 发表于2013-2-17 16:37:34 原文链接.

Apache Hadoop 1.0.0支持Kerberos验证,支持Apache HBase,提供针对HDFS的RESTful API

- - InfoQ中文站
海量数据框架Apache Hadoop怀胎六年终于瓜熟蒂落发布1.0.0版本. 本次发布的核心特性包括支持Kerberos身份验证,支持Apache HBase,以及针对HDFS的RESTful API. InfoQ就此次发布请Apache Hadoop项目的VP——Arun Murthy回答了几个问题.

Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?

- - ITeye博客
HDFS使用 集中式单一节点架构(NameNode)来维护文件系统元数据,而在Swift中,元数据 分布在整个集群中并拥有多个副本. 注意:集中式元数据存储使HDFS存在单点故障和扩展性问题,因此规模越大就性能越低,就越难扩展甚至不能扩展,所幸的是HDFS2使用NameNode HA和HDFS Federation解决了这两个问题.

HDFS-压缩

- - Java - 编程语言 - ITeye博客
文件压缩带来了两大益处1)减少存贮空间2)加速网络(磁盘)传输. 基于大数据的传输,都需要经过压缩处理. 压缩格式 工具 算法 文件扩展名 可分块. Java代码 复制代码 收藏代码. 24.        // io.compression.codecs 定义列表中的一个 . Native gzip 库减少解压缩时间在50%,压缩时间在10%(同java实现的压缩算法).

HDFS架构

- - 数据库 - ITeye博客
       在阅读了GFS的论文之后,对GFS的框架有了基本的了解,进一步学习自然是对HDFS的解析,不得不说,之前对GFS的一些了解,对理解HDFS还是很有帮助的,毕竟后者是建立在前者之上的分布式文件系统,二者在框架上可以找到很多的共同点,建议初次接触HFDS的技术人员可以先把GFS的那篇论文啃个两三遍,毕竟磨刀不砍柴工.

分布式计算开源框架Hadoop入门实践

- - ITeye博客
一、分布式计算开源框架Hadoop实践. 在 SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到. 但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问 控制以及统计的工作.