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
    

  • 相关阅读:
    Get-CrmSetting返回Unable to connect to the remote server的解决办法
    Dynamics 365中的常用Associate和Disassociate消息汇总
    Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
    Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法
    Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
    注意,更改团队所属业务部门用Update消息无效!
    Dynamics 365的审核日志分区删除超时报错怎么办?
    Dynamics 365使用Execute Multiple Request删除系统作业实体记录
    Dynamics 365的系统作业实体记录增长太快怎么回事?
    Dynamics CRM日期字段查询使用时分秒的方法
  • 原文地址:https://www.cnblogs.com/SparseMatrix/p/5255547.html
Copyright © 2011-2022 走看看