1,打开你创建的hadoop集群
(不会的可以点击
https://blog.csdn.net/lpf787887/article/details/89043159
https://blog.csdn.net/lpf787887/article/details/89113512)
2,打开hadoop-2.6.5\share\hadoop文件将下面的lib放入新建的项目中
废话不多说附上源码粘贴即可
package com.huawei.com;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
-
@author Lpf.
-
@version 创建时间:2019年4月9日 下午9:56:25
*/
public class HDFSDome {private Configuration conf;
private FileSystem fs;@Before
public void before() throws IOException {
// 初始化hadoop默认配置文件,如果有指定的配置,则覆盖默认配置
conf = new Configuration(true);
// 创建一个文件系统,封装了一个对HDFS的客户端连接
fs = FileSystem.get(conf);
}@After
public void after() throws IOException {
fs.close();
}/**
-
上传文件基础
*/
@Test
public void testWrite1() throws Exception {// 本地输出流获取
FileInputStream fis = new FileInputStream(new File(“F:\硬盘上的资料\java\SpringEclipse\sts-bundle.zip”));
// 在hdfs上创建元数据,并返回输出流向hdfs上传数据
FSDataOutputStream dos = fs.create(new Path("/usr/root/sts-bundle.zip"));byte[] buf = new byte[4096];
int len = -1;while ((len = fis.read(buf)) != -1) {
dos.write(buf, 0, len);
}
// 输入流关闭
fis.close();
dos.flush();
dos.close();
}
/**
-
利用hadoop提供的工具上传
*/
@Test
public void testWrite2() throws Exception {// 本地输入流获取
FileInputStream fis = new FileInputStream(“F:\硬盘上的资料\java\SpringEclipse\sts-bundle.zip”);
// 在hdfs上创建元数据,并返回输出流向hdfs上传数据
FSDataOutputStream dos = fs.create(new Path("/usr/local/sts-bundle.zip"));IOUtils.copyBytes(fis, dos, conf);
// 输入流关闭
fis.close();
dos.flush();
dos.close();
}
@Test
public void testDownload1() throws Exception {// 获取hdfs上的元数据 FSDataInputStream dis = fs.open(new Path("/usr/local/sts-bundle.zip")); // 获取本地输出流文件 FileOutputStream fos = new FileOutputStream("D:\\sts-bundle.zip"); byte[] buf = new byte[4096]; int len = -1; while ((len = dis.read(buf)) != -1) { fos.write(buf, 0, len); } // 输入流关闭 dis.close(); fos.flush(); fos.close();
}
@Test
public void testDownload2() throws Exception {// 获取hdfs上的元数据 FSDataInputStream dis = fs.open(new Path("/usr/local/sts-bundle.zip")); // 获取本地输出流文件 FileOutputStream fos = new FileOutputStream("D:\\sts-bundle.zip"); IOUtils.copyBytes(dis, fos, conf); // 输入流关闭 dis.close(); fos.flush(); fos.close();
}
/**
-
查看文件具体元数据信息
*/
@Test
public void testLl() throws IllegalArgumentException, IOException {
FileStatus fileStatus = fs.getFileStatus(new Path("/usr/local/sts-bundle.zip"));
System.out.println(fileStatus);
// 输出结果
// FileStatus{path=hdfs://mycluster/usr/local/sts-bundle.zip;
// isDirectory=false; length=775338857; replication=2;
// blocksize=134217728; modification_time=1554815015888;
// access_time=1554815005902; owner=root; group=supergroup;
// permission=rw-r–r--; isSymlink=false}FileStatus[] listStatus = fs.listStatus(new Path("/usr/local"));
for (FileStatus fileStatus2 : listStatus) {
System.out.println(fileStatus2);
}
// 第二个数据多了了就不粘贴了
}
@Test
public void testDelete() throws Exception {
// 第一个参数为删除的目录或者文件
// 第二个参数参数表示是否迭代删除
fs.delete(new Path("/usr/local/sts-bundle.zip"), true);
}
} -