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
    

  • 相关阅读:
    JavaScript 基础(三)
    2015-10-15 第十四节课 补充CSS一些特殊选择器
    2015-09-29 第八节课 JavaScript 基础(二)(js语句:条件、循环)
    2015-09-28 第七节课JavaScript 基础(一) (js简介、声明变量、数据类型)
    2015 09-23 第五节课程(css:仿站及常见代码用法)
    【小练习2】如何制作“表格”
    51nod-1627 瞬间移动(组合数+逆元)
    POJ-3450 Corporate Identity (KMP+后缀数组)
    POJ-2406 Power Strings(KMP)
    CSU-1632 Repeated Substrings (后缀数组)
  • 原文地址:https://www.cnblogs.com/SparseMatrix/p/5255547.html
Copyright © 2011-2022 走看看