在写Hadoop操作的时候
首先要在c盘下打开
C:\Windows\System32\drivers\etc打开hosts文件
在下面添加
前面是自己虚拟机伪分布式集群id后面是自己的节点名字。
如果不配置的话,就会在执行测试类的时候报错
配置xml文件
我说两个我认为重要的
上传 和 下载
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
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;
public class TestHdfs {
//hadoop对象
Configuration conf = null;
FileSystem fs = null;
@Before
public void conn() throws IOException{
//是否去加载xml配置文件,true为加载,false为不加载
conf = new Configuration(true);
//获取FileSystem对象,用来执行文件的增删改查
fs = FileSystem.get(conf);
}
@After
public void close() throws IOException{
fs.close();
}
//上传文件
@Test
public void uploadFile() throws IOException{
//上传的路径 相当于我的输出位置 也就是说我要把我的文件输入在这里
Path inputFile = new Path("/user/hdfs-site.xml");
//输出流 相当于文件的输出
FSDataOutputStream output = fs.create(inputFile);
//C盘下面的文件
InputStream input=new BufferedInputStream(new FileInputStream(new File("c://aa.txt")));
IOUtils.copyBytes(input, output, conf,true);
}
//下载
@Test
public void downloadFile() throws IOException{
//下载的路径
Path src = new Path("/user/hdfs-site.xml");
FSDataInputStream input = fs.open(src);
//创建文件输出流,输出到磁盘下的文件里
FileOutputStream output = new FileOutputStream("c://aa.txt");
IOUtils.copyBytes(input, output, conf,true);
/**
* IOUtils.copyBytes(in, out, 4096, false)
--in:是FSDataInputStream类的对象,是有关读取文件的类,也就是所谓“输入流”
--out:是FSDataOutputStream类的对象,是有关文件写入的类,也就是“输出流”
--4096表示用来拷贝的buffer大小(buffer是缓冲区)--缓冲区大小
-- true - 是否关闭数据流,如果是false,就在finally里关掉
作者:elrah
链接:https://www.jianshu.com/p/ec956006a5e8
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
*/
}
}