Hadoop 的官方解释为:FileSystem 是文件系统的通用抽象基类,它可以作为一个分布式文件系统,也可以作为用来映射本地文件的系统。所有需要使用文件系统的用户,都需要先创建一个FileSystem 对象来进行操作。获得FileSystem 对象需要使用如下两个静态方法来实现:
public static FileSystem get(Configuration conf) throws IOException
public static FileSystem get(final URI uri,Final Configuration conf)
对于详细的使用方法,Hadoop 的官方压缩包提供了对应文档,官方网站上也提供了API文档可以参考。
(1)本地与HDFS 互传
使用Java 对接Hadoop 中的HDFS,其具体的编程思路分为以下三步:获取文件系统、进行相应操作、关闭资源。
①初始化并获取文件系统:创建Configuration 对象是初始化文件系统的第一步,Configuration 对象封装了客户端或服务端的配置信息;然后,对下面程序进行解释,该程序设置了副本数(dfs.replication)为2;最后,创建的文件系统对象,准备对文件进行操作。
②对文件进行操作:下面程序主要是将本机的“E:/ /1.txt”上传至HDFS 的根路径文件名称为“1.txt”。文件操作可以有很多种方式,具体的使用方法可以参考上面提到的官方文档。
③关闭资源:为了避免造成计算机资源浪费,关闭操作并显示。下面是程序的内容:
如图3.13 所示,运行程序结束后,显示出“over”,然后通过浏览器访问“http:/ /192.168.6.100:50070/explorer.html”,在路径中输入根目录查看已经上传了“1.txt”文件且其副本数为“2”,用户为apache。如图3.14 所示,可以通过输入命令“hadoop fs -ls /”,查看HDFS 的根路径下存在“1.txt”文件。
图3.13 文件上传情况
图3.14 HDFS 根路径目录
至此已经介绍了使用FileSystem 将本地文件上传至HDFS 的程序,除此之外,该类还提供了从HDFS 下载文件的方法moveToLocalFile(Path src,Path dst),其使用方法可以参考文档。
(2)文件夹创建与删除
FileSystem 中一些常用代码调用方法,用户可以根据自己需求在主函数中进行调用。下面程序中“hdfs”是FileSystem 的对象,调用方法mkdirs 在HDFS 中创建文件夹。
表3.3 给出了部分FileSystem 的使用方法,其中包括创建文件夹、检查文件是否存在、是否递归删除指定文件的方法,可以根据下面的代码进行参考。
表3.3 FileSystem 部分使用方法
通过在主函数中使用加入语句“client. createDir("/apache1")”,以此来调用createDir 方法创建文件夹apache1,然后使用命令“hadoop fs -ls /”,查看HDFS 中已经创建文件夹apache1,如图3.15 所示。在主函数中使用“client. deleteFile(Path f,Boolean recursive)”就可以删除文件或文件夹,该方法的第一个参数是HDFS 要删除的文件路径,第二个参数是是否递归删除。(www.xing528.com)
图3.15 HDFS 文件夹上传情况
(3)文件详情、重命名
通过FileSystem 类还可以对文件进行重命名,判断是文件或是文件夹,还可以查看文件的名称、长度、分组、权限和存储的块信息等。下面介绍了程序中使用的方法,见表3.4。
表3.4 FileSystem 部分使用方法
通过FileSystem 类的listFiles 方法可以列出指定路径的文件状态与块信息,该方法返回了一个迭代器“org.apache.hadoop.fs.RemoteIterator<LocatedFileStatus>”,该迭代器中是Locate-FileStatus 类。LocateFileStatus 类定义了文件状态,例如:文件的块信息等。该类有很多属性可以访问,具体属性见表3.5。下面程序通过循环遍历迭代器,然后显示每个文件的名称、长度、权限、分组、块信息和所在节点。
表3.5 LocateFileStatus 类属性
续表
运行结果如下:
(4)文件读取
通过FileSystem 类的open 方法可以打开HDFS 上的指定文件。该方法返回的类是“org.apache.hadoop.fs. FSDataInputStream”,返回的FSDataInputStream 类型通过InputStreamReader读取,并使用BufferReader 作为缓冲,从而读取该文本内容。
读取HDFS 的根路径下名为“banzhang.txt”文本文件的程序如下:
运行结果如下:
hello hadoop
hello hdfs
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。