HDFS简单运用--实现文件系统上文件的增删查下载上传

在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  如果断了就会有问题 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值