欢迎回家
我们一直在改变

Hadoop Java API — HDFS

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.9.2</version>
</dependency>

一、HDFS 操作

@Test
public void upload() throws Exception {

    Configuration conf = new Configuration();  // (1) 
    //conf.set("fs.defaultFS", "hdfs://master:9000/");

    Path dst = new Path("hdfs://master:9000/upload/MPSetup4.log");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "hadoop"); // (2)
    FSDataOutputStream os = fs.create(dst);
    FileInputStream is = new FileInputStream("c:/MPSetup.log");

    IOUtils.copy(is, os);
}
  1. Configuration 配置文件默认读取 resources 目录下的 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 文件。可以将 Hadoop 安装目录下的这些配制文件直接拷贝过来,也可以直接 conf.set() 设置参数。
  2. FileSystem.get() 必须要以 hadoop 的身份运行,否则会出现权限不足的问题。可以配置 -DHADOOP_USER_NAME=hadoop 参数。

下面提供一个 HdfsUtil 工具类:


public class HdfsUtil {
    FileSystem fs = null;

    @Before
    public void init() throws Exception{
        System.setProperty("hadoop.home.dir", "D:/Program_Files/apache/hadoop-common-bin/");
        //1. 读取classpath下的xxx-site.xml 配置文件,并解析其内容,封装到conf对象中
        Configuration conf = new Configuration();

        //2. 也可以在代码中对conf中的配置信息进行手动设置,会覆盖掉配置文件中的读取的值
        conf.set("fs.defaultFS", "hdfs://master:9000/");

        //3. 根据配置信息,去获取一个具体文件系统的客户端操作实例对象
        fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "hadoop");
    }

    /** 上传文件,封装好的写法 */
    @Test
    public void upload2() throws Exception, IOException{
        fs.copyFromLocalFile(new Path("c:/MPSetup.log"),
                new Path("hdfs://master:9000/aaa/bbb/ccc/MPSetup.log"));
    }


    /** 下载文件 */
    @Test
    public void download() throws Exception {
        fs.copyToLocalFile(new Path("hdfs://master:9000/aaa/bbb/ccc/MPSetup.log"),
                new Path("d:/MPSetup2.txt"));

    }

    /** 查看文件信息 */
    @Test
    public void listFiles() throws FileNotFoundException, IllegalArgumentException, IOException {

        // listFiles列出的是文件信息,而且提供递归遍历
        RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);

        while(files.hasNext()) {
            LocatedFileStatus file = files.next();
            Path filePath = file.getPath();
            String fileName = filePath.getName();
            System.out.println(fileName);
        }

        System.out.println("---------------------------------");

        //listStatus 可以列出文件和文件夹的信息,但是不提供自带的递归遍历
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        for(FileStatus status: listStatus){
            String name = status.getPath().getName();
            System.out.println(name + (status.isDirectory()?" is dir":" is file"));
        }
    }

    /** 创建文件夹 */
    @Test
    public void mkdir() throws IllegalArgumentException, Exception {
        fs.mkdirs(new Path("/aaa/bbb/ccc"));
    }

    /** 删除文件或文件夹 */
    @Test
    public void rm() throws IllegalArgumentException, IOException {
        fs.delete(new Path("/aa"), true);
    }
}

原文链接 :https://www.cnblogs.com/binarylei/p/10460865.html

赞(0)
未经允许不得转载:91coding » Hadoop Java API — HDFS
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

立即登录   注册

91CODING 小白轻松上手,大牛稳健进步

关于我们免责声明