HDFS设计基础与目标

  • 硬件错误是常态。因此需要冗余
  • 流式数据访问。即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理(随机性的读写数据等)。
  • 大规模数据集
  • 简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改
  • 程序采用“数据就近“原则分配节点执行

HDFS体系结构

Namenode:

  • 管理文件系统的命名空间
  • 记录每个文件数据块在各个Datanode上的位置和副本信息
  • 协调客户端对文件的访问
  • 记录命名空间内的改动或空间本身属性的改动
  • Namenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射(fsimage),文件属性等

Datanode:

  • 负责所在物理节点的存储管理
  • 一次写入,多次读取(不修改),因此不需要考虑一致性问题
  • 文件由数据块组成,典型的块大小是64MB
  • 数据块尽量散布道各个节点

Hadoop读取HDFS数据的流程:

  • 客户端要访问HDFS中的一个文件
  • 首先从namenode获得组成这个文件的数据块位置列表
  • 根据列表知道存储数据块的datanode
  • 访问datanode获取数据
  • Namenode并不参与数据实际传输

  

HDFS可靠性:

  • 冗余副本策略

  hdfs-site.xml中指定,副本越大越安全,但是资源利用率越低。

  • 机架策略

  3份副本策略:本地,本机架,其他机架。

  • 心跳机制

  Namenode周期性从datanode接收心跳信号和块报告,根据块报告验证元数据,没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求,如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制,引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等。

  • 安全模式

Namenode启动时会先经过一个“安全模式”阶段,安全模式阶段不会产生数据写,在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的。在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数。

  • 校验和
  • 回收站

删除一个文件时,其实放入回收站/trash中,回收站中的文件可以快速恢复,通过设定时间阈值,当超过这个阈值,就被彻底删除并释放占用的数据块。

  • 元数据保护
  • 快照机制

HDFS中Namenode的持久化机制:

HDFS 在解决namenode元数据持久性问题时,采用了一种事物日志(transaction log,called EditLog) + 文件系统镜像文件(FsImage)的办法。日志文件和镜像文件都存储在主机本地文件系统中。  当HDFS运行时,在内存中有一份整个文件系统元数据的镜像。当对HDFS进行修改性操作时,系统只修改内存中的文件系统元数据镜像,并在事物日志中添加操作记录,并不及时修改硬盘中的FsImage文件。只有当namenode下次启动时,系统会从磁盘上同时读取EditLog 和 FsImage两个文件,并根据EditLog中记录的操作来修改(或者叫更新)FsImage,然后将新版本的FsImage写回磁盘并清空EditLog。这时候,磁盘和内存中的FsImage文件都是最新的。

HDFS文件操作

命令行方式

  

hadoop fs –put <local path> <hdfs path> //将本地文件放入HDFS中
hadoop fs –ls <hdfs path> //显示文件目录
hadoop fs –get <hdfs path> <local path> //将Hdfs中的数据拷贝到本地
hadoop fs –rmr <file> //删除文件,如果开启回收站了会到回收站里面
hadoop fs –cat <file path> //查看文件内容
hadoop dfsadmin –report //查看hdfs目前状态

注:有些地方命令是hadoop dfs …..这个跟hadoop fs一样的,没什么区别。

JAVA API方式

这个就不多说了。。。

Hadoop学习-HDFS篇的更多相关文章

  1. Hadoop 学习 HDFS

    1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网 ...

  2. hadoop学习;hdfs操作;执行抛出权限异常: Permission denied;api查看源代码方法;源代码不停的向里循环;抽象类通过debug查找源代码

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/26587251 eclipse快捷键alt+s ...

  3. Hadoop学习-hdfs安装及其一些操作

    hdfs:分布式文件系统 有目录结构,顶层目录是:  /,存的是文件,把文件存入hdfs后,会把这个文件进行切块并且进行备份,切块大小和备份的数量有客户决定. 存文件的叫datanode,记录文件的切 ...

  4. hadoop学习笔记(四):HDFS文件权限,安全模式,以及整体注意点总结

    本文原创,转载注明作者和原文链接! 一:总结注意点: 到现在为止学习到的角色:三个NameNode.SecondaryNameNode.DataNode 1.存储的是每一个文件分割存储之后的元数据信息 ...

  5. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  6. Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  7. Hadoop基础-HDFS安全管家之Kerberos实战篇

    Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...

  8. 【Hadoop学习之四】HDFS HA搭建(QJM)

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 由于NameNode对于整个HDF ...

  9. hadoop之HDFS学习笔记(一)

    主要内容:hdfs的整体运行机制,DATANODE存储文件块的观察,hdfs集群的搭建与配置,hdfs命令行客户端常见命令:业务系统中日志生成机制,HDFS的java客户端api基本使用. 1.什么是 ...

随机推荐

  1. java之package与import

    我就以package与import开始吧. package的作用其实就是c++的namespace的作用,防止名字相同的类产生冲突,只是实现的机制不一样,java编译器在编译时,直接根据package ...

  2. Ubuntu14.10下解决chromium浏览器无法安装adobe flash的问题

    本文参考了一下资源和博客,在此提出表示感谢: http://my.oschina.net/u/209016/blog/290067 http://ubuntuhandbook.org/index.ph ...

  3. 对面试题(剑指offer)产生的一些思考。

    零散的思绪.另外,推荐<剑指offer>.本文初期大部分思考都从剑指引发. 面试题不单单只是用来面试.其中有很多编程的经验可以学习.就如同我们当年的考试:) 1:鲁棒性的一个方面:边界条件 ...

  4. mysql中函数DISTINCT,group by,CONCAT及GROUP_CONCAT的使用

    一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是 ...

  5. Ubuntu安装字体的方法

    基本步骤如下: 1. 将要安装的字体放在一个文件夹下,以/home/UsrName/Download/Font为例 2.在终端中输入 sudo cp -r /home/UsrName/Download ...

  6. Tea加密算法和XxTea加密算法

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...

  7. WordPress 实用SEO插件总结

    原文地址:http://www.chinaz.com/web/2013/1122/328044.shtml#changyan_area WordPress- seo扩展插件众多,因此对于初学者来说会看 ...

  8. 为什么和其他语言相比C语言是快速的语言

    初入门的我们经常听见别人说"真正的程序员用C语言编程,C是最快的语言因为它是最靠近及其底层的语言."那么和其他语言相比C语言到底有什么特别的呢? C语言没有什么特别,这就是它快速的 ...

  9. python 性能优化

    1.优化循环 循环之外能做的事不要放在循环内,比如下面的优化可以快一倍 2.使用join合并迭代器中的字符串 join对于累加的方式,有大约5倍的提升 3.使用if is 使用if is True比i ...

  10. Mac 下纯lua(一)

    Lua 介绍 什么是lua - lua是一种跨平台开发脚本语言. Lua 历史 学校 University of Rio de Janeiro 国家 巴西 作者 Roberto Ierusalimsc ...