您的当前位置:首页正文

本地向hdfs上传文件

2023-05-15 来源:年旅网
import java.net.URI;

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

public class UpLoadFile {

/**

* @param args */

public static void main(String[] args) { //配置文件

Configuration conf = new Configuration(); try{

//设置配置文件

conf.set(\"fs.default.name\", \"hdfs://192.168.1.45:9000\"); // 获得hdfs文件系统 FileSystem hdfs =

FileSystem.get(URI.create(\"hdfs://192.168.1.45:9000\"), conf); // 本地文件系统

FileSystem localfs = FileSystem.getLocal(conf);

//原路径

String localStr = \"F:/111\"; //目的路径

String dst = \"/home/test2/\";

// 判断输入输出目录存不存在

if (!localfs.exists(new Path(localStr))|| !hdfs.exists(new Path(dst))) {

//异常处理 return; }

// 判断目标路径是否为文件夹

if (!hdfs.getFileStatus(new Path(dst)).isDir()) { //异常处理 return; }

// 判断输入路径是否为文件夹

boolean dir = localfs.getFileStatus(new Path(localStr)).isDir();

if (dir) {//若为文件夹

//FileStatus对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。 //获取列表

FileStatus[] status = localfs.listStatus(new Path(localStr));

for (FileStatus sta : status) { //获取文件路径

Path path = sta.getPath();

if (sta.isDir()) {//若仍为目录

path = new Path(path.getParent() + \"/\" + path.getName()

+ \"/\"); }

// 上传文件(源文件不删除,覆盖目标文件)

hdfs.copyFromLocalFile(false, true, path, new Path(dst));

} }else{

// 上传文件(源文件不删除,覆盖目标文件)

hdfs.copyFromLocalFile(false, true, new Path(localStr), new Path(dst)); }

System.out.println(\"success\"); }catch(Exception e){ e.printStackTrace(); }

} }

导入jar包如下:

因篇幅问题不能全部显示,请点此查看更多更全内容