这里使用的是CDH 5.13.0分布式系统
在网上搜集了很久,找到一套能上传文件的java代码
package com.data.sysatem.crawler;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
public class Hdfs {
public static void main(String[] args) {
try {
System.setProperty("HADOOP_USER_NAME", "hadoop");//这里是分布式环境的用户名
String target = "hdfs://hadoop3:8020/usr/local";//需要上传的地址,这里需要注意的是单机版的使用9000端口,分布式系统需要使用8020端口,这个是hadoop提供的,后面的/usr/local是hdfs系统里面的路径,不是linux下面的那个路径不要混淆了
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(URI.create(target), config);
fs.copyFromLocalFile(new Path("filePath"), new Path(target));
System.out.println("完成...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
这里需要注意的几点就是:
1,需要填写用户(即hadoop)
2,单机版的和分布式版的hdfs文件系统写的端口不一样.
3,/usr/local这个路径不是linux系统路径.是hdfs文件系统路面的路径,当然可以自定义.
上传完成后,就可以查看hdfs上是否上传成功
访问 hadoopip:50070 如图:
选择: Utilities - Browse the file system
在输入框中数据hdfs文件系统路径(/usr/local)
点击GO! 就可以看到路径下面有哪些文件了.