zoukankan      html  css  js  c++  java
  • 2020年暑假 (4)

    1.Hadoop常用命令

    单进程启动 start-dfs.sh

    查看指定目录下内容 hdfs dfs -ls [目录]

    创建目录 hdfs dfs -mkdir [新目录]

    打开文件 hdfs dfs -cat [文件路径]

    重命名文件 hdfs dfs -mv [原文件名] [新文件名]

    上传文件或文件夹 hdfs dfs -put [本地目录] [hadoop目录]

    删除Hadoop上的文件或文件夹 hdfs dfs -rm [文件地址]

    下载文件到客户端本地磁盘

    hadoop fs -get /hdfs中的路径   /本地磁盘目录

    hadoop fs -copyToLocal /hdfs中的路径 /本地磁盘路径   ## 跟get等价

    hadoop fs -moveToLocal /hdfs路径  /本地路径  ## 从hdfs中移动到本地

    2.Hadoop的一些API的使用

    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();
        }
        
    
    }

     

  • 相关阅读:
    五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》 咔咔
    MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》 咔咔
    C++类型转换:const_cast 和reinterpret_cast
    C++类型转换
    C++中*和&的用法
    CMake简介
    文件和流IO
    字节存储:大端字节和小端字节
    离线的Window 10无法安装.Net Framework 3.5的解决办法
    KeyTool 使用简介
  • 原文地址:https://www.cnblogs.com/ywqtro/p/13527918.html
Copyright © 2011-2022 走看看