hadoop笔记之hdfs
1.HDFS设计基础与目标
1.HDFS设计基础与目标
(1)硬件错误是常态,因此需要冗余。
(2)流式数据访问。即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理。
(3)大规模数据集
(4)简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改。
(5)程序采用“数据就近”原则分配节点执行。
2.HDFS体系结构
- Namenode
- Datanode
- 事务日志
- 映像文件
- SecondaryNameNode
2.1Namenode
- ○管理文件系统的命名空间
- ○记录每个文件数据块在各个Datanode上的位置和副本信息
- ○协调客户端对文件的访问
- ○记录命名空间内的改动或空间本身属性的改动
-○Namenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
2.2Datanode
- ○负责所在物理节点的存储管理
- ○一次写入,多次读取(不修改)
- ○文件由数据块组成,典型代表的块大小为64MB
- ○数据块尽量散步到各个节点
3.读取数据流程
客户端要访问HDFS中的一个文件,
(1)从namenode获得组成这个文件的数据块位置列表,
(2)根据列表知道存储数据块的datanode,
(3)访问datanode获取数据。
namenode并不参与数据实际传输
4.HDFS的可靠性
- ○冗余副本策略
- ○机架策略
- ○心跳机制
- ○安全模式
- ○校验和
- ○回收站
- ○元数据保护
- ○快照机制
4.1冗余副本策略
(1)可以在hdfs-site.xml中设置复制因子指定副本数量
(2)所有数据块都有副本
(3)Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给namenode
4.2机架策略
(1)集群一般放在不同机架上,机架间带宽要比机架内带宽要小
(2)HDFS的“机架感知”
(3)一般在本机架存放一个副本,在其它的机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率
4.3心跳机制
- namenode周期性从datanode接收心跳信号和块报告
- namenode根据块报告验证元数据
- 没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求
- 如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制
- 引发重新复制的原因还包括数据副本本身损坏、磁盘错误、复制因子被增大等等
4.4安全模式
- namenode启动时会先经过一个“安全模式”阶段
- 安全模式阶段不会产生数据写
- 在此阶段namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的
- 在一定比例(可设置)的数据块被确定为”安全“后,再过若干时间,安全模式结束
- 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数
4.5校验和
- 在文件创立时,每个数据块都产生校验和
- 校验和会作为一个单独隐藏文件保存在命名空间空间下
- 客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏
- 如果正在读取的数据块损坏,则可以继续读取其它的副本
4.6回收站
- 删除文件时,其实是放入回收站/trash
- 回收站里的文件可以快速恢复
- 可以设置一个时间阈值,当回收站里的文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块
4.7元数据保护
- 映像文件刚和事务日志是namenode的核心数据。可以配置为拥有多个副本
- 副本会降低namenode的处理速度,但增加安全性
- namenode依然是单点,如果发生故障要手工切换
4.8快照
- 支持存储某个时间点的映像,需要时可以使数据重返地球这个时间点的状态
5.HDFS文件操作
- 命令行方式
- API方式
(这个具体操作留后再讨论)
hadoop笔记之hdfs的更多相关文章
- hadoop笔记之hdfs shell操作
HDFS命令行操作 HDFS命令行操作 (以下是hadoop 1.x 版本的命令使用) 装好hadoop之前首先要进行一个格式化 hadoop namenode -format 运行之后,可以将文件夹 ...
- Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)
在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...
- Hadoop集群-HDFS集群中大数据运维常用的命令总结
Hadoop集群-HDFS集群中大数据运维常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简单涉及到滚动编辑,融合镜像文件,目录的空间配额等运维操作简介.话 ...
- Hadoop官方文档翻译——HDFS Architecture 2.7.3
HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware ...
- hadoop 2.5 hdfs namenode –format 出错Usage: java NameNode [-backup] |
在 cd /home/hadoop/hadoop-2.5.2/bin 下 执行的./hdfs namenode -format 报错[hadoop@node1 bin]$ ./hdfs nameno ...
- Hadoop 分布式文件系统 - HDFS
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...
- Hadoop 2.x HDFS新特性
Hadoop 2.x HDFS新特性 1.HDFS联邦 2. HDFS HA(要用到zookeeper等,留在后面再讲) 3.HDFS快照 回顾: HDFS两层模型 Namespa ...
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令(转)
hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...
随机推荐
- NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel
NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...
- 20151217--Ajax的一点补充
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- std::string转化大小写(C++)
#include <string> #include <algorithm> void test() { std::string strA="QQQQWWWqqqqq ...
- Android textview 设置不同的字体大小和颜色
在实际应用中,需要将一个字符串已不同的颜色,字体显示出来.当然完全可以通过不同textview拼接出来.也可以通过一个textview来展示. 步骤如下: 1.定义不同style . 不妨如下定义2个 ...
- jquery鼠标滑过展示图片时显示详情
jquery: <script src="js/jquery.js" type="text/javascript"></script> ...
- php中如何输出当前服务器的(中国)当前时间
date_default_timezone_set('PRC');//PRC是什么?PRC是中华人民共和国啊-_- echo "今天是".date("Y年m月d日&quo ...
- SilverLight搭建WCF聊天室详细过程
收藏SL双工通信例子教程 SilverLight 4正式版发布给开发人员带来了更多功能,并且4已经支持NET.TCP协议,配合WCF开发高效率的交互应用程序已经不再是难事,本系列文章主要针对已经完成的 ...
- Windows2008 VPN登录
上一章已经讲过Windows2008RT搭建VPN服务器搭建过程,接下来说一下win2008和win8的VPN登录 win8VPN连接过程 先说win2008的VPN登录过程.很简单: 打开网络和共享 ...
- 函数 setjmp, longjmp, sigsetjmp, siglongjmp
一,相关函数接口 1,setjmp,longjmp,sigsetjmp,siglongjmp #include <setjmp.h> int setjmp(jmp_buf env); ...
- c++ 关于类构造函数的初始化列表
除了性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重 ...