HDFS是Hadoop的核心模块之一,围绕HDFS是什么、HDFS的设计思想和HDFS的体系结构三方面来介绍。

Hadoop的设计思想受到Google公司的GFS设计思想的启示,基于一种开源的理念实现的分布式分布式文件系统。HDFS的设计基础与目标如下。

1)硬件错误(Hardware Failure)是常态,因而需要数据冗余技术。

2)流失数据访问(Streaming Data Access),即数据批量读取而非随机读写,Hadoop擅长做数据分析而不是事务处理。

3)大规模数据集(Large Data Sets)。

4)简单一致性模型(Simple Coherency Model),即为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,也就是文件一经写入,关闭,就再不要修改。

5)“Moving Computation is Cheaper than Moving Data”,通俗理解,程序采用“数据就近”原则分配节点执行。

6)Portability Across Heterogeneous Hardware and Software Platforms,即有着很强的可扩展性。

HDFS体系结构如图1所示,它采用主从结构,Namenode属于主段,Datanode属于从端。

Namenode

1)管理文件系统的命名空间。

2)记录 每个文件数据快在各个Datanode上的位置和副本信息。

3)协调客户端对文件的访问。

4)记录命名空间内的改动或者空间本省属性的改动。

5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。

从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的作用。

Datanode

1)负责所在物理节点的存储管理。

2)一次写入,多次读取(不修改)。

3)文件由数据库组成,一般情况下,数据块的大小为64MB。

4)数据尽量散步到各个节点。

从社会学的角度来看,Datanode是HDFS的工作者,发挥按着Namenode的命令干活,并且把干活的进展和问题反馈到Namenode的作用。

客户端如何访问HDFS中一个文件呢?具体流程如下。

1)首先从Namenode获得组成这个文件的数据块位置列表。

2)接下来根据位置列表知道存储数据块的Datanode。

3)最后访问Datanode获取数据。

注意:Namenode并不参与数据实际传输。

数据存储系统,数据存储的可靠性至关重要。HDFS是如何保证其可靠性呢?它主要采用如下机理。

1)冗余副本策略,即所有数据都有副本,副本的数目可以在hdfs-site.xml中设置相应的复制因子。

2)机架策略,即HDFS的“机架感知”,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率。

3)心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,若是Datanode失效造成副本数量下降,并且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行重新复制。

4)安全模式,Namenode启动时会先经过一个“安全模式”阶段。

5)校验和,客户端获取数据通过检查校验和,发现数据块是否损坏,从而确定是否要读取副本。

6)回收站,删除文件,会先到回收站/trash,其里面文件可以快速回复。

7)元数据保护,映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本。

8)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。

附录:HDFS 文件操作

对HDFS文件操作有两种方式,一是命令行方式,二是HDFS API方式。

HDFS常用命令归总

1)列出HDFS下的文件

hadoop fs -ls

2)上传本地文件到HDFS

hadoop fs -put  dir1  dir2

说明:dir1,本地文件系统文件目录;dir2,HDFS文件系统文件目录

3)下载HDFS文件到本地

hadoop fs -get dir1  dir2

说明:dir1,本地文件系统文件目录;dir2,HDFS文件系统文件目录

4)创建HDFS文件

hadoop fs -mkdir  dir

5)删除HDFS下的文档

hadoop fs -rmr dir

6)查看HDFS下某个文件的内容

hadoop fs -cat   文件路径

7)查阅帮助

获取所用Hadoop版本关于HDFS完整的命令列表,可执行

hadoop fs

或者

使用help来显示某个命令的用法与简短描述。

例如 要了解ls,可执行

hadoop fs -help ls

Source:

http://www.wangluqing.com/2014/02/hadoop-hdfs/

http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

炼数成金《Hadoop数据分析平台》第三课分布式文件系统HDFS

漫画HDFS工作原理

学习Hadoop整体理解的更多相关文章

  1. 零基础学习hadoop到上手工作线路指导

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  2. 零基础学习Hadoop

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  3. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  4. 零基础学习hadoop开发所必须具体的三个基础知识

    大数据hadoop无疑是当前互联网领域受关注热度最高的词之一,大数据技术的应用正在潜移默化中对我们的生活和工作产生巨大的改变.这种改变给我们的感觉是“水到渠成”,更为让人惊叹的是大数据已经仅仅是互联网 ...

  5. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  6. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  7. 零基础学习hadoop到上手工作线路指导(初级篇)

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  8. [学习线路] 零基础学习hadoop到上手工作线路指导(初级篇)

    about云课程最新课程Cloudera课程   零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了. ...

  9. 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

      此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...

随机推荐

  1. mysql语句分析

    explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1,id   select识别符.这是select的查询序列号.2,select_type 可以为一下任何一种类型simple ...

  2. xss跨站攻击测试代码

    '><script>alert(document.cookie)</script> ='><script>alert(document.cookie)& ...

  3. PHP undefined index的解决办法

    方法1:服务器配置修改 修改 php.ini 中的 error配置下错误显示方式:将error_reporting = E_ALL | E_STRICT 修改为 error_reporting = E ...

  4. 一个简单的web服务器

    写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...

  5. c# 重写索引

    //using System;//using System.Collections.Generic;//using System.Text; //namespace 索引//{//    class ...

  6. c语言的头文件-不是c++类的头文件?

    下面的概述是参考的这篇文章:http://blog.csdn.net/bingxx11/article/details/7771437 c语言编程中也有,也需要头文件, 头文件不只是C++的类才需要! ...

  7. 使用Cydia Substrate 从Native Hook Android Java世界

    这里介绍了如何使用Cydia Substrate Hook安卓Java世界.这篇文章介绍如何从Native中Hook 安卓Java世界. 手机端配置见之前文章. 一.建立工程 建立一个Android工 ...

  8. html 构建响应式网站之viewport的使用

    在网页代码的头部,加入一行viewport元标签 <!DOCTYPE html> <html lang="en"> <head> <met ...

  9. HDOJ 1203 I NEED A OFFER!(01背包)

    10397507 2014-03-25 23:30:21 Accepted 1203 0MS 480K 428 B C++ 泽泽 题目链接:http://acm.hdu.edu.cn/showprob ...

  10. php方法 隐藏手机号中间四位

    $num = "13966778888"$str = substr_replace($num,'****',3,4);