在eclipse上远程实现文件的增删查
首先创建一个新的hadoop locations与虚拟机下的主机(master)相连
1、查看 和 删除文件
示例如下:
import java.io.InputStream;
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;
public class HDFSDemo01 {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration(); //hadoop的配置文件对象
URI uri = URI.create("hdfs://master:9000"); //远程地址
//根据配置文件和远程地址创建文件系统
FileSystem fs = FileSystem.get(uri, conf, "hadoop"); //hadoop为用户名
//操作系统中的文件是File,文件系统中的文件是Path
Path file = new Path("/data/test02.txt"); //文件系统中的文件对象
InputStream in = fs.open(file); //打开文件取到文件数据流
IOUtils.copyBytes(in, System.out, 1024,true);
//下载文件系统上的文件
Path src = new Path("/in/data01.txt");
Path dst = new Path("d:\\data01.txt");
fs.copyToLocalFile(src, dst); //实现远程下载
//上传本地文件到文件系统
Path src01 = new Path("/in");
Path dst01 = new Path("d:\\wowo.dmp");
fs.copyFromLocalFile(src01, dst01);
System.out.println("完成了。。。");
fs.delete(new Path("/in/wowo.dmp"),true); //删除文件系统上的文件
System.out.println("删除成功!");
}
}
可以实现文件系统中文件的读取 可以说是先创建文件系统 在确定是要读取文件系统中的哪个文件 通过流的方式取到数据流 控制台输出 查看文件就是打开文件可以这样理解
2、添加一个文件 且向文件里面写入内容
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
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.apache.hadoop.util.Progressable;
public class HDFSDemo04 {
public static void main(String[] args) throws Exception {
//增加:
//1、创建目录
Configuration conf = new Configuration();
URI uri = URI.create("hdfs://master:9000");
FileSystem fs = FileSystem.get(uri,conf,"hadoop");
Path dir = new Path("/in"); //要创建的目录对象,一定要使用绝对路径
if(fs.exists(dir)){ //文件是否存在
System.out.println("文件存在。。。");
}else{
System.out.println("文件不存在!请创建文件");
if(fs.mkdirs(dir)){ //创建目录 默认权限为 755 644
System.out.println("目录创建成功。。。");
}else{
System.out.println("目录创建失败!");
}
}
//2、创建文件
Path file = new Path(dir,"data01.txt");
if(fs.exists(file)){
System.out.println("文件存在!");
}else{
if(fs.createNewFile(file)){
System.out.println("文件创建成功。。。");
}else{
System.out.println("文件创建失败!");
}
}
//3、在文件中添加内容
FSDataOutputStream out = null;
if(fs.exists(file)){
//文件存在 --> 追加内容
out = fs.append(file,4096,new Progressable() {
@Override //执行提示
public void progress() {
System.out.println(">>");
}
});
}else{
//文件不存在
fs.create(file,true,4096,new Progressable() {
@Override //执行提示
public void progress() {
System.out.println("...");
}
});
}
//ByteArrayInputStream in = new ByteArrayInputStream("Hello Hadoop".getBytes());
InputStream in = new FileInputStream("E:\\资料\\cite75_99.txt");
IOUtils.copyBytes(in, out, 4096,true);
System.out.println("写入数据完成。。。");
}
}
这里要注意的是我们在追加文件内容时如果中途断了一个节点,是会出问题的。因为系统还会默认三个节点,如果你去查看会发现的断的节点报255 在添加内容的时候可能不影响 但是追加的时候是会报错的 我们可以把备份数设置小一点 conf.set("dfs.replication","1") 追加时会去看我们的备份数 我这里配置的是3 如果断了就会有问题