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


    HDFS 命令

    官方文档

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

    常用命令

    创建文件夹

    hadoop fs -mkdir [-p] 路径
    
    • 1

    -p:表示递归

    查看内容

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

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

    上传文件不删除本地文件

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

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

    上传文件并删除本地

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

    查看HDFS文件内容

    hadoop fs -cat 文件路径
    hadoop fs -head 文件路径
    hadoop fs -tail [-f] 文件路径
    
    • 1
    • 2
    • 3

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

    下载文件到本地

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

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

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

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

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

    追加数据到文件中

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

    查看HDFS磁盘空间

    hadoop fs -df -h
    
    • 1

    查看HDFS文件使用的空间量

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

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

    移动文件

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

    复制文件

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

    -f:强制覆盖

    修改HDFS文件副本个数

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

    -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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    查询core-site.xml文件

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

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

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

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

    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();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    连接到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);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    关闭连接

    使用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();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    创建文件夹

    使用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"));
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    上传文件

    使用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"));
            
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    下载文件

    使用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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【mysql体系结构】B+树索引
    ke11介绍本地,会话存储
    spark入门学习-1
    2023-2028年中国硫氰酸铵市场发展动态及投资规模预测报告
    民安智库(第三方满意度调研公司)医院满意度调查:用数据说话,让服务更贴心
    HarmonyOS原子化服务案例分享-邻居
    还不轻松heic怎么转换?无需担心,使用这几款heic转换器轻松实现
    MySql ocp认证之MySql安装(一)
    为普通用户授权访问k8s资源(tls,rbac)
    14:00面试,14:06就出来了,问的问题过于变态了。。。
  • 原文地址:https://blog.csdn.net/qq_51553982/article/details/127403858