一、需求分析
将本地文件系统中的hdfsDemo文件传到HDFS文件系统上的目录中,如下:hdfs://hadoop01:9000/data/hdfs/。
首先,判断指定的文件夹是否存在,若不存在则创建指定的文件夹,然后将文件夹中的文件及文件夹列出,将文件传到指定的地址中。
二、java代码开发
废话不多说,直接贴代码。格式不对的话,凑合看吧。。。
public class HdfsDemo {
public static void main(String[] args) {
// 指定的路径
String uri = "hdfs://hadoop01:9000/data/hdfs";
String p_uri = "hdfs://hadoop01:9000/data";
// linux中的文件路径
String source = "/usr/local/filecontent/hdfsDemo";
// HDFS中要创建的文件
String file = "hdfs://hadoop01:9000/data/hdfs/hdfsDemo";
Configuration conf = new Configuration();
FileSystem fs = null;
try{
fs = FileSystem.get(new URI(uri), conf);
Path p_path = new Path(p_uri);
// 判断指定的路径是否存在
boolean isExists = fs.exists(new Path(uri));
if(!isExists){
// 不存在
System.out.println("======指定的目录不存在======");
FileStatus status[] = fs.listStatus(p_path);
System.out.println("======现有目录结构如下======");
for (int i = 0; i < status.length; i++) {
System.out.println(status[i].getPath().toString());
}
System.out.println("======正在创建指定的目录=====");
fs.mkdirs(new Path(uri));
System.out.println("========目录创建成功========");
FileSystem fs1 = FileSystem.get(new URI(uri), conf);
FileStatus status1[] = fs1.listStatus(p_path);
System.out.println("======创建后目录结构如下======");
for (int i = 0; i < status1.length; i++) {
System.out.println(status1[i].getPath().toString());
}
}
System.out.println("======正在将文件传输到HDFS文件系统中======");
InputStream in = new BufferedInputStream(new FileInputStream(source));
OutputStream out = fs.create(new Path(file));
IOUtils.copyBytes(in, out, 4096,true);
System.out.println("======传输成功=======");
}catch(Exception e){
e.printStackTrace();
}finally{
if(fs != null){
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
基本已经没问题了,不过还要在hdfs上查看是否已经传输过去了。