hadoop权威指南 之 HDFS

一:HDFS  hadoop distributed filesystem的设计目标
   Very large files  单个文件和 文件总和
   Steaming data access  write-once,read mary times  流式数据读取。
   commodity hardware 普通的硬件
   
  HDFS 不适合的场景:
  low latency  data access 低延迟的数据读取。对与低延迟的要求 用hbase来解决。
  lots of small files 小文件
 multiple writers, arbitrary file modifications 多用户写入,任意文件修改。
二:HDFS 的概念。
1.数据块 block
a.block是磁盘读写的最小单元。hdfs的block 默认大小是64M。设置这么大是为了减少seeking,发挥流式读取的优势。
b.hdfs 文件会被划分为块大小的chuck 分块,作为独立的存储单元。
c.使用块而不是文件作为存储单元的好处:
    第一:文件可以大于任何一个磁盘的大小,文件并不需要存储在一个磁盘上。
第二:以block作为存储单元,简化了子系统的设计,每个block大小是一定的,便于计算单个磁盘能存储多少个块;块非常适用于做数据备份。进而提高容错性和可用性。
2.namenode 管理者  datanode 工作者


namenode:管理文件系统的命名空间,维护文件系统所以的目录和文件,这些信息以命名空间镜像文件和编辑日志文件两种文件形式永久存储在硬盘上。 
namenode 也记录着所有datanode的信息,但是它不永久保存block的位置信息,因为这些信息在系统启动时由数据节点重建。
所以namenode的容错机制比datanode更加重要


datanode 是工作节点,它根据需要存储并检索数据块,并且定期想namenode发送他们所存储块的列表。


 
 
3.namenode的容错机制
第一:备份文件系统元数据的文件,当将持久状态写入磁盘的同时,写入一个远程挂载的网络文件系统 NFS
第二:运行辅助namenode,它的作用是定期编辑日志合并命名空间镜像文件。它一般运行在一个单独的物理机器上,与主节点分开,当主节点失效时,它也会随之失效,所以会丢失部分数据。这时可以从NFS上把元数据恢复到辅助namenode上。并讲辅助namenode作为新的namenode运行。
4。命令行接口
fs.default.name  :hdfs:localhost     默认8020端口上运行namenode
dfs.replication 文件系统块副本数。
5.基本文件系统操作。
创建目录:hadoop fs -mkdir xxxx
列出列表:hadoop fs -ls
从本地复制到hdfs:hadoop fs -copyFromLocal xxxx  hdfs://localhost/xxx     (hdfs://localhost可省略,在core-site。xml文件中已指定。)
从hdfs 到本地:copyToLocal


名称解释:POSIX 表示可移植操作系统接口(Portable Operating System Interface 
POSIX是可移植操作系统接口(Portable Operating System Interface)的首字母缩写。POSIX是基于UNIX的,这一标准意在期望获得源代码级的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。POSIX标准定义了操作系统应该为应用程序提供的接口:系统调用集。
一:HDFS 结构图。




 
由图可知,名称结点(NameNode)上保存着控制数据结点(DataNode)信息的元数据(Metadata)。客户端Client可以通过NameNode对元数据进行操作,也可以直接对DataNode进行读和写操作。
集群中一台机器上只运行一个NameNode实例,而集群中其它机器分别运行一个DataNode实例。NameNode是一个中心服务器,负责管理文件系统的名字空间以及客户端对文件的访问,用户能够以文件的形式在上面进行名字空间操作,比如打开、关闭、重命名文件或目录,同时NameNode还决定了数据块到数据节点的映射关系。NameNode也可以称为管理文件系统的元数据。集群中每一个节点配置一个DataNode,每个DataNode负责管理它所在节点上的数据存储。从内部看,一个文件被分成一个或多个数据块,这些块存储在一组DataNode上。同时,DataNode负责处理文件系统客户端的读写请求,在NameNode的统一调度下进行数据块的创建,删除和复制。
二:namenode的功能
1.NameNode的功能由如下几点组成:
(1)管理元数据和文件块
管理元数据指管理元数据信息。元数据信息包括名字空间、文件到文件块的映射、文件块到数据节点的映射三部分。管理文件块包括创建新文件块、文件复制、移除无效文件块以及回收孤立文件块等内容。
(2)管理命名空间
NameNode管理文件系统的命名空间。任何对文件系统元数据产生修改的操作,NameNode都会使用事务日志记录(下称EditLog)来表示;同样地,修改文件的副本系数也将往Editlog中插入一条记录,NameNode将Editlog存储在本地操作系统的文件系统中。同时,文件系统的命名空间被存储在一个称之为Fslmage(映像文件)的文件中,包括文件的属性、文件块到文件的映射以及文件块到数据节点的映射等内容,FsImage文件也是存放在NameNode所在的本地文件系统中。
(3)监听请求和处理请求
监听请求指监听客户端事件和DataNode事件。客户端事件包含名字空间的创建和删除,文件的创建、读写、重命名和删除,文件列表信息获取等信息。DataNode事件主要包括文件块信息、心跳响应、出错信息等。
处理请求指处理上面的监听请求事件并返回结果。
(4)心跳检测
DataNode会定期将自己的负载情况通过心跳信息向NameNode汇报。Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。 
NameNode 决定是否将文件映射到 DataNode 的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
实际的 I/O 事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求,要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。


DataNode的功能主要包括以下几个方面:
首先,是数据块的读写。一般是文件系统客户端需要请求对指定DataNode进行读写操作,DataNode通过DataNode的服务进程与文件系统客户端打交道。同时,DataNode进程与NameNode统一结合,对是否需要对文件块的创建、删除、复制等操作进行指挥与调度,当与NameNode交互过程中收到了可以执行文件块的创建、删除或复制操作的命令后,才开始让文件系统客户端执行指定的操作。具体文件的操作并不是DataNode来实际完成的,而是经过DataNode许可后,文件系统客户端进程来执行实际操作。
其次,是向NameNode报告状态。每个DataNode节点会周期性地向Name
Node发送心跳信号和文件块状态报告,以便NameNode获取到工作集群中DataNode节点状态的全局视图,从而掌握它们的状态。如果存在DataNode节点失效的情况时,NameNode会调度其它DataNode执行失效结点上文件块的复制处理,保证文件块的副本数达到规定数量。
最后,是执行数据的流水线复制。当文件系统客户端从NameNode服务器进程中获取到要进行复制的数据块列表(列表中包含指定副本的存放位置,亦即某个DataNode结点)后,会首先将客户端缓存的文件块复制到第一个Data
Node节点上,此时并非整个块都复制到第一个DataNode完成以后才复制到第二个DataNode节点上,而是由第一个DataNode向第二个DataNode节点复制,如此反复进行下去,直到完成文件块及其块副本的流水线复制。



































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章