HDFS两种操作方式命令行和Java API.docx

上传人:b****5 文档编号:12277221 上传时间:2023-04-17 格式:DOCX 页数:11 大小:131.21KB
下载 相关 举报
HDFS两种操作方式命令行和Java API.docx_第1页
第1页 / 共11页
HDFS两种操作方式命令行和Java API.docx_第2页
第2页 / 共11页
HDFS两种操作方式命令行和Java API.docx_第3页
第3页 / 共11页
HDFS两种操作方式命令行和Java API.docx_第4页
第4页 / 共11页
HDFS两种操作方式命令行和Java API.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

HDFS两种操作方式命令行和Java API.docx

《HDFS两种操作方式命令行和Java API.docx》由会员分享,可在线阅读,更多相关《HDFS两种操作方式命令行和Java API.docx(11页珍藏版)》请在冰豆网上搜索。

HDFS两种操作方式命令行和Java API.docx

HDFS两种操作方式命令行和JavaAPI

HDFS两种操作方式:

命令行和JavaAPI

HDFS文件操作有两种方式:

一种是命令行方式,Hadoop提供了一套与 Linux 文件命令类似的命令行工具;另一种是 Java API,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件。

本节将介绍Linux操作系统中关于HDFS文件操作的常用命令行,并将介绍利用Hadoop提供的JavaAPI进行基本的文件操作,以及利用Web界面查看和管理HDFS的方法。

HDFS常用命令

在Linux命令行终端,可以使用命令行工具对HDFS进行操作。

使用这些命令行可以完成HDFS文件的上传、下载和复制,还可以查看文件信息、格式化NameNode等。

HDFS命令行的统一格式如下。

hadoopfs-cmd

其中,cmd是具体的文件操作命令,是一组数目可变的参数。

1.添加文件和目录

HDFS有一个默认工作目录/usr/$USER,其中,$USER是登录用户名,如root。

该目录不能自动创建,需要执行mkdir命令创建。

hadoopfs-mkdir/usr/root

使用Hadoop的命令put将本地文件README.txt上传到HDFS。

hadoopfs-putREADME.txt

注意,上面这个命令的最后一个参数是:

“.”,这意味着把本地文件上传到默认的工作目录下,该命令等价于以下代码。

hadoopfs-putREADME.txt/user/root

2.下载文件

下载文件是指从HDFS中获取文件,可以使用Hadoop的get命令。

例如,若本地文件没有README.txt文件,则需要从HDFS中取回,可以执行以下命令。

hadoopfs-getREADME.txt

或者执行以下命令。

hadoopfs-getREADME.txt/usr/root/README.txt

3.删除文件

Hadoop删除文件的命令为rm。

例如,要删除从本地文件上传到HDFS的README.txt,可以执行以下命令。

hadoopfs-rmREADME.txt

4.检索文件

检索文件即查阅HDFS中的文件内容,可以使用Hadoop中的cat命令。

例如,要查阅README.txt的内容,可以执行以下命令。

hadoopfs-catREADME.txt

另外,Hadoop的cat命令的输出也可以使用管道传递给UNIX命令的head,可以只显示文件的前一千个字节。

hadoopfs-catREADME.txt|head

Hadoop也支持使用tail命令查看最后一千字节。

例如,要查阅README.txt最后一千个字节,可以执行如下命令。

hadoopfs-tailREADME.txt

5.查阅帮助

查阅HDFS命令帮助,可以更好地了解和使用Hadoop的命令。

用户可以执行hadoopfs来获取所用版本HDFS的一个完整命令类别,也可以使用help来显示某个具体命令的用法及简短描述。

例如,要了解ls命令,可执行以下命令。

hadoopfs-helpls

HDFS的Web界面

在配置好Hadoop集群之后,用户可以通过Web界面查看HDFS集群的状态,以及访问HDFS,访问地址如下。

http:

//[NameNodeIP]:

50070

其中,[NameNodeIP]为HDFS集群的NameNode的IP地址。

登录后,用户可以查看HDFS的信息。

如图1所示,通过HDFSNameNode的Web界面,用户可以查看HDFS中各个结点的分布信息,浏览NameNode上的存储、登录等日志,以及下载某个DataNode上某个文件的内容。

通过HDFS的Web界面,还可以查看整个集群的磁盘总容量,HDFS已经使用的存储空间量,非HDFS已经使用的存储空间量,HDFS剩余的存储空间量等信息,以及查看集群中的活动结点数和宕机结点数。

图2显示了一个DataNode的信息,如磁盘的数量,每块磁盘的使用情况等。

通过Web界面中的“Utilities”→“Browsethefilesystem”可以查看当前HDFS的目录列表,以及每个目录的相关信息,包括访问权限、最后修改日期、文件拥有者、目录大小等。

进一步,用户还可以通过Web界面查看文件的信息,如图3所示。

用户不仅可以查看文件的权限、大小等信息,还可以查看该文件的每个数据块所在的数据结点。

因为每一个文件都是分成好多数据块的,每个数据块又有3个副本,这些数据块的副本全部分布存放在多个DataNode中,所以用户不可能像传统文件系统那样来访问文件。

HDFSWeb界面给用户提供了一个方便、直观地查看HDFS文件信息的方法。

通过Web界面完成的所有操作,都可以通过Hadoop提供的命令来实现。

图1  HDFSNameNode的WEB界面

 

图2  HDFSNameNode的WEB界面

 

图3  HDFS文件界面

HDFS的JavaAPI

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量的文件。

HDFS将这些文件分割之后,存储在不同的DataNode上,HDFS提供了通过JavaAPI对HDFS里面的文件进行操作的功能,数据块在DataNode上的存放位置,对于开发者来说是透明的。

使用JavaAPI可以完成对HDFS的各种操作,如新建文件、删除文件、读取文件内容等。

下面将介绍HDFS常用的JavaAPI及其编程实例。

对HDFS中的文件操作主要涉及以下几个类。

名称

作用

org.apache.hadoop.con.Configuration

该类的对象封装了客户端或者服务器的配置。

org.apache.hadoop.fs.FileSystem

该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。

org.apache.hadoop.fs.FileStatus

该类用于向客户端展示系统中文件和目录的元数据,具体包括文件大小、块大小、副本信息、所有者、修改时间等。

org.apache.hadoop.fs.FSDatalnputStream

该类是HDFS中的输入流,用于读取Hadoop文件。

org.apache.hadoop.fs.FSDataOutputStream

该类是HDFS中的输出流,用于写Hadoop文件;

org.apache.hadoop.fs.Path

该类用于表示Hadoop文件系统中的文件或者目录的路径。

下面通过一个实例来说明如何对文件进行具体操作。

1.获取文件系统

1./**

2.*获取文件系统

3.*@returnFileSystem

4.*/

5.publicstaticFileSystemgetFileSystem(){

6.//读取配置文件

7.Configurationconf=newConfiguration();

8.//文件系统

9.FileSystemfs=null;

10.StringhdfsUri=HDFSUri;

11.if(StringUtils.isBlank(hdfsUri)){

12.//返回默认文件系统,如果在Hadoop集群下运行,使用此方法可直接获取默认文件系统

13.try{

14.fs=FileSystem.get(conf);

15.}catch(IOExceptione){

16.logger.error("",e);

17.}

18.}else{

19.//根据指定的文件系统,如果在本地测试,需要使用此方法获取文件系统

20.try{

21.URIuri=newURI(hdfsUri.trim());

22.fs=FileSystem.get(uri,conf);

23.}catch(URISyntaxException|IOExeptione){

24.logger.error("",e);

25.}

26.}

27.returnfs;

28.}

2.创建文件目录

1./**

2.*创建文件目录

3.*@parampath

4.*/

5.publicstaticvoidmkdir(Stringpath){

6.try{

7.//获取文件系统

8.FileSystemfs=getFileSystem();

9.StringhdfsUri=HDFSUri;

10.if(StringUtils.isNotBlank(hdfsUri)){

11.path=hdfsUri+path;

12.}

13.//创建目录

14.fs.mkdirs(newPath(path));

15.//释放资源

16.fs.close();

17.}catch(IllegalArgumentException|IOExceptione){

18.logger.error("",e);

19.}

20.}

3.删除文件或者文件目录

1./**

2.*删除文件或者文件目录

3.*@parampath

4.*/

5.publicstaticvoidrmdir(Stringpath){

6.try{

7.//返回FileSystem对象

8.FileSystemfs=getFileSystem();

9.StringhdfsUri=HDFSUri;

10.if(StringUtils.isNotBlank(hdfsUri)){

11.path=hdfsUri+path;

12.}

13.//删除文件或者文件目录

14.fs.delete(newPath(path),true);

15.//释放资源

16.fs.close();

17.}catch(IllegalArgumentException|IOExceptione){

18.logger.error("",e);

19.}

20.}

4.将文件上传至HDFS

1./**

2.*将文件上传至HDFS

3.*@paramdelSrc

4.*@paramoverwrite

5.*@paramsrcFile

6.*@paramdestPath

7.*/

8.publicstaticvoidcopyFileToHDFS(booleandelSrc,booleanoverwrite,StringsrcFile,StringdestPath){

9.//源文件路径是Linux下的路径

10.PathsrcPath=newPath(srcFile);

11.//目的路径

12.StringhdfsUri=HDFSUri;

13.if(StringUtils.isNotBlank(hdfsUri)){

14.destPath=hdfsUri+destPath;

15.}

16.PathdstPath=newPath(destPath);

17.//实现文件上传

18.try{

19.//获取FileSystem对象

20.FileSystemfs=getFileSystem();

21.fs.copyFromLocalFile(srcPath,dstPath);

22.fs.copyFromLocalFile(delSrc,overwrite,srcPath,dstPath);

23.//释放资源

24.fs.close();

25.}catch(IOExceptione){

26.logger.error("",e);

27.}

28.}

5.从HDFS下载文件

纯文本复制

1./**

2.*从HDFS下载文件

3.*@paramsrcFile

4.*@paramdestPath

5.*/

6.publicstaticvoidgetFile(StringsrcFile,StringdestPath){

7.//源文件路径

8.StringhdfsUri=HDFSUri;

9.if(StringUtils.isNotBlank(hdfsUri)){

10.srcFile=hdfsUri+srcFile;

11.}

12.PathsrcPath=newPath(srcFile);

13.//目的路径是Linux下的路径

14.PathdstPath=newPath(destPath);

15.try{

16.//获取FileSystem对象

17.FileSystemfs=getFileSystem();

18.//下载HDFS上的文件

19.fs.close();

20.}catch(IOExceptione){

21.logger.error("",e);

22.}

23.}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1