视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Hadoop权威指南学习笔记三
2020-11-09 14:09:09 责编:小采
文档


HDFS简介 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步。 Hadoop说白了就是一个提供了处理分析大数据的文件集群,其中最重要的无疑是HDFS(Hadoop Distributed File System)即Had

HDFS简介

声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步。

Hadoop说白了就是一个提供了处理分析大数据的文件集群,其中最重要的无疑是HDFS(Hadoop Distributed File System)即Hadoop分布式文件系统。

1、

HDFS是一种以流式数据访问模式(一次写入多次读取的模式)存储超大文件的系统。其不需要的高端的硬件系统,普通市面上的硬件就能满足要求。

目前不适合应用HDFS的有:低延迟的数据访问、大量小的文件、多用户写入任意修改文件等。

2、

HDFS存储以块为单位,通常块大小为M。之所以要分为这么大的块,主要是为了减少寻址时间,因为目前来看,数据传输速率越来越快,对于HDFS处理大数据时,如果频繁的寻址必然会使得运行时间变长。

HDFS集群有两种节点名称节点和多个数据节点。其中名称节点充当管理者,数据节点充当工作者。名称节点相当于HDFS文件树上的枝干分叉点,而数据节点则标注着所有块的存储信息。所以名称节点的丢失就意味着HDFS的瘫痪。因此Hadoop提供了两种机制解决这一问题:

一种是复制组成文件系统元数据的持久状态文件。即在本地磁盘写入的同时也写入一个远程NFS挂载。

另一种是设置一个二级名称节点。

3、

HDFS提供命令行接口的交互。

4、

Hadoop是一个抽象的文件系统概念,HDFS是其中的一个具体实现,java抽象类org.apache.hadoop.fs.FileSystem展示了Hadoop的一个文件系统,而且有几个具体实现。

如上图所示,Hadoop提供了许多文件的接口,通常是通过URL来确定使用何种文件系统实现交互。

5、

Hadoop是java实现的所以,java接口无疑是其中重中之重,下面是java接口的一些具体实现。

(1) 数据读取:

使用URL读取数据

Java识别Hadoop文件系统的URL方案,就是通过一个FsUrlStreamHandlerFactory实例来调用在URL中的setURLStreamHandlerFactory方法。

注意:这种方法在java虚拟机中只能被调用一次,所以通常设置为static,也因此如果程序其他部件(可能不是在你控制的第三方部件)设置了一个URLStreamHandlerFactory,那么久再也不能从Hadoop读取数据。

代码:

输入运行:

% hadoop URLCat hdfs://localhost/user/tom/test.txt

结果:

Hello world Hello world

Hello world

Hello world Hell【本文来自鸿网互联 (http://www.68idc.cn)】o world

使用FileSystem API读取数据

直接看代码吧,注意看注释

(2) 数据写入

FileSystem类有一系列创建文件的方法。

public FSDataOutputStream create(Pathf) throws IOException

用create创建文件是可用exists()判断其父目录是否存在。

还有一个用于传递回调接口的重载方法 Progressable,如此一来,我们所写的应用就会被告知数据写入数据节点的进度。

package org.apache.hadoop.util;

public interface Progressable{

publicvoid progress();

}

创建文件的还可以用如下方法:

Public FSDataOutputStream append(Pathf) throws IOException

此方法允许在打开文件的末尾追加数据。

(3) 目录

FileSystem题目了创建目录的方法:

public Boolean mkdirs(Path f) thorwsIOException

(4) 查询文件系统

FileStatus类封装了文件系统中文件和目录的元数据,包括文件长度、块大小、副本、修改时间、所有者以及许可信息。

FileSystem的getFileStatus()提供了获取一个文件或目录的状态对象方法。

如果只是判断一个文件是否存在,则可以使用前文提到的exists(Path f)方法。

Hadoop有时要查询批量文件时通常要用到通配符,所以它为执行通配符提供了

Hadoop支持与Unix bash相同的通配符两个FileSystem方法:

public FileStatus[] globStatus (PathpathPattern) throws IOException

public FileStatus[] globStatus (Path pathPattern,PathFileter filter)throws IOException

通配符:

(5) 删除数据

FileSystem中的delete()方法可以永久删除目录。

public Boolean delete(Path f,Boolean recursive) throwsIOException

下载本文
显示全文
专题