Hadoop权威指南——HDFS笔记

HDFS:Hadoop Distributed FileSystem

HDFS以流式数据访问模式来存储超大文件,运用于商用硬件集群上。HDFS不支持多次写入。

数据块:首先确定一点,磁盘以数据块的大小进行数据的读/写操作,构建于磁盘之上的文件系统通过磁盘块来管理文件系统中的块,文件系统块的大小通常为磁盘块的好几倍。HDFS中也存在块的概念,默认为64MB,与其他文件系统不同的是,如果一个文件小于块的大小,它也不会占据整个块的空间。块不能太大,也不能太小。因为一个map任务通常处理一个块中的数据,如果太大,就体现不了集群的作用,而如果太小,就会导致块的数量很多,定位到块的时间将大幅度增加,

Namenode &Datanode :HDFS中的两类节点,通常由一个namenode和多个datanode构成,namenode充当管理者的角色,维护着文件系统树以及整棵树内所有的文件和目录。由于很可能存在单点故障,所以Hadoop提供了两种机制来维护,第一种是备份那些组成文件系统元数据持久状态的文件,一般配置是将持久状态写入本地磁盘的同时,写一个远程挂载的网络文件系统第二种方法是运行一个辅助的namenode,这个namenode定期会通过编辑日志合并命名空间镜像,以防止编辑日志过大

接口: Thrift,实现不同语言的包装

FUSE:用户空间文件系统

WebDAV:可以通过WebDAV来向外提供HDFS,并将HDFS作为一个标准文件系统进行访问。

Java接口:

读取数据操作:java.net.URL  FileSystem API 获取FileSystem实例的两种get方法,得到实例之后,调用open函数来获得文件的输入流。open返回的是FSDataInputStream对象,这个类继承了DataInputStream,实现了Seekable,PostitionedReadable两个接口   

写入数据操作 : create(Path f) 方法会返回一个FSDataOutputStream对象,这个方法能够为需要写入且当前不存在的文件创建父目录。还有一个重载方法Progressable,用于传递回调接口,这样就可以将数据写入到数据节点的进度通知到应用。通常我们会先调用exists()方法检查父目录是否存在,  还可以通过append方法来新建文件,FSDataOutputStream也有一个方法用于查询文件当前位置,getPos(),但是该类不允许在文件中定位,因为HDFS只允许对一个已打开的文件顺序写入,或在现有的文件的末尾追加数据。

查询文件系统:文件元数据:FileStatus,可以用fs.getFileStatus(path)

列出文件目录的内容: listStatus(Path[] f)返回的是FileStatus[]

你可能感兴趣的:(hadoop,Hadoop,HDFS)