赞
踩
管理网络中跨多台计算机存储的文件系统称为分布式文件系统(distributed filesystem)。Hadoop自带一个称为HDFS的分布式文件系统。
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。
HDFS的块(block)默认128MB,文件被划分为块大小的多个分块(chunk),作为单独的存储单元。
HDFS集群有两类节点以管理节点-工作节点模式运行:一个namenode(管理节点)和多个datanode(工作节点)
对namenode的容错非常重要,Hadoop提供两种机制:
通常datanode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显式地缓存在datanode的内存中,以堆外块缓存(off-heap block cache)的形式存在
namenode的内存中保存文件系统的元数据,其内存会成为限制系统横向扩展的瓶颈,联邦HDFS允许系统通过添加namenode实现扩展,每个namenode管理文件系统命名空间中的一部分。
namenode存在单点失效问题,且恢复失效namenode的时间很长。Hadoop2增加了HDFS的高可用性(HA)支持,配置了一对活动-备份(active-standby)namenode。架构上有如下修改:
HDFS有很多接口,命令行是最简单的,也是许多开发者最熟悉的。
伪分布式配置时,有2个属性项:
文件系统的基本操作
Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现,Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoop中一个文件系统的客户端接口,且有一些具体实现:
Hadoop对文件系统提供许多接口,一般使用URI来选取合适的文件系统实例进行交互,列出本地文件系统根目录下的文件命令如下:
HTTP
由WebHDFS协议提供HTTP REST API使得其他语言开发的应用能够更方便地与HDFS交互
C语言
Hadoop提供一个名为libhdfs的C语言库,是Java FileSystem接口类的一个镜像。开发滞后于Java API
NFS
使用Hadoop的NFSv3网关将HDFS挂载为本地客户端的文件系统
FUSE
使用Hadoop的Fuse-DFS功能模块,HDFS可以作为一个标准的本地文件系统进行挂载。
本节主要探索Hadoop的FileSystem类:它是与Hadoop的某一文件系统进行交互的API。
使用java.net.URL对象打开数据流,从中读取数据。格式如下图:
范例 3-2 使用FileSystem以标准输出格式显示Hadoop文件系统中的文件,如下图:
FileSystem类有一系列新建文件的方法。
FileSystem实例提供了创建目录的方法:
使用FileSystem的delete()方法可以永久性删除文件或目录
文件系统的一致模型描述了文件读/写的数据可见性。HDFS于POSIX要求不同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。