Hadoop系列——HDFS常用和命令,Java API客户端day3-1

181 篇文章 3 订阅
16 篇文章 0 订阅

HDFS 命令

官方文档

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html

常用命令

创建文件夹

hadoop fs -mkdir [-p] 路径

-p:表示递归

查看内容

hadoop fs -ls [-h] [-R] 路径

-R:递归
-h:详细,以人能看懂的方式展现

上传文件不删除本地文件

hadoop fs -put [-f] [-p] 需要上传的文件 上传的位置

-f:覆盖原文件
-p:保留访问和修改时间,所有权,权限信息

上传文件并删除本地

hadoop fs -moveFromLocal 需要上传的文件 上传的位置

查看HDFS文件内容

hadoop fs -cat 文件路径
hadoop fs -head 文件路径
hadoop fs -tail [-f] 文件路径

-f:动态显示文件追加的内容

下载文件到本地

hadoop fs -get [-f] [-p] 需要下载的文件路径 要下载到的路径

-f:覆盖文件
-p:保留访问时间、修改时间、所有权和权限

下载多个文件并合并为一个文件

hadoop fs -getmerge [-nl]  需要下载的文件路径 要下载到的路径

-nl :表示每个文件末尾添加换行符

追加数据到文件中

hadoop fs -appendToFile 要追加的文件 要追加的目标文件

查看HDFS磁盘空间

hadoop fs -df -h

查看HDFS文件使用的空间量

hadoop fs -du -s -h 文件路径

-s:表示显示指定路径文件长度的汇总摘要

移动文件

hadoop fs -mv 需要移动的文件 移动到的路径

复制文件

hadoop fs -cp [-f] 需要复制的文件 复制到的路径

-f:强制覆盖

修改HDFS文件副本个数

hadoop fs -setrep [-R] [-w] 文件副本个数 需要修改的文件

-R:递归
-w:客户端是否等待副本修改完毕

Java API客户端

HDFS在生产应用中主要是Java客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。

客户端核心类

  1. Configuration配置对象类,用于加载或设置参数属性
  2. FileSystem文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。

QuickStart

构建工程加入依赖

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.4</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.4</version>
            <scope>test</scope>
        </dependency>

查询core-site.xml文件

我的文件位置在:/export/server/hadoop-3.3.4/etc/hadoop
我们要关注的是配置的name和value
在这里插入图片描述
后面我们要将其设置到配置连接中

 conf.set("fs.defaultFS","hdfs://node1.syf.cn:8020");

当然这个地方你得注意如果没有配置映射
我们就应该写成

 conf.set("fs.defaultFS","hdfs://你的Hadoop主机的IP地址:8020");

Java开启连接和关闭连接到Hadoop

@SpringBootTest
class Code1ApplicationTests {
    private static Configuration conf = null;
    private static FileSystem fileSystem = null;

    /**
     * 开启连接
     * @throws IOException
     */
    @Test
    void connectTest() throws IOException {
        //创建配置对象实例
        conf = new Configuration();
        //设置文件系统是HDFS并指定HDFS操作地址,查看core-site.xml
        conf.set("fs.defaultFS","hdfs://node1.syf.cn:8020");
        //创建FileSystem对象实例
        fileSystem = FileSystem.get(conf);

    }

    /**
     * 关闭连接
     * @throws IOException
     */
    public void close() throws IOException {
        fileSystem.close();
    }

}

连接到HADOOP

首先设置身份,配置对象实例设置HDFS相关属性,然后使用FileSystem的get()方法

    private static Configuration conf = null;
    private static FileSystem fileSystem = null;

    /**
     * 开启连接
     * @throws IOException
     */
    @Test
    void connectTest() throws IOException {
        //设置身份获取权限访问
        System.setProperty("HADOOP_USER_NAME","root");
        //创建配置对象实例
        conf = new Configuration();
        //设置文件系统是HDFS并指定HDFS操作地址,查看core-site.xml
        conf.set("fs.defaultFS","hdfs://192.168.31.103:8020");
        //创建FileSystem对象实例
        fileSystem = FileSystem.get(conf);

    }

关闭连接

使用FileSystem的close()方法

    private static Configuration conf = null;
    private static FileSystem fileSystem = null;
    /**
     * 关闭连接
     * @throws IOException
     */
    @Test
    public void close() throws IOException {
        if (fileSystem!=null){
            fileSystem.close();
        }
    }

创建文件夹

使用FileSystem的mkdirs()方法

    private static Configuration conf = null;
    private static FileSystem fileSystem = null;
        /**
     * 创建文件夹
     */
    @Test
    public void makeDir() throws IOException {

        //连接到Hadoop
        connectTest();
        //判断文件夹是否存在
        if (!fileSystem.exists(new Path("/test1"))){
            //不存在就创建
            fileSystem.mkdirs(new Path("/test1"));
        }
    }

在这里插入图片描述

上传文件

使用FileSystem的copyFromLocalFile()方法

    private static Configuration conf = null;
    private static FileSystem fileSystem = null;
        /**
     * 上传文件
     */
    @Test
    public void uploadFile() throws IOException {
        connectTest();
        fileSystem.copyFromLocalFile(new Path("C:\\Users\\Syf200208161018\\Desktop\\baidu.json"), new Path("/test1"));
        
    }

在这里插入图片描述

下载文件

使用FileSystem的copyToLocalFile()方法

    /**
     * 下载文件
     * @throws IOException
     */
    @Test
    public void downLoadFile() throws IOException {
        connectTest();
        //hadoop位置
        final Path dst = new Path("/test1/baidu.json");
        //本地位置
        final Path src = new Path("C:\\Users\\Syf200208161018\\Desktop");
        fileSystem.copyFromLocalFile(src,dst);
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. HDFSHadoop体系结构中的角色: HDFSHadoop分布式文件系统的缩写,是Hadoop体系结构中的一个关键组件,主要用于存储和管理大规模数据集。它被设计成可靠、高效、可扩展的文件系统,能够处理大量的数据,并且能够自动地将数据分布到Hadoop集群的各个节点上。HDFS的主要功能是将大型数据集分成多个块,然后将这些块存储在不同的节点上,以提高数据访问的速度和可靠性。 2. HDFS常用的Shell命令HDFS提供了一些常用的Shell命令来管理和操作HDFS文件系统,例如: - hdfs dfs -ls:列出HDFS文件系统中的文件和目录; - hdfs dfs -mkdir:创建一个新的目录; - hdfs dfs -put:将本地文件上传到HDFS文件系统; - hdfs dfs -get:从HDFS文件系统中下载文件到本地文件系统; - hdfs dfs -rm:删除HDFS文件系统中的文件或目录; - hdfs dfs -du:显示HDFS文件系统中的文件和目录的大小。 3. HDFS常用Java APIHDFS提供了一些Java API来操作HDFS文件系统,例如: - org.apache.hadoop.fs.FileSystem:提供了HDFS文件系统的基本操作,例如创建、删除、移动文件和目录等; - org.apache.hadoop.fs.Path:表示一个HDFS文件或目录的路径; - org.apache.hadoop.fs.FileStatus:表示一个HDFS文件或目录的状态信息,例如文件大小、修改时间、权限等; - org.apache.hadoop.fs.BlockLocation:表示一个HDFS文件的块信息,例如块起始位置、块大小、块所在的节点等; - org.apache.hadoop.io.SequenceFile:提供了一种用于存储二进制键值对的文件格式,适合于大规模数据的读写操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值