如何以编程方式写入HDFS



因此,经过36个小时的实验,我终于设法使集群启动并运行,但是现在我很困惑如何使用Java将文件写入文件?一个教程说应该使用该程序,但我根本不理解,它也不正常。

public class FileWriteToHDFS {
public static void main(String[] args) throws Exception {
    //Source file in the local file system
    String localSrc = args[0];
    //Destination file in HDFS
    String dst = args[1];
    //Input stream for the file in local file system to be written to HDFS
    InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
    //Get configuration of Hadoop system
    Configuration conf = new Configuration();
    System.out.println("Connecting to -- "+conf.get("fs.defaultFS"));
    //Destination file in HDFS
    FileSystem fs = FileSystem.get(URI.create(dst), conf);
    OutputStream out = fs.create(new Path(dst));
    //Copy file from local to HDFS
    IOUtils.copyBytes(in, out, 4096, true);
    System.out.println(dst + " copied to HDFS");
    }
}

我的困惑是,这条代码如何确定我的群集的细节?它将如何知道主节点在哪里以及slavenodes在哪里?

此外和datanodes。我应该手动提供这条路吗?这是如何运作的?请建议一些博客可以帮助我更好地理解它或可以使用最小的例子。

首先,您需要在类路径中添加一些hadoop库。没有这些,不,该代码将无法正常工作。

它将如何知道主节点在哪里以及slavenodes在哪里?

来自new Configuration();和随后的conf.get("fs.defaultFS")

它读取HADOOP_CONF_DIR环境变量的Core-site.xml,并返回Namenode的地址。客户只需要与Namenode进行对话即可接收数据台的位置,从中将文件块写入

该程序将文件写回我的本地存储

尚不清楚您在哪里配置了文件系统,但是默认值为file://,您的本地磁盘。您可以在core site.xml中更改此操作。如果您遵循hadoop文档,则伪分布式群集设置会提到以下

hdfs dfs -put做同样的事情时,为什么您需要自己的Java代码

也不清楚为什么您需要自己的Java代码

相关内容

  • 没有找到相关文章

最新更新