• Hadoop 学习笔记(六)HDFS 客户端操作(上)


    一、环境准备

    将事先准备好的 Hadoop jar 文件安装到非中文无空格的路径下:

     配置 环境变量

     

     eclipse 创建 maven 项目,

    pom.xml 引入一下依赖

    <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.8.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.7.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>2.7.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>2.7.2</version>
            </dependency>
            <dependency>
                <groupId>jdk.tools</groupId>
                <artifactId>jdk.tools</artifactId>
                <version>1.8</version>
                <scope>system</scope>
                <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
            </dependency>
        </dependencies>

    scr/main/resourses 下创建 log4j.properties 文件,黏贴一下内容并保存

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

    二、测试环境是否可用

    编写 HdfsTest 类;

    public static Configuration conf = new Configuration();
    
        @Test
        public void testMkdir() throws IOException, InterruptedException, URISyntaxException {
            // conf.set("fs.defaultFS", "hdfs://hadoop103:9000");
            // 1、获取 HDFS 客户端对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
    
            // 2、创建路径
            fs.mkdirs(new Path("/yttlj/emp"));
            fs.close();
            System.out.println(" ok ");
        }

    运行查看 HDFS 

    [hui@hadoop103 ~]$ hadoop fs -ls -R /
    drwxr-xr-x   - hui supergroup          0 2020-09-09 13:17 /user
    drwxr-xr-x   - hui supergroup          0 2020-09-09 13:20 /yttlj
    drwxr-xr-x   - hui supergroup          0 2020-09-09 13:20 /yttlj/emp

    至此:客户端环境搭建完毕。

     三、HDFS 常用 API 操作

    文件上传

        // 2、文件上传
        @Test
        public void putFileTest() throws IOException, InterruptedException, URISyntaxException {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、上传文件
            // fs.copyFromLocalFile(new Path("E:/workspaced/data/zhouzhiruo.txt"), new
            // Path("/yttlj/emp"));
            // conf 个性化设置
            // conf.set("dfs.replication", "2");
            fs.copyFromLocalFile(new Path("E:/workspaced/data/zhouzhiruo.txt"), new Path("/yttlj/gmd/yangxiao.txt"));
            // 3、关闭资源
            fs.close();
        }

    将hdfs-site.xml拷贝到项目的根目录下

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
        <property>
            <!-- 设置副本数 为 1 -->
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>

    参数优先级排序:(1)客户端代码中设置的值 >(2)ClassPath下的用户自定义配置文件 >(3)然后是服务器的默认配置。

    HDFS 文件下载

    // 3、文件下载
        @Test
        public void gettFileTest() throws Exception {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、下载文件
            // fs.copyFromLocalFile(new Path("E:/workspaced/data/zhouzhiruo.txt"), new
            // Path("/yttlj/emp"));
            // 直接从 HDFS 文件系统抓取数据到本地
            // fs.copyToLocalFile(new Path("/yttlj/emp/zhouggl.txt"), new
            // Path("E:/workspaced/data/zhouggl.txt"));
            // false 是否删除 HDFS 文件系统文件,若删除相当于剪切,true 是否校验
            fs.copyToLocalFile(false, new Path("/yttlj/emp/zhouggl.txt"), new Path("E:/workspaced/data/zhougg111l.txt"),
                    true);
    
            fs.close();
        }

    HDFS 文件删除

    // 3、文件删除
        @Test
        public void deletetFileTest() throws Exception {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、删除文件 如果 删除的目录,true 则递归删除
            fs.delete(new Path("/yttlj/emp"), true);
            fs.close();
        }

    HDFS 文件更新名称

        // 4、文件更名
        @Test
        public void updatFileTest() throws Exception {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、修改名称
            fs.rename(new Path("/yttlj/gmd/yangxiao.txt"), new Path("/yttlj/gmd/yangxiao_buhui.txt"));
            fs.close();
        }

    HDFS 文件详情

    // 5、查看文件详细信息
        @Test
        public void lookFileInfoTest() throws Exception {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、查看文件详细信息
            RemoteIterator<LocatedFileStatus> listFilesIterator = fs.listFiles(new Path("/"), true);
            while (listFilesIterator.hasNext()) {
                LocatedFileStatus fileStatus = listFilesIterator.next();
                // 查看文件 名称 长度 权限 块信息
                System.out.println(fileStatus.getPath().getName());
                System.out.println(fileStatus.getPermission());
                System.out.println(fileStatus.getLen());
                System.out.println(fileStatus.getBlockSize());
                BlockLocation[] blockLocations = fileStatus.getBlockLocations();
                for (BlockLocation blockLocation : blockLocations) {
                    String[] hosts = blockLocation.getHosts();
                    for (String host : hosts) {
                        System.out.println(host);
                    }
                }
                System.out.println("-------------------------------");
            }
            fs.close();
        }

    HDFS 文件OR文件夹

    //6、文件OR文件夹
        @Test
        public void FileTest() throws Exception {
            // 1、获取 fs 对象
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop103:9000"), conf, "hui");
            // 2、获取文件信息
            FileStatus[] fileStatus = fs.listStatus(new Path("/"));
            for (FileStatus fileStatu : fileStatus) {
                if(fileStatu.isFile()) {
                    //文件
                    System.out.println(fileStatu.getPath().getName() +" isFile ");
                }else{
                    //文件夹
                    System.out.println(fileStatu.getPath().getName() +" isDir ");
                }
            }
            fs.close();
        }
  • 相关阅读:
    C#集合类型——Array、ArrayList、List 之浅谈
    C#反射(二)
    ASP.Net内置对象之网页之间传参(二)
    ASP.Net内置对象之网页之间传参(一)
    MyEclipse中设置智能提示
    常用Java片段
    ue中替换行
    正确的计算耗时
    JAVA之GUI编程ACTION事件
    JAVA之GUI编程窗体事件
  • 原文地址:https://www.cnblogs.com/wdh01/p/13798805.html
Copyright © 2020-2023  润新知