zoukankan      html  css  js  c++  java
  • Hadoop大数据(第二天)JavaApi的调用

    1 下载个windows版的hadoop

    配置bin目录HADOOP_PATH
    

    2 引入jar包

    hadoop/common里的common包
    在这里插入图片描述
    lib里面所有的包
    在这里插入图片描述

    3 构造客户端

    package hdfs24;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.Arrays;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.LocatedFileStatus;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.RemoteIterator;
    import org.junit.Before;
    import org.junit.Test;
    
    public class HdfsClientDemo {
    	
    	
    	public static void main(String[] args) throws Exception {
    		/**
    		 * Configuration参数对象的机制:
    		 *    构造时,会加载jar包中的默认配置 xx-default.xml
    		 *    再加载 用户配置xx-site.xml  ,覆盖掉默认参数
    		 *    构造完成之后,还可以conf.set("p","v"),会再次覆盖用户配置文件中的参数值
    		 */
    		// new Configuration()会从项目的classpath中加载core-default.xml hdfs-default.xml core-site.xml hdfs-site.xml等文件
    		Configuration conf = new Configuration();
    		
    		// 指定本客户端上传文件到hdfs时需要保存的副本数为:2
    		conf.set("dfs.replication", "2");
    		// 指定本客户端上传文件到hdfs时切块的规格大小:64M
    		conf.set("dfs.blocksize", "64m");
    		
    		// 构造一个访问指定HDFS系统的客户端对象: 参数1:——HDFS系统的URI,参数2:——客户端要特别指定的参数,参数3:客户端的身份(用户名)
    		FileSystem fs = FileSystem.get(new URI("hdfs://hdp-01:9000/"), conf, "root");
    		
    		// 上传一个文件到HDFS中
    		fs.copyFromLocalFile(new Path("D:/install-pkgs/hbase-1.2.1-bin.tar.gz"), new Path("/aaa/"));
    		
    		fs.close();
    	}
    	
    	FileSystem fs = null;
    	
    	@Before
    	public void init() throws Exception{
    		Configuration conf = new Configuration();
    		conf.set("dfs.replication", "2");
    		conf.set("dfs.blocksize", "64m");
    		
    		fs = FileSystem.get(new URI("hdfs://hdp-01:9000/"), conf, "root");
    		
    	}
    	
    	
    	/**
    	 * 从HDFS中下载文件到客户端本地磁盘
    	 * @throws IOException 
    	 * @throws IllegalArgumentException 
    	 */
    	@Test
    	public void testGet() throws IllegalArgumentException, IOException{
    		
    		fs.copyToLocalFile(new Path("/hdp20-05.txt"), new Path("f:/"));
    		fs.close();
    		
    	}
    	
    	
    	/**
    	 * 在hdfs内部移动文件修改名称
    	 */
    	@Test
    	public void testRename() throws Exception{
    		
    		fs.rename(new Path("/install.log"), new Path("/aaa/in.log"));
    		
    		fs.close();
    		
    	}
    	
    	/**
    	 * 在hdfs中创建文件夹
    	 */
    	@Test
    	public void testMkdir() throws Exception{
    		
    		fs.mkdirs(new Path("/xx/yy/zz"));
    		
    		fs.close();
    	}
    	
    	
    	/**
    	 * 在hdfs中删除文件或文件夹
    	 */
    	@Test
    	public void testRm() throws Exception{
    		
    		fs.delete(new Path("/aaa"), true);
    		
    		fs.close();
    	}
    	
    	
    	
    	/**
    	 * 查询hdfs指定目录下的文件信息
    	 */
    	@Test
    	public void testLs() throws Exception{
    		// 只查询文件的信息,不返回文件夹的信息
    		RemoteIterator<LocatedFileStatus> iter = fs.listFiles(new Path("/"), true);
    		
    		while(iter.hasNext()){
    			LocatedFileStatus status = iter.next();
    			System.out.println("文件全路径:"+status.getPath());
    			System.out.println("块大小:"+status.getBlockSize());
    			System.out.println("文件长度:"+status.getLen());
    			System.out.println("副本数量:"+status.getReplication());
    			System.out.println("块信息:"+Arrays.toString(status.getBlockLocations()));
    			
    			System.out.println("--------------------------------");
    		}
    		fs.close();
    	}
    	
    	/**
    	 * 查询hdfs指定目录下的文件和文件夹信息
    	 */
    	@Test
    	public void testLs2() throws Exception{
    		FileStatus[] listStatus = fs.listStatus(new Path("/"));
    		
    		for(FileStatus status:listStatus){
    			System.out.println("文件全路径:"+status.getPath());
    			System.out.println(status.isDirectory()?"这是文件夹":"这是文件");
    			System.out.println("块大小:"+status.getBlockSize());
    			System.out.println("文件长度:"+status.getLen());
    			System.out.println("副本数量:"+status.getReplication());
    			
    			System.out.println("--------------------------------");
    		}
    		fs.close();
    	}
    	
    
    }
    
    

    4 添加hdfs-site.xml

    <configuration>
    	<property>
    		<name>dfs.replication</name>
    		<value>4</value>
    	</property>
    	
    	
    	<property>
    		<name>dfs.blocksize</name>
    		<value>16m</value>
    	</property>
    </configuration>
    
  • 相关阅读:
    JVMTIAgent
    Java 虚拟机编程接口JVMIT
    Java调试平台体系JPDA
    什么是缓存
    2019第49周日
    什么是你拥有的资本
    java里的static/final含义
    Java语言和JVM的使用说明书
    画图前端:mermaid。时序图/类图/甘特图/流程图/状态图/饼图。类似工具:Typora
    java通过下划线数字字面量增加可读性:10_00_00表示100000
  • 原文地址:https://www.cnblogs.com/chengxiaolong/p/10210816.html
Copyright © 2011-2022 走看看