欢迎投稿

今日深度:

《Hadoop权威指南》第三章Hadoop分布式文件系统,

《Hadoop权威指南》第三章Hadoop分布式文件系统,


3.1HDFS的设计

存储超大文件;流式数据访问;商用硬件;低时间延迟的数据访问,HDFS是为提高数据吞吐量应用优化的,这可能以提高时间延迟为代价,对于低延迟的访问HBase是更好的选择;大量的小文件;不支持多用户写入,任意修改文件;

3.2HDFS概念

3.2.1数据块

HDFS有类似于硬盘的块的概念,默认大小为64M。如此之大的原因是,最小化寻址开销。 对分布式文件系统的块进行抽象会带来很多好处:第一个是一个文件的大小可以大于集群上的任意一个磁盘进行存储。第二个好处是,使用抽象块而非整个文件作为存储单元。另外,块还非常适用于数据备份进而提供数据容错能力和提高可用性。

3.2.2namenode和datanode

HDFS集群有两类节点以管理者-工作者模式运行,即一个namenode和多个datanode。 namenode管理文件系统的命名空间,维护着文件系统树及整棵树内所有的文件和目录。这些信息的文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。 datanode是文件系统的工作节点。根据需要存储并检索数据块,并且定期向namenode发送他们所存储的块的列表。 namenode是指挥部是核心,因此要实现容错。第一种方式是:备份那些组成文件系统元数据持久状态的文件。另外一种是:运行一个辅助的namenode,但他不能作为namenode运行。

3.2.3联邦HDFS

namenode需要记录所有的文件与数据块的引用关系,内存将成为限制。2.x发行版本系列中引入的联邦HDFS允许系统添加namenode实现扩展。 在联邦环境下,每个namenode维护一个命名空间,包括该命名空间的文件以及所有数据块。

3.2.4HDFS的高可用性

增加HDFS的高可用的办法是,配置活动-备用namenode。实现这一目标需要在架构上做如下修改: a.namenode之间需要通过高可用的共享存储实现编辑日志的共享。 b.datanode需要同时向两个namenode发送数据块的处理报告。 c.客户端需要特定的机制来处理namenode失效问题。
故障切换与规避 故障转移控制器将活动namenode转换为备用的namenode。每一个namenode运行着一个轻量级的故障转移控制器。 当网络不稳时,也有可能启动备用namenode,这样就会可能造成系统的崩溃,规避机制能够杀死以前的namenode进程使之不影响系统的运行。

3.3命令行接口

3.4Hadoop文件系统

Hadoop有一个抽象的文件系统的概念,HDFS只是其中的一个实现。Java抽象类org.apache.hadoop.fs.FileSystem定义了一个文件系统接口,并且有几个具体实现,如下
Hadoop文件系统
文件系统 URI方案 java实现 描述       
Local file fs.LocalFileSystem 使用了客户端校验和的本地文件
系统。没有使用校验和的本地磁盘文件系统RawLocalFileSystem
HDFS hdfs hdfs.DistributedFileSystem Hadoop的分布式文件系统。将HDFS设计成与MapReduce结合使用,可以提高性能
HFTP hftp hdfs.hftpFileSystem 一个在HTTP上提供对HDFS只读访问的文件系统
HSFTP hsftp hdfs.hsftpFileSystem 在HTTPS上提供对HDFS只读访问的文件系统
WebHDFS webhdfs Hdfs.web.WebHdfsFileSystem 基于HTTP,对HDFS提供读写访问的文件系统
HAR har fs.harFileSystem 一个构建在其他文件系统上用于文件存档的文件系统
hfs kfs fs.kfs.kosmosFileSystem 类似于HDFS或是谷歌的GFS的文件系统,用C++写
FTP ftp  fs.ftp.FTPFileSystem 由FTP服务器支持的文件系统
S3(原生) S3n fs.s3native.NativeS3FileSystem 由Amazon S3支持的文件系统
S3(基于块) S3 fs.sa.S3FileSystem 由Amazon S3支持的文件系统,以块格式存储文件,以解决S3的5GB文件大小限制
分布式RAID hdfs hdfs.DistributedRaiFileSystem  
View viewfs viewfs.ViewFileSystem  

通过HTTP访问HDFS的方式有两种: 直接访问,依靠一个或者多个独立代理服务器通过HTTP访问。 FUSE,用户文件系统(FileSystem in Userspace)允许按照用户空间实现的文件系统整合成一个Unix系统。

3.5Java接口


3.5.1从Hadoop URL读取数据 InputStream in = new URL(“hdfs://post/path”).openStream(); 让java程序识别Hadoop的hdfs URL方案,还需要一些额外的工作。一种方式是通过FsUrlStreamHandlerFactory调用java.net.URL对象的setURLStreamHandlerFactory方法。每个java虚拟机只能调用一次这个方法。如果一个第三方的组件已经调用,你将无法从Hadoop总读取数据。另外一种方式就是利用FileSystem来读取文件。

3.6数据流

3.6.1剖析文件读取



3.6.2剖析文件写入





www.htsjk.Com true http://www.htsjk.com/Hadoop/40212.html NewsArticle 《Hadoop权威指南》第三章Hadoop分布式文件系统, 3.1HDFS的设计 存储超大文件;流式数据访问;商用硬件;低时间延迟的数据访问,HDFS是为提高数据吞吐量应用优化的,这可能以提高时间...
相关文章
    暂无相关文章
评论暂时关闭