HDFS分布式文件系统-从零到实战

HDFS分布式文件系统


一、HDFS命令行的操作

1.1、查看根目录

hadoop fs -ls /

1.2、根目录创建文件夹

hadoop fs -mkdir /test

1.3、父目录不存在创建文件夹

hadoop fs -mkdir -p /zzm/abc

1.4、递归查看目录结构

hadoop fs -ls -R /

1.5、创建文件

hadoop fs -touchz /zzm/word.txt

1.6、修改文件夹的用户和用户组

# -R 代表文件夹的所有文件都修改
hadoop fs -chown -R hadoop1:hadoop1 /zzm

1.7、修改文件夹的权限

# -R 代表文件夹的所有文件都修改
hadoop fs -chmod -R 777 /zzm

1.8、查看文件的内容

hadoop fs -cat /zzm/word.txt
hadoop fs -tail /zzm/word.txt
# 查看压缩文件时用text,不然会乱码
hadoop fs -text /zzm/word.txt

1.9、追加文件内容

# 将本地内容追加到hdfs中
hadoop fs -appendToFile ./word.txt /zzm/word.txt

1.10、上传文件

hadoop fs -put ./word.txt /zzm/abc
hadoop fs -copyFromLocal ./word.txt /zzm/abc

1.11、下载文件到本地

hadoop fs -get /zzm/word.txt ./

1.12、删除文件

hadoop fs -rm /zzm/abc/word.txt

1.13、删除目录

hadoop fs -rmdir /test

二、HDFS的API操作

2.1、文件夹的创建

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 文件夹创建
 */
public class HDFS_mkdir {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.HDFS_mkdir API操作
        Path path = new Path("/a");
        boolean result = fileSystem.mkdirs(path);
        System.out.println(result);
    }
}

2.2、文件的创建

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 文件的创建
 */
public class HDFS_createFile {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.HDFS_mkdir API操作
        Path path = new Path("/zzm/a.txt");
        boolean result = fileSystem.mkdirs(path);
        System.out.println(result);
    }
}

2.3、重命名

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 重命名
 */
public class HDFS_rename {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.HDFS_mkdir API操作
        Path oldPath = new Path("/zzm/a.txt");
        Path newPath = new Path("/zzm/b.txt");
        boolean result = fileSystem.rename(oldPath, newPath );
        System.out.println(result);
    }
}

2.4、上传文件到HDFS

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 拷贝本地文件到HDFS
 */
public class HDFS_copyFromLocalFile {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.HDFS_mkdir API操作
        Path src = new Path("C:/Users/LENOVO/Desktop/header.jpg");
        Path dst = new Path("/zzm/");
        fileSystem.copyFromLocalFile(src,dst);
    }
}

2.5、上传多个文件到HDFS

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 拷贝本地多个文件到HDFS
 */
public class HDFS_copyFromLocalFiles {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.获取本地文件系统
        Path localPath = new Path("D:/VuePress/myblog/docs/*");
        FileSystem local = FileSystem.getLocal(configuration);
        FileStatus[] localStatus = local.globStatus(localPath, new RegexAcceptPathFilter("^.*md$"));
        Path[] localPaths = FileUtil.stat2Paths(localStatus);

        // 4.HDFS_mkdir API操作
        for (Path path : localPaths){
            Path dst = new Path("/test/");
            fileSystem.copyFromLocalFile(path,dst);
        }

    }

    public static class RegexAcceptPathFilter implements PathFilter{

        private final String regex;

        public RegexAcceptPathFilter(String regex) {
            this.regex = regex;
        }

        @Override
        public boolean accept(Path path) {
            boolean flag = path.toString().matches(regex);
            return flag;
        }
    }
}

2.6、查看目标文件夹下的所有内容

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 查看目标文件夹下的所有内容
 */
public class HDFS_find {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        FileStatus[] statuses = fileSystem.listStatus(new Path("/"));
        for (FileStatus file: statuses){
            // 判断是文件还是文件夹
            String fileName = file.isDirectory() ? "文件夹" : "文件";
            // 获得权限
            String permission = file.getPermission().toString();
            short replication = file.getReplication();
            // 长度
            long length = file.getLen();
            // 路径
            String path = file.getPath().toString();
            System.out.println("类型:" + fileName + "、权限:" + permission + "、replication:" + replication + "、长度:" + length + "、路径:" + path);
        }
    }
}

2.7、下载HDFS文件到本地

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 拷贝HDFS文件到本地
 */
public class HDFS_copyToLocalFile {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        // 3.HDFS_mkdir API操作
        Path src = new Path("/word.txt");
        Path dst = new Path("D:/");
        fileSystem.copyToLocalFile(false,src,dst,true);
    }
}

2.8、删除文件或目录

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 文件删除
 */
public class HDFS_delete {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop");

        boolean result = fileSystem.delete(new Path("/zzm/b.txt"), true);
        System.out.println(result);
    }
}

2.9、查看文件块的信息

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 查看文件块信息
 */
public class HDFS_findBlock {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        FileStatus fileStatus = fileSystem.getFileStatus(new Path("/zzm/word.txt"));
        BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());

        for (BlockLocation block : blocks){
            for (String name: block.getNames()){
                System.out.println(name + ":" + block.getOffset() + ":" + block.getLength());
            }
        }

    }
}

2.10、创建文件并写入内容

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 创建文件并写入
 */
public class HDFS_createFileAndWirter {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        configuration.set("dfs.replication","1");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        Path path = new Path("/zzm/test.txt");
        FSDataOutputStream outputStream = fileSystem.create(path);
        outputStream.writeUTF("Hello HDFS!");
        outputStream.flush();
        outputStream.close();
    }
}

2.11、上传大文件到HDFS

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 拷贝本地大文件到HDFS
 */
public class HDFS_copyFromLocalBigFile {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("F:/百度云下载/vgg16.npy")));

        FSDataOutputStream outputStream = fileSystem.create(new Path("/zzm/vgg16.npy"), new Progressable() {
            // 添加进度条
            @Override
            public void progress() {
                System.out.print(".");
            }
        });

        IOUtils.copyBytes(inputStream, outputStream, 4096);
    }
}

2.12、查看文件内容

package com.hadoop.hdfs.api;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.net.URI;

/**
 * @author zzm
 * @time 2019/11/4 11:04
 * 使用Java API操作HDFS文件系统
 * 查看文件
 */
public class HDFS_open {
    public static void main(String[] args) throws Exception{

        // 1.创建Configuration
        Configuration configuration = new Configuration();
        configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

        // 2.获取FileSystem
        /**
         * 构造一个访问指定HDFS系统的客户端对象
         * 第一个参数:HDFS的URI
         * 第二个参数:客户端指定的配置参数
         * 第三个参数:客户端的身份,说白了就是用户名
         */
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.64.143:9000"),configuration, "hadoop1");

        Path path = new Path("/zzm/word.txt");
        FSDataInputStream inputStream = fileSystem.open(path);
        IOUtils.copyBytes(inputStream, System.out, 1024);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值