HDFS是Hadoop文件抽象中的一种实现方式,Hadoop中有很多种实现方式,HDFS是其中一种。mapreduce对很多文件系统提供支持,但是处理大数据是你还是需要选一个方便的文件系统,比方说HDFS。
HDFS是Hadoop Distributed FileSystem 的简称,他是一个以流式数据访问模式,来存储超大文件,运行于商用硬件上的集群。实际上hdfs除了一部分接口基本实现方式不同之外,一部分基本操作命令和传统linux操作是一致的。
下面简单说说HDFS的基本概念。
HDFS数据块
HDFS的数据块大小为64MB,HDFS的文件被划分为过个分块存储,但是大小小于一个块的文件不会占据整个块的空间。HDFS之所以设置块很大,是为了减少磁盘的寻址速度,而主要依靠磁盘传输速度。对分布式系统块抽象的好处有两点:1 文件的大小可以大于磁盘的大小,反正也是分着存。2使用块抽象,简化了存储子系统的设计,很多信息,比方说运行的要求权限等等都可以省略了。
HDFS为两种节点,namenode和datanode,那么namenode为管理者,储存文件系统树上的文件和目录,这些文件储存为命名空间镜像和编辑日志文件,datanode为工作者节点,在这两种节点中存在一种叫做client的存在,clinet是用户用来与namenodedatanode交互用的文件系统。
hdfs接口,
Hadoop是由java编写的。java api可以调用所有hadoop的交互操作,Hadoop实际支持很多接口,但是好吧,还是用java吧。
基本的操作如下:open() 函数,返回FSDataInputStream对象,继承自java的datainputstream接口,支持随机访问。
create() 函数,原型 public FSDataOutputSream create(path f) throw IOException 请注意,返回的是FSDataOutputSream类型,
public boolean mkdirs(path f) throws IOException 创建目录
seek() 函数,定位文件位置,可以定位于文件中的任意绝对位置。
代码之类的东西比较难记,就不多说了,重点在于理解理念。
数据流,
数据流中的操作主要分为两种:文件读取,文件写入。
namenode管辖着文件的目录,错误等信息,client可能也是datanode节点。
读取文件。
写入节点。