行业资讯 2025年08月6日
0 收藏 0 点赞 198 浏览 3813 个字
摘要 :

文章目录 1.基于 Shell 的操作 2.基于 Java API 的操作 1.基于 Shell 的操作 以下介绍一些我们在 Shell 中操作 HDFS 时经常用到的命令。 1.1.创建目录命令 HDFS 创建……




1.基于 Shell 的操作

以下介绍一些我们在 Shell 中操作 HDFS 时经常用到的命令。

1.1.创建目录命令

HDFS 创建目录的命令是 mkdir,命令格式如下:

hdfs dfs -mkdir 文件夹名

例如,在 user 目录下创建 wen 目录。代码如下:

hdfs dfs -mkdir hdfs://192.168.217.100:9820/wen

可以简写为:

 hdfs dfs -mkdir /user/wen 

1.2.上传文件到

HDFS 上传文件时,文件首先复制到 DataNode 上,只有所有的 DataNode 都成功接收完数据,文件上传才是成功的。命令格式如下:

hdfs dfs -put filename newfilename 

例如,通过「-put 文件 1 文件 2」命令将 test1 文件上传到 HDFS 上并重命名为 test2。代码如下:

hdfs dfs -put test1 test2 

1.3.列出 HDFS 上的文件

采用-ls 命令列出 HDFS 上的文件,需要注意的是,在 HDFS 中没有「当前工作目录」这个概念。命令格式如下:

 hdfs dfs -ls 

例如,列出 HDFS 特定目录下的所有文件。代码如下:

hdfs dfs –ls /wen 

1.4.查看 HDFS 下某个文件的内容

通过「-cat 文件名」命令查看 HDFS 下某个文件的内容。命令格式如下:

hdfs dfs -cat 文件名 

例如,查看 HDFS 上 wen 目录下 test.txt 中的内容。代码如下:

 hdfs dfs -cat /wen/test.txt 

1.5.将 HDFS 中的文件复制到本地系统中

通过「-get 文件 1 文件 2」命令将 HDFS 中某目录下的文件复制到本地系统的某文件中,并对该文件重新命名。命令格式如下:

hdfs dfs -get 文件名 新文件名 

例如,将 HDFS 中的 in 文件复制到本地系统并重命名为 IN1。代码如下:

hdfs dfs -get in IN1 

-get 命令与-put 命令一样,既可以操作目录,也可以操作文件。

1.6.删除 HDFS 下的文档

通过「-rmr 文件」命令删除 HDFS 下的文件。命令格式如下:

 hdfs dfs -rmr 文件 

例如,删除 HDFS 下的 out 文档。代码如下:

hdfs dfs -rmr out -rmr 

删除文档命令相当于 delete 的递归版本。

1.7.格式化 HDFS

通过-format 命令实现 HDFS 格式化。命令格式如下:

hdfs namenode -format 

1.8.启动 HDFS

通过运行 start-dfs.sh,就可以启动 HDFS 了。命令格式如下:

start-dfs.sh 

1.9.关闭 HDFS

当需要退出 HDFS 时,通过 stop-dfs.sh 就可以关闭 HDFS。命令格式如下:

stop-dfs.sh 

2.基于 Java API 的操作

本节将介绍通过 Java API 来访问 HDFS,首先介绍 HDFS 中的文件操作主要涉及的几个类。 ·Configuration 类:该类的对象封装了客户端或者服务器的配置。

·FileSystem 类:该类的对象是一个文件系统对象,可以用该对象的一些方法对文件进行操作。FileSystem fs=FileSystem.get(conf);通过 FileSystem 的静态方法 get 获得该对象。

·FSDataInputStream 和 FSDataOutputStream:这两个类是 HDFS 中的输入/输出流,分别通过 FileSystem 的 open 方法和 create 方法获得。

接下来通过实例介绍如何利用 Java API 进行文件夹的创建、文件列表显示、文件上传和文件下载操作,为了使读者对实例具有完整性的理解,我们把主函数也列了出来。实例代码如下:

import java.io.IOException; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileStatus; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
public class HdfsDemo {
 public static void main(String[] args) { 
createFolder(); 
//uploadFile();
 //downloadFile(); 
//listFile(new Path("/")); 
} 
}

在主函数中,分别调用了 createFolder()、uploadFile()、downloadFile()和 listFile(new Path(「/」)函数来实现文件夹的创建、文件上传、文件下载和递归显示文件夹功能。

2.1 创建文件夹

如果想要将文件放入不同的文件夹中,则可以有针对性地动态创建文件夹。关于文件夹的创建比较简单。代码如下:

public static void createFolder() { 
// 定义一个配置对象 
Configuration conf = new Configuration();
 try {
     // 通过配置信息得到文件系统的对象
     FileSystem fs = FileSystem.get(conf); 
//在指定的路径下创建文件夹 
Path path = new Path(「/yunpan」); 
fs.mkdirs(path); 
} catch (IOException e) { 
e.printStackTrace();
 }
 } 

2.2 递归显示文件

如果要显示文件夹中的文件,需要用到递归算法,因为文件夹中可能有文件,也可能有文件夹。代码如下:

public static void listFile(Path path) {
    Configuration conf = new Configuration();
    try { 
        FileSystem fs = FileSystem.get(conf);
        //传入路径,表示显示某个路径下的文件夹列表
        //将给定路径下所有的文件元数据放到一个 FileStatus 的数组中
        //FileStatus 对象封装了文件和目录的元数据,包括文件长度、块大小、权限等信息
        FileStatus[] fileStatusArray = fs.listStatus(path);
        for (int i = 0; i < fileStatusArray.length; i++) {
             FileStatus fileStatus = fileStatusArray[i];
        //首先检测当前是否是文件夹,如果「是」则进行递归
             if (fileStatus.isDirectory()) {
                System.out.println("「当前路径是:」" + fileStatus.getPath());
                listFile(fileStatus.getPath());
            } else {
                System.out.println("「当前路径是:」" + fileStatus.getPath()); 
             }
        } 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
}

2.3 文件上传

前面创建了文件夹及文件的递归显示,接着来看一下文件的上传。关于文件上传的代码如下:

public static void uploadFile() {
 Configuration conf = new Configuration(); 
try {
 FileSystem fs = FileSystem.get(conf); 
//定义文件的路径和上传的路径 
Path src = new Path(「e://upload.doc」); 
Path dest = new Path(「/yunpan/upload.doc 」); 
//从本地上传文件到服务器上 
fs.copyFromLocalFile(src, dest);
 } catch (IOException e) { 
// TODO Auto-generated catch block
 e.printStackTrace();
 } 
}

关于文件的上传,首先需要定义上传源 src,这里的 src 是指本地文件路径,即将要上传的目的地路径是 dest,也就是 HDFS 上的路径。一旦设定了文件上传的数据源和目的路径之后,就可以调用 FileSystem 的 copyFromLocalFile()方法来实现文件的上传了。

2.4 文件下载

与文件上传所对应的就是文件下载。文件下载代码和文件上传类似,只是函数略有区别。代码如下:

public static void downloadFile() { 
Configuration conf = new Configuration(); 
try {
 FileSystem fs = FileSystem.get(conf); 
//定义下载文件的路径和本地下载路径 
Path src = new Path( 「/yunpan/download.doc」); 
Path dest = new Path(「e://download.doc」); 
//从服务器下载文件到本地 
fs.copyToLocalFile(src, dest);
 } catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 

关于文件的下载,首先需要定义下载源 src,这里的 src 是指 HDFS 上的路径,将要下载的目的地为 dest,也就是本地系统的路径。设定了文件下载的数据源和目的路径之后,就可以调用 FileSystem 的 copyToLocalFile()方法实现文件的下载了。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/7345.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号