2、分布式文件系统---HDFS
1、HDFS设计前提与目标
(1)硬件错误是常态而不是异常。 错误检测并快速自动恢复是HDFS最核心设计目标
(2)流式数据访问。运行在HDFS上的应用主要是以流式数据读取为主,做批量处理而不是用户交互处理,所以HDFS更关注数据访问的高吞吐量。
(3)大规模数据集。HDFS支持大文件存储,并能提供整体上高的数据传输宽带,能在一个集群里扩展到数百个节点。
(4)简单一致性模型。HDFS的应用程序需要对文件实行一次性写、多次读的访问模式。文件一经创建、写入和关闭之后就不需要再更改了。
(5)移动计算比移动数据更划算。在数据旁边执行操作效率会比较高,可以减少网络的拥塞和提高系统的吞吐量。HDFS提供了接口,以便让程序将自己移动到数据存储的地方执行。
2、HDFS体系结构
HDFS是一个主/从(Master/Slave)体系结构,如下图所示。HDFS集群拥有一个NameNode和一些DataNode。
NameNode:管理文件系统的元数据。负责管理文件系统的命名空间,记录文件数据块在每个DataNode上的位置和副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身属性的改动。
DataNode:存储实际的数据。负责他们所在的物理节点上的存储管理。
HDFS开放文件系统的命名空间以便让用户以文件的形式存储数据。HDFS的数据都是“一次写入,多次读取”,典型的块大小是64M.HDFS的文件通常按照64MB呗分割成不同的数据块,每个数据块尽可能地分散存储于不同的DataNode中。
NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录,还决定数据块到DataNode的映射。
DataNode负责处理客户的读写请求,依照NameNode的命令,执行数据块的创建、复制、删除等工作。
客户端要访问一个文件,首先客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块被存储到哪些DataNode上,然后客户端直接从DataNode上读取文件数据,NameNode不参与文件的传输。(客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接与DataNode进行交互的)
NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用影像文件(FsImage)存储文件系统的命名空间,包含文件的映射、文件的属性信息等。事务日志和映像文件都存储在NameNode的本地文件系统中。
NameNode启动时,从磁盘中读取映像文件和事务日志,把事务日志的事务都应用到内存中的映像文件上,然后新的元数据刷新到本地磁盘的新的映像文件中,这样可以截去旧的事务日志,这个过程称为检查点(Checkpoint)。
Secondary NameNode节点赋值NameNode处理映像文件和事务日志。NameNode启动的时候合并映像文件和事务日志,而Secondary NameNode会周期地从NameNode上复制映像文件和事务日志到临时目录,合并生成新的映像文件后再重新上传到NameNode,NameNode更新映像文件并清理事务日志,使得事务日志的大小始终控制在可配置的限度下。
3、HDFS可靠性措施
1)、冗余备份:DataNode使用本地文件系统来存储HDFS的数据,但他对HDFS的文件一无所知,只是用一个个文件存储HDFS的每个数据块。当DataNode启动时,他会遍历本地文件系统,产生一份HDFS数据块和本地文件对应关系列表,并把这个报告发给NameNode,这就是块报告(Blockreport)。块报告包括了DataNode上所有块的列表。
2)、副本存放:HDFS采用机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。机架内节点间的带宽比跨机架节点直接的带宽大。
3)、心跳检测:NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,NameNode可以根据这个报告验证映射和其他文件系统元数据。如果DataNode不能发送心跳消息,NameNode会标记最近没有心跳的DataNode宕机,不会发给它们任何新的I/O请求。DataNode的宕机会造成一些数据块的副本数下降并低于指定值,NameNode会不断检测需要复制的数据块,并在需要的时候重新复制。
引发重新复制的原因:DataNode不可用、数据副本的损坏、DataNode上的磁盘错误、复制因子增大等
4)、安全模式:系统启动时,NameNode会进入一个安全模式,此时不会出现数据块的写操作,文件系统不允许有任何修改。当NameNode获得的数据块达到最小副本数时,该数据块被认为是安全的。在一定比例(可配置)的数据块被NameNode检测确认安全后,再等待若干时间会自动退出安全模式。
5)、数据完整性检测:HDFS客户端软件实现了对HDFS文件内容的校验和检查,在HDFS文件创建时,会结算数据块的校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。当客户端获取文件后,他会检查从DataNode获得的数据块对应的校验和是否和隐藏文件中的相同,若不同,客户端就会认为数据块有损坏,将从其他DataNode获取该数据块的副本。
6)、空间回收:文件被删除后,并不是立即就从HDFS中移走,而是先把它移动到/trash目录里,可以恢复。
7)、元数据磁盘实效:NameNode可以配置为支持维护映像文件和事务日志的多个副本,任何对映像文件和事务日志的修改都将同步到他们的副本上。不过这会降低NameNode处理命名空间事务的速度。
8)、快照:快照支持存储某个时间的数据复制
4、HDFS常用操作
1)列出HDFS文件:$bin/hadoop dfs -ls 默认返回HDFS的‘home’目录下内容。在HDFS中没有当前工作目录概念。
2)上传文件到HDFS:$bin/hadoop dfs -put input in
3)将HDFS中文件复制到本地文件系统:$bin/hadoop dfs -get in getin
4)删除HDFS下的文档:$bin/hadoop dfs -rmr in
5)查看HDFS下某个文件:$bin/hadoop dfs -cat in/*
6)报告HDFS的基本统计信息:$bin/hadoop dfsadmin -report
7)退出安全模式:$bin/hadoop dfsadmin -safemode leave
8)进入安全模式:$bin/hadoop dfsadmin -safemode enter
9)负载均衡:$bin/start-balancer.sh
2、分布式文件系统---HDFS的更多相关文章
- 大数据 --> 分布式文件系统HDFS的工作原理
分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...
- 大数据技术原理与应用——分布式文件系统HDFS
分布式文件系统概述 相对于传统的本地文件系统而言,分布式文件系统(Distribute File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统.分布式文件系统的设计一般采用 ...
- Hadoop分布式文件系统--HDFS结构分析
转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/And ...
- 【转载】Hadoop分布式文件系统HDFS的工作原理详述
转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...
- 你想了解的分布式文件系统HDFS,看这一篇就够了
1.分布式文件系统 计算机集群结构 分布式文件系统把文件分布存储到多个节点(计算机)上,成千上万的计算机节点构成计算机集群. 分布式文件系统使用的计算机集群,其配置都是由普通硬件构成的,与用多个处理器 ...
- Hadoop 分布式文件系统 - HDFS
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...
- 分布式文件系统HDFS体系
系列文件列表: http://os.51cto.com/art/201306/399379.htm 1.介绍 hadoop文件系统(HDFS)是一个运行在普通的硬件之上的分布式文件系统,它和现有的分布 ...
- 分布式文件系统-HDFS
HDFS Hadoop的核心就是HDFS与MapReduce.那么HDFS又是基于GFS的设计理念搞出来的. HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存 ...
- Hadoop分布式文件系统HDFS详解
Hadoop分布式文件系统即Hadoop Distributed FileSystem. 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并 ...
- Hadoop分布式文件系统HDFS的工作原理
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
随机推荐
- UITableView优化那点事
forkingdog关于UITableView优化的框架其实已经能够应用在一般的场景,且有蛮多的知识点供我们借鉴,借此站在巨人的肩膀上来分析一把. 至于UITableView的瓶颈在哪里,我相信网上随 ...
- 谈谈项目中遇到的各种iOS7适配问题
由于我的项目要适配到iOS7.1, 而现在已经是9时代了,在实际工作中我也是遇到了各种奇葩的坑,所以我想尽快把遇到的iOS7适配问题和解决方案分享出来,以后这些东西可能就用处不大了. 1.字体问题 i ...
- OC中-方法到底是如何使用的?
方法:方法是Objective-C独有的一种结构,只能在Objective-C中声明.定义和使用,C语言不能声明.定义和使用. 1.类方法以+号开头,对象方法以-号开头+ (void) init; ...
- Oracle inactive session (last_call_et)
注意last_call_et的值, select s.status,s.last_call_et,s.* from v$session s where username='DDD'; 在本例中,开了个 ...
- Objective-C /iphone开发基础:协议(protocol)
protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...
- CentOS 6.4安装搭建Tomcat 7
1.检查java版本信息 java -versionjava version "1.7.0_65"OpenJDK Runtime Environment (rhel-2.5.1.2 ...
- Spring Boot 获取ApplicationContext
package com.demo; import org.springframework.beans.BeansException; import org.springframework.contex ...
- Java双向链表实现
public class DoublyLinkList { private class Data{ private Object obj; private Data left = null; priv ...
- 关于git fetch 和git pull 的区别
1.fetch 相当于是从远程获取最新版本呢到本地,不会自动merge. git fetch origin master:tmpgit diff tmp git merge tmp 2. git pu ...
- 微信平台(一)--获取access_token
事前思路准备 说在前面:如果要获取access_token,那么你需要appid,appsecret;另外需要post请求连接https://api.weixin.qq.com/cgi-bin/tok ...