第三章 第四节 HADOOP文件系统

时间:2022-09-24 20:27:48

         HADOOP有一个文件系统的抽象概念,HDFS只是它的一个实现。JAVA抽象类

org.apache.hadoop.fs.FileSystem表示客户端到HADOOP文件系统的接口,还有其它

几个具体实现。HADOOP经常用的如表3-1所示:

第三章 第四节 HADOOP文件系统

第三章 第四节 HADOOP文件系统


         HADOOP提供了许多文件系统的接口,它经常使用URI来选择正确的文件系统来交互。例如,

上一节中我们遇到的操作HADOOP文件系统。查看本地文件系统的根下所有文件,输入:

% hadoop fs -ls file:///
         尽管可以运行MapReduce程序(有时候很方便)来访问任何一个这些文件系统,但是当你

处理大批量数据时你应该选择一个有数据本地优化的分布式文件系统,特别是HDFS。


接口

         HADOOP是使用JAVA实现的,所以大部分HADOOP 文件系统的交互使用JAVA API做为中介。

例如,文件系统shell,是一个JAVA应用程序使用FileSystem的JAVA类来提供文件系统操作。其它

文件系统接口会简要的讨论下。它些接口大部分使用HDFS,因为HADOOP中其它的文件系统

都已经有工具来访问底层的文件(FTP的FTP客户端,S3的S3工具等),但是其中大部分会与HADOOP

文件系统一起工作。


HTTP

         HADOOP暴露它的文件系统接口为JAVA API,使非JAVA的应用程序访问HDFS变得很棘手。通过

WebHDFS协议暴露的HTTP REST API使其它语言与HDFS交互变得简单。记住HTTP接口比本地JAVA

客户端要慢,应该尽可能的避免传输大数据。

         使用HTTP有两种方式访问HDFS:直接访问,HDFS的后台进程处理客户端的HTTP请求;代理访问,

使用DistributedFileSystem API代表客户端访问HDFS。这两种方式在表3-1中说明。它们都使用

WebHDFS协议。

第三章 第四节 HADOOP文件系统

         在第一种情形中,namenode和datanode中嵌入的网络服务器作为WebHDFS的终端(

WebHDFS默认是开启的,因为dfs.webhdfs.enabled被设置为true)。文件元数据操作由

namenode处理,文件读(写)操作首先发送到namenode,然后它发送一个HTTP转发给

客户端指示datanode读(写)文件数据。

         第二种方式依赖一个或多个独立的代理服务器(代理是无状态的,所以他们可以运行在

一个标准的负载均衡器之后)。所有到集群的通信须通过代理,所以客户端不直接访问namenode

和datanode。这样可以实行更严格的防火墙以及带宽限制等。通常在位于不同的数据中心的

HADOOP集群之间使用代理,或在外部网络访问一个运行在云上的HADOOP集群时。

         HttpFS代理和WebHDFS一样暴露了同样的HTTP(HTTPS)接口,所以客户端即可以使用

webhdfs也可以使用swebhdfs的URI来访问。HTTPFS代理启动与namenode和datanode的

后台进程无关,使用httpfs.sh脚本,默认监听14000端口。


C

         HADOOP提供一个名叫libhdfs的C库来映射JAVA FileSystem接口(它作为一个C库来访问

HDFS,但实际上它可以用来访问HADOOP的任意文件系统)。它使用JNI来调用JAVA文件系统。

同样有一个libwebhdfs库,使用前方描述的WebHDFS接口。

         C API和JAVA的非常相似,但是它的更新通常比JAVA慢,所以一些新的特性可以不支持。你可

以在include目录找到hdfs.h的头文件。

         Apache HADOOP的二进制压缩文件自带了构造好的LUNUX 64位平台的libhdfs,但是对于

其它平台,你需要根据BUILDING.txt(在源文件目录的最上层)的指示来构造。


NFS

          可以使用HADOOP的NFSv3网关来把HDFS挂载到本地文件系统。然后你可以使用UNIX工具(如

ls和cat)与文件系统交互,上传文件,使用POSIX库通过程序来访问文件系统。可以给文件添加内容,

但是不可以随意修改文件,因为HDFS只能在文件末尾写入。

         查阅HADOOP文档看如何配置运行NFS网关及从客户端连接它。


FUSE

          Filesystem in Userspace(FUSE)略....优先使用NFS。