zoukankan      html  css  js  c++  java
  • HDFS的API操作

    HDFS设计目标

    硬件错误:数量众多的廉价机器使得硬件错误成为常态
    
    数据流访问:应用以流的方式访问数据;设计用于数据的批量处理,而不是低延时的实时交互处理。
    
    放弃全面支持POSIX
    
    大数据集:典型的HDFS上的一个文件大小是G或T数量级的,支持一个云中文件数量达到千万数量级
    
    简单的相关模型:假定文件一次写入多次读取。未来可能支持Appending-writer的模型
    
    移动计算比移动数据便宜:一个应用请求的计算,离它操作的数据越近就越高效
    
    多种软硬件平台中的可移植性
    

    HDFS来源

    源自于Google的GFS论文
    
    	发表于2003年10月
    	
    	HDFS是GFS克隆版
    	
    Hadoop Distributed File System
    
    易于拓展分布式文件系统
    
    运行在大量普通廉价机器上,提供容错机制
    
    为大量用户提供性能不错的文件存取服务
    

    工具类

    HdfsUtils.java

    package com.matrix.hdfs;
    
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    
    public class HdfsUtils {
    
    	public static FileSystem getFileSystem() throws Exception {
    	
    		Configuration conf = new Configuration();
    		conf.set(//
    				"fs.defaultFS", //
    				"hdfs://node1:9000"//
    		);
    
    		FileSystem fileSystem = FileSystem.get(//
    				new URI("hdfs://node1:9000"), //
    				conf, //
    				"root"//
    		);
    
    		return fileSystem;
    
    	}
    
    }
    

    往HDFS文件系统中进行写操作

    HdfsFsTest.java

    package com.matrix.hdfs;
    
    import java.io.File;
    import java.io.FileInputStream;
    
    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;
    
    public class HdfsFsTest {
    
    	public static void main(String[] args) throws Exception {
    
    		write();
    
    	}
    
    	public static void write() throws Exception {
    		FileSystem fileSystem = HdfsUtils.getFileSystem();
    
    		FSDataOutputStream outStream = fileSystem.create(new Path("/usr/a.txt"));
    		FileInputStream inStream = new FileInputStream(//
    				new File("D:/a.txt")//
    		);
    
    		try {
    			IOUtils.copyBytes(inStream, outStream, 4096, false);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			IOUtils.closeStream(inStream);
    			IOUtils.closeStream(outStream);
    		}
    	}
    
    }
    

    对HDFS文件系统中的文件进行读操作

    HdfsFsTest.java

    package com.matrix.hdfs;
    
    import java.io.File;
    import java.io.FileInputStream;
    
    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;
    
    public class HdfsFsTest {
    
    	public static void main(String[] args) throws Exception {
    
    		read();
    
    	}
    
    
    	public static void read() throws Exception {
    		String fileUri = "/usr/matrix/hosts";
    
    		FileSystem fileSystem = HdfsUtils.getFileSystem();
    
    		// FileSystem.newInstance(conf);
    
    		// LocalFileSystem localFileSystem = FileSystem.getLocal(conf);
    
    		FSDataInputStream inStream = fileSystem.open(new Path(fileUri));
    
    		try {
    
    			IOUtils.copyBytes(inStream, System.out, 4096, false);
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			IOUtils.closeStream(inStream);
    		}
    
    	}
    
    }
    

    运行结果:

    192.168.230.10 node1
    192.168.230.11 node2
    192.168.230.12 node3
    192.168.230.14 node5
    

  • 相关阅读:
    Using Resource File on DotNet
    C++/CLI VS CSharp
    JIT VS NGen
    [Tip: disable vc intellisense]VS2008 VC Intelisense issue
    UVa 10891 Game of Sum(经典博弈区间DP)
    UVa 10723 Cyborg Genes(LCS变种)
    UVa 607 Scheduling Lectures(简单DP)
    UVa 10401 Injured Queen Problem(简单DP)
    UVa 10313 Pay the Price(类似数字分解DP)
    UVa 10635 Prince and Princess(LCS N*logN)
  • 原文地址:https://www.cnblogs.com/SparseMatrix/p/5255547.html
Copyright © 2011-2022 走看看