资源描述
One Column Text Page,One Column Text Page,One Column Text Page,One Column Text Page,One Column Text Page,第,3,讲,HDFS,HDFS,The Hadoop Distributed,(,Hadoop,分布式文件系统),目录,1,、,HDFS,简介,2,、,HDFS,常用操作,通过,web,了解,Hadoop,的活动,通过用浏览器和,http,访问,jobtracker,所在节点的,50030,端口监控,jobtracker,通过用浏览器和,http,访问,namenode,所在节点的,50070,端口监控集群,观看日志,HDFS,主要用途,提供分布式存储机制,提供可线性增长的海量存储能力,任何节点操作都可以,自动数据冗余,无须使用,Raid,,无须另行备份,为进一步分析计算提供数据基础,HDFS,设计基础与目标,硬件错误是常态。因此需要冗余,流式数据访问。即数据批量读取而非随机读写,,Hadoop,擅长做的是数据分析而不是事务处理,大规模数据集,简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改,程序采用数据就近原则分配节点执行,在,HDFS,的主从结构中,有两类节点,namenode,和,datanode,。他们以管理者,-,工作者模式工作。,HDFS,的关键运作机制,主节点,维护着文件系统树和整棵树内的所有文件和目录。,命名空间镜像文件(永久),编辑日志文件(永久),也记录着每个文件中各个数据块所在的数据节点信息。(临时记录,数据节点可能会重建),子节点,文件系统的工作节点,本地化的文件数据块,自身存储的数据块列表,子节点才是,HDFS,真正的存储和检索地点,如果想在主节点做整个集群数据的索引并检索的话,请考虑可行性,毕竟,HDFS,不擅长做巨型索引。,客户端(,client,)代表用户通过与,namenode,和,datanode,交互访问整个文件系统。可以是具体程序,也可以是应用。,HDFS,的关键运作机制,客户端,交互,HDFS,客户端提供一个类似,POSIX,的文件系统接口,类似操作系统中的文件界面,所以,用户在编程时,无需知道,namenode,和,datanode,也可以实现功能,没有,namenode,,文件系统会崩溃,文件系统上的所有文件将丢失(无法读出,因为无法定位元数据块的位置,也就无法根据,datanode,的块来重构文件)。,HDFS,的关键运作机制,没有,datanode,,文件系统不会崩溃,文件系统只是无法存储文件,也不会丢失数据。,备份组成文件系统元数据持久状态的文件。操作方法是在写入本地磁盘的同时,写入一个远程挂载的网络文件系统。,解决方案一,在运行集群时,运行一个辅助,namenode,,但不能用作,namenode,,辅助主节点是用来定期通过编辑日志合并命名空间镜像,防止编辑日志过大。主节点失效时数据会部分丢失。,解决方案二,HDFS,体系结构,NameNode,DataNode,事务日志,映像文件,SecondaryNameNode,Namenode,管理文件系统的命名空间,记录每个文件数据块在各个,Datanode,上的位置和副本信息,协调客户端对文件的访问,记录命名空间内的改动或空间本身属性的改动,nNamenode,使用事务日志记录,HDFS,元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等,VERSION,文件是,java properties,文件,保存了,HDFS,的版本号。,layoutVersion,是一个负整数,保存了,HDFS,的持续化在硬盘上的数据结构的格式版本号。,namespaceID,是文件系统的唯一标识符,是在文件系统初次格式化时生成的。,cTime,此处为,0,storageType,表示此文件夹中保存的是元数据节点的数据结构。,fsimage,文件,也即命名空间映像文件,是内存中的元数据在硬盘上的,checkpoint,,它是一种序列化的格式,并不能够在硬盘上直接修改。,当文件系统客户端,(client),进行写操作时,首先把它记录在修改日志中,(edit log),Datanode,负责所在物理节点的存储管理,一次写入,多次读取(不修改),文件由数据块组成,典型的块大小是,64MB,数据块尽量散布道各个节点,blk,_,保存的是,HDFS,的数据块,其中保存了具体的二进制数据。,blk,_.meta,保存的是数据块的属性信息:版本信息,类型信息,和,checksum,读取数据流程,客户端要访问,HDFS,中的一个文件,首先从,namenode,获得组成这个文件的数据块位置列表,根据列表知道存储数据块的,datanode,访问,datanode,获取数据,Namenode,并不参与数据实际传输,读过程图解,写入数据流程,客户端请求,namenode,创建新文件,客户端将数据写入,DFSOutputStream,建立,pipeline,依次将目标数据块写入各个,datanode,,建立多个副本,写过程图解,HDFS,的可靠性,冗余副本策略,机架策略,心跳机制,安全模式,校验和,回收站,元数据保护,快照机制,冗余副本策略,可以在,hdfs-site.xml,中设置复制因子指定副本数量,所有数据块都有副本,Datanode,启动时,遍历本地文件系统,产生一份,hdfs,数据块和本地文件的对应关系列表(,blockreport,)汇报给,namenode,副本因子参数,机架策略,集群一般放在不同机架上,机架间带宽要比机架内带宽要小,HDFS,的机架感知,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率,RackAware.py,#!/usr/bin/python #-*-coding:UTF-8 -*- import sys rack =,hadoop-node-31:rack1,hadoop-node-32:rack1,hadoop-node-49:rack2,hadoop-node-50:rack2,hadoop-node-51:rack2,192.168.1.31:rack1,192.168.1.32:rack1,192.168.1.49:rack2,192.168.1.50:rack2,192.168.1.51:rack2, ,if _name_=_main_: print / +rack.get(sys.argv1,rack0),core-site.xml,配置文件,topology.script.,/opt/modules/hadoop/hadoop-1.0.3/bin/RackAware.py,topology.script.number.args,20,然后重启,hadoop,的,namenode,和,jobtracker,,可以在,logs,里看下,namenode,和,jobtracker,的日志,看到机架感知功能已经启用了,心跳机制,Namenode,周期性从,datanode,接收心跳信号和块报告,Namenode,根据块报告验证元数据,没有按时发送心跳的,datanode,会被标记为宕机,不会再给它任何,I/O,请求,如果,datanode,失效造成副本数量下降,并且低于预先设置的阈值,,namenode,会检测出这些数据块,并在合适的时机进行重新复制,引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等,安全模式,Namenode,启动时会先经过一个安全模式阶段,安全模式阶段不会产生数据写,在此阶段,Namenode,收集各个,datanode,的报告,当数据块达到最小副本数以上时,会被认为是安全的,在一定比例(可设置)的数据块被确定为安全后,再过若干时间,安全模式结束,当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,校验和,在文件创立时,每个数据块都产生校验和,校验和保存在,.meta,文件内,客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏,如果正在读取的数据块损坏,则可以继续读取其它副本,回收站,删除文件时,其实是放入回收站,/trash,回收站里的文件可以快速恢复,可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块,打开回收站功能,在,conf/core-site.xml,添加配置:,fs.trash.interval,10080,Number of minutes between trashcheckpoints. If zero, the trash feature is disabled,重启集群,元数据保护,映像文件刚和事务日志是,Namenode,的核心数据。可以配置为拥有多个副本,副本会降低,Namenode,的处理速度,但增加安全性,Namenode,依然是单点,如果发生故障要手工切换,快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态,Hadoop,目前还不支持快照,已经列入开发计划,传说在,Hadoop 2.x,某版本里讲获得此功能,HDFS,文件操作,命令行方式,API,方式,列出,HDFS,下的文件,注意,,hadoop,没有当前目录的概念,也没有,cd,命令,上传文件到,HDFS,数据写在了哪儿(从,OS,看),将,HDFS,的文件复制到本地,删除,HDFS,下的文档,查看,HDFS,下某个文件的内容,查看,HDFS,基本统计信息,怎样添加节点?,在新节点安装好,hadoop,把,namenode,的有关配置文件复制到该节点,修改,masters,和,slaves,文件,增加该节点,设置,ssh,免密码进出该节点,单独启动该节点上的,datanode,和,tasktracker,(,hadoop-daemon.sh start datanode/tasktracker,),运行,start-balancer.sh,进行数据负载均衡,是否要重启集群?,启动某些特定后台进程而非所有后台进程,start-all.sh,的内容,脚本,负载均衡,作用:当节点出现故障,或新增加节点时,数据块分布可能不均匀,负载均衡可以重新平衡各个,datanode,上数据块的分布,谢 谢!,
展开阅读全文