eclipse实现hdfs文件上传下载

前一篇介绍了eclipse搭建hadoop开发环境,这一篇通过代码来实现hdfs的上传和下载文件功能

上传文件

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class TestHdfsDemo {

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("dfs.client.use.datanode.hostname", "true");
        FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "hadoop");
        fs.copyFromLocalFile(new Path("D:/tokens.txt"), new Path("/a/"));
        fs.close();
    }   
}

很简单的几行代码,这里需要注意配置的hdfs://master:9000中,master是在云服务器hosts文件中配置了域名和ip(配置内网ip,因为namenode和datanode在云服务器上是通过内网ip通信的)的对应,当然,master也是我的云服务器的主机名,是为了通过主机名与datanode通信。程序中,也可以明确指定ip地址,但是在hdfs-site.xml配置的是主机名
需要注意的是,conf.set("dfs.client.use.datanode.hostname", "true");这句话是表示按照主机名进行通信,否则无法上传文件和下载文件。

下载文件

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class TestHdfsDemo {

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("dfs.client.use.datanode.hostname", "true");
        FileSystem fs = FileSystem.get(new URI("hdfs://193.112.188.113:9000"), conf, "hadoop");
        fs.copyToLocalFile(new Path("/a/tokens.txt"), new Path("D:\\"));
//      fs.copyFromLocalFile(new Path("D:/student.txt"), new Path("/a/"));
        fs.close();
    }   
}

也非常简单。

注意项

之前一直很困惑configuration中设置hdfs,不清楚什么时候运行在搭建的hadoop集群上,后来看到一篇文章https://blog.csdn.net/qq_36411874/article/details/68936734
看到里面讲的,如果configuration不设置,则默认读写local目录运行,如果设置了hdfs就可以在hdfs上跑,如果引入hdfs-site.xml文件,也可以在hdfs上跑,通过hdfs.addResource引入。
如果要设置eclipse代码提交jar到集群,也要设置jobtracker,或者引入mapred-site.xml文件。

你可能感兴趣的:(eclipse实现hdfs文件上传下载)