当前位置:   article > 正文

HDFS客户端增删改查操作_hdfs 不同用户 增删改查操作

hdfs 不同用户 增删改查操作

方式1:

        API操作文件的增删改查

        

                  构造一个配置参数对象,设置一个参数:给出要访问的hdfsURI

                   // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址

                   // newConfiguration();的时候,它就会去加载jar包中的hdfs-default.xml

                   // 然后再加载classpath下的hdfs-site.xml(可以从集群中拷贝一份,直接放到classpath下)

                   Configurationconf = new Configuration();

                   conf.set("fs.defaultFS","hdfs://hdp-node01:9000");

                  conf.set("dfs.replication","3");

                   // 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例

                   // fs =FileSystem.get(conf);


                   /**

                    * 参数优先级: 1、客户端代码中设置的值 2classpath下的用户自定义配置文件 3、然后是服务器的默认配置

                    */

             // 简写,就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户,其他参数还是设置在conf中

                  fs =FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf,"hadoop");

—————————————————————————————————————————————

                上传文件:

                        fs.copyFromLocalFile(new Path(src), new Path(dst));

                下载文件:

                         fs.copyToLocalFile(new Path(src), new Path(dst));

                创建目录:

                       fs.mkdirs(newPath(""));

                删除文件夹:

                       fs.delete(newPath("/aaa"), true);  //如果是非空文件夹,参数2必须给值true

                 重命名文件或文件夹:

                   fs.rename(newPath("/a1"), new Path("/a2"))

                查看目录信息,只显示文件:

                        

public void testListFiles() throws FileNotFoundException,IllegalArgumentException, IOException {

                   RemoteIterator<LocatedFileStatus>listFiles = fs.listFiles(new Path("/"), true);

                   while(listFiles.hasNext()) {

                            LocatedFileStatusfileStatus = listFiles.next();

                            System.out.println(fileStatus.getPath().getName());

                            System.out.println(fileStatus.getBlockSize());

                            System.out.println(fileStatus.getPermission());

                            System.out.println(fileStatus.getLen());

                            BlockLocation[]blockLocations = fileStatus.getBlockLocations();

                            for(BlockLocation bl : blockLocations) {

                 System.out.println("block-length:"+ bl.getLength() + "--" + "block-offset:" +bl.getOffset());

                                     String[]hosts = bl.getHosts();

                                     for(String host : hosts) {

                                               System.out.println(host);

                                     }

                            }

                   }

         }

                    查看文件及文件夹信息:

                       

public void testListAll() throws FileNotFoundException,IllegalArgumentException, IOException {

                   FileStatus[]listStatus = fs.listStatus(new Path("/"));

                   Stringflag = "d--             ";

                   for(FileStatus fstatus : listStatus) {

                            if(fstatus.isFile())  flag = "f--         ";

                            System.out.println(flag+ fstatus.getPath().getName());

                   }

         }

 


方式2:

            通过流的方式访问HDFS,更底层的操作。

                 

                上传文件:

                    FSDataOutputStream outputStream = fs.create(new Path("/filename),true);

                   FileInputStreaminputStream = new FileInputStream("c:/filename1);

                   IOUtils.copy(inputStream,outputStream);

                下载文件:

                   FSDataInputStreamin = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz"));

                   FileOutputStreamout = new FileOutputStream(new File("c:/jdk.tar.gz"));

                   IOUtils.copyBytes(in,out, 4096);

                查看文件内容:

                    FSDataInputStream in = fs.open(newPath("/filename));

                   IOUtils.copyBytes(in, System.out, 1024);

                在此过程可以随机定位,多个机器可以并发的所及读取HDFS文件指定位置的内容。

                   in.seek(22);//可以将流的起始偏移量进行自定义












声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/510619
推荐阅读
相关标签
  

闽ICP备14008679号