因此,经过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代码