Hadoopの大規模なデータ技術HDFS(5) - HDFS APIオペレーション

第V章:HDFS API操作

ローカルHDFSからファイルをアップロードする5.2

ステップ1:IDEAのMaven Javaプロジェクトでフォームを作成します。

ここに画像を挿入説明
ここに画像を挿入説明

ステップ2:Mavenのが依存している追加

pom.xmlにHDFSの座標を追加し、

<dependencies>
    <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-client</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-common</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-hdfs</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-yarn-common</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-yarn-client</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-yarn-server-resourcemanager</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-mapreduce-client-core</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-mapreduce-client-common</artifactId>
         <version>3.1.2</version>
     </dependency>
     <dependency>
         <groupId>net.minidev</groupId>
         <artifactId>json-smart</artifactId>
         <version>2.3</version>
     </dependency>
     <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>2.12.1</version>
     </dependency>
     <dependency>
         <groupId>org.anarres.lzo</groupId>
         <artifactId>lzo-hadoop</artifactId>
         <version>1.0.6</version>
     </dependency>
</dependencies>

ステップ3:リソースのディレクトリにログファイルを追加します。

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

第四段階:書き込みのJavaコードDディスクのログは、HDFSにアップロード

/**
     * 从本地中上传文件到HDFS
     * @throws URISyntaxException
     * @throws IOException
     */
    @Test
    public void put() throws URISyntaxException, IOException, InterruptedException {
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        //1、读取一个HDFS的抽象封装对象
        Configuration configuration = new Configuration ();
        FileSystem fileSystem = FileSystem.get (URI.create (hdfs), configuration, "zhangyong");

        //用这个对象操作文件系统
        fileSystem.copyFromLocalFile (new Path ("d:\\logs"),new Path ("/"));

        System.out.println ("上传完成");
        //关闭文件系统
        fileSystem.close ();
    }

ステップ5:実行結果

ここに画像を挿入説明
ここに画像を挿入説明

地元へのHDFSから5.3のダウンロードファイル

最初のステップ:第一の上部、二つ、三つのステップとして

ステップ2:HDFSファイルをチェックしてください

ここに画像を挿入説明

第三段階:書き込みJavaコード、我々はローカルにダウンロードwcinput選びます

/**
     * 从HDFS中下载文件
     * @throws URISyntaxException
     * @throws IOException
     */
    @Test
    public void get() throws URISyntaxException, IOException, InterruptedException {
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        //1、读取一个HDFS的抽象封装对象
        Configuration configuration = new Configuration ();
        FileSystem fileSystem = FileSystem.get (URI.create (hdfs), configuration, "zhangyong");

        //用这个对象操作文件系统
        fileSystem.copyToLocalFile (new Path ("/wcinput"),new Path ("d:\\"));

        System.out.println ("下载完成");
        //关闭文件系统
        fileSystem.close ();
    }

ステップ4:実行結果

ここに画像を挿入説明
ここに画像を挿入説明

5.4 HDFSのファイル名を変更します

最初のステップ:第一の上部、二つ、三つのステップとして

ステップ2:書き込みJavaコード、logs2への変更ログ

 /**
     * 更改HDFS文件的名称
     * @throws URISyntaxException
     * @throws IOException
     */
    @Test
    public void rename() throws URISyntaxException, IOException, InterruptedException {
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        //1、读取一个HDFS的抽象封装对象
        Configuration configuration = new Configuration ();
        FileSystem fileSystem = FileSystem.get (URI.create (hdfs), configuration, "zhangyong");

        //用这个对象操作文件系统
        fileSystem.rename (new Path ("/logs"),new Path ("/logs2"));

        System.out.println ("更改完成");
        //关闭文件系统
        fileSystem.close ();
    }

ステップ3:実行結果

ここに画像を挿入説明
ここに画像を挿入説明

5.5 HDFSフォルダの削除

ステップ1:HDFSフォルダをチェックし、削除HDFSのlogs2

ここに画像を挿入説明

ステップ2:書き込みJavaコード

	 /** HDFS文件夹删除
     * @throws IOException
     * @throws InterruptedException
     * @throws URISyntaxException
     */
    @Test
    public void Delete() throws IOException, InterruptedException, URISyntaxException {
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        // 1 获取文件系统
        Configuration configuration = new Configuration ();
        FileSystem fs = FileSystem.get (new URI (hdfs), configuration, "zhangyong");
        // 2 执行删除
        fs.delete (new Path ("/logs2/"), true);
        // 3 关闭资源
        fs.close ();
        System.out.println ("删除完成");
    }

第三段階:テスト結果

ここに画像を挿入説明
ここに画像を挿入説明

5.6 HDFSファイルビューの詳細を

ステップ1:ファイル名を確認し、アクセス権、長さ、ブロック情報

ここに画像を挿入説明

ステップ2:書き込みJavaコード

	  /**
     * 查看文件名称、权限、长度、块信息
     * @throws IOException
     * @throws InterruptedException
     * @throws URISyntaxException
     */
    @Test
    public void ListFiles() throws IOException, InterruptedException, URISyntaxException {
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        // 1获取文件系统
        Configuration configuration = new Configuration ();
        FileSystem fileSystem = FileSystem.get (new URI (hdfs), configuration, "zhangyong");
        // 2 获取文件详情
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles (new Path ("/"), true);
        while (listFiles.hasNext ()) {
            LocatedFileStatus status = listFiles.next ();
            // 输出详情
            // 文件名称
            System.out.println ("文件名称="+status.getPath ().getName ());
            // 长度
            System.out.println ("文件长度="+status.getLen ());
            // 权限
            System.out.println ("文件权限="+status.getPermission ());
            // 分组
            System.out.println ("文件分组="+status.getGroup ());
            // 获取存储的块信息
            BlockLocation[] blockLocations = status.getBlockLocations ();
            for (BlockLocation blockLocation : blockLocations) {
                // 获取块存储的主机节点
                String[] hosts = blockLocation.getHosts ();

                for (String host : hosts) {
                    System.out.println (host);
                }
            }
            System.out.println ("-----------分割线----------");
        }
        // 3 关闭资源
        fileSystem.close ();
    }

第三段階:テスト結果

ここに画像を挿入説明

5.7 HDFSのファイルとフォルダの判断

ステップ1:HDFSファイルをチェックしてください

ここに画像を挿入説明

ステップ2:書き込みJavaコード

	/**
     * 查看HDFS的判断是文件还是文件夹
     * @throws IOException
     * @throws InterruptedException
     * @throws URISyntaxException
     */
    @Test
    public void ListStatus() throws IOException, InterruptedException, URISyntaxException{
        //虚拟机连接名,必须在本地配置域名,不然只能IP地址访问
        String hdfs = "hdfs://hadoop101:9000";
        // 1 获取文件配置信息
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(new URI(hdfs), configuration, "zhangyong");
        // 2 判断是文件还是文件夹
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : listStatus) {
            // 如果是文件
            if (fileStatus.isFile()) {
                System.out.println("文件:"+fileStatus.getPath().getName());
            }else {
                System.out.println("文件夹:"+fileStatus.getPath().getName());
            }
        }
        // 3 关闭资源
        fileSystem.close();
    }

第三段階:テスト結果

ここに画像を挿入説明

公開された37元の記事 ウォン称賛7 ビュー1180

おすすめ

転載: blog.csdn.net/zy13765287861/article/details/104646501