大数据学习——hdfs客户端操作

package cn.itcast.hdfs;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;

public class HdfsClient {
    FileSystem fs = null;

    @Before
    public void init() throws Exception {
        // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI
        // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址
        // new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml
        // 然后再加载classpath下的hdfs-site.xml
        // conf.set("fs.defaultFS", "hdfs://mini1:9000");
        /**
         * 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置
         */
        /*conf.set("dfs.replication", "2");
        conf.set("dfs.block.size", "64m");*/

        // 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例
        // fs = FileSystem.get(conf);

        // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是root用户
        Configuration conf = new Configuration();
        fs = FileSystem.get(new URI("hdfs://mini1:9000"), conf, "root");
    }

    /**
     * 往hdfs上传文件
     */

    @Test
    public void testAddFileToHdfs() throws Exception {
        //要上传的文件所在的本地路径
        //要上传到hdfs的目标路径*/
        Path src = new Path("e:/hello1.txt");
        Path dst = new Path("/");
        fs.copyFromLocalFile(src, dst);
        fs.close();

    }
    /**
     * 从hdfs中复制文件到本地文件系统
     *
     * @throws IOException
     * @throws IllegalArgumentException
     */
    @Test
    public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {

        fs.copyToLocalFile(false, new Path("/hello1.txt"), new Path("e:/"), true);
        fs.close();

    }

    /**
     * 通过流的形式从hdfs下载数据
     * @throws Exception
     */
    @SuppressWarnings("resource")
    @Test
    public void testDownloadFileToLocal2() throws Exception {

        FSDataInputStream in = fs.open(new Path("/hello1.txt"));

        FileOutputStream out = new FileOutputStream(new File("e:/1.txt"));

        IOUtils.copy(in, out);

        fs.close();
    }
    /**
     * 目录操作
     *
     * @throws IllegalArgumentException
     * @throws IOException
     */
    @Test
    public void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {

        // 创建目录
//        fs.mkdirs(new Path("/nihao/henhao/yeah"));

//        // 删除文件夹 ,如果是非空文件夹,参数2必须给值true
//        fs.delete(new Path("/nihao/henhao"), true);
//
//        // 重命名文件或文件夹
        fs.rename(new Path("/nihao"), new Path("/ni"));

    }
    /**
     * 查看目录信息,只显示文件
     *
     * @throws IOException
     * @throws IllegalArgumentException
     * @throws FileNotFoundException
     */
    @Test
    public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {

        // 思考:为什么返回迭代器,而不是List之类的容器
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);

        while (listFiles.hasNext()) {

            LocatedFileStatus fileStatus = 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);
                }

            }

            System.out.println("--------------为allen打印的分割线--------------");

        }

    }

    /**
     * 查看文件及文件夹信息
     *
     * @throws IOException
     * @throws IllegalArgumentException
     * @throws FileNotFoundException
     */
    @Test
    public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {

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

        String flag = "";
        for (FileStatus fstatus : listStatus) {

            if (fstatus.isFile()) {
                flag = "f-- ";
            } else {
                flag = "d-- ";
            }
            System.out.println(flag + fstatus.getPath().getName());
            System.out.println(fstatus.getPermission());

        }

    }
}

原文地址:https://www.cnblogs.com/feifeicui/p/10216724.html

时间: 2024-07-29 15:25:16

大数据学习——hdfs客户端操作的相关文章

大数据学习——hdfs客户端流式操作代码的实现

package cn.itcast.bigdata.hdfs.diceng; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.io.IOUtils; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.FileInputStrea

大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和SecondaryNameNode(面试开发重点)

第1章 HDFS概述1.1 HDFS产出背景及定义1.2 HDFS优缺点1.3 HDFS组成架构1.4 HDFS文件块大小(面试重点)第2章 HDFS的Shell操作(开发重点)第3章 HDFS客户端操作(开发重点)3.1 HDFS客户端环境准备3.2 HDFS的API操作3.2.1 HDFS文件上传(测试参数优先级)3.2.2 HDFS文件下载3.2.3 HDFS文件夹删除3.2.4 HDFS文件名更改3.2.5 HDFS文件详情查看3.2.6 HDFS文件和文件夹判断3.3 HDFS的I/O

好程序员大数据学习路线分享Scala系列之集合操作函数

好程序员大数据学习路线继续为大家分享Scala系列之集合操作函数4.6 集合的重要函数4.6.1sum/max/min/count在序列中查找最大或最小值是一个极常见的需求,如下:val numbers = Seq(11, 2, 5, 1, 6, 3, 9) numbers.max //11 numbers.min //1 更高级的例子,其中包含一个书的序列case class Book(title: String, pages: Int) val books = Seq( Book("Futu

大数据学习线路图

近期开始大数据的学习,在学习之前给给自己定义了一个大数据学习路线 大数据技术学习路线指南 一.Hadoop入门,了解什么是Hadoop 1.Hadoop产生背景2.Hadoop在大数据.云计算中的位置和关系3.国内外Hadoop应用案例介绍4.国内Hadoop的就业情况分析及课程大纲介绍5.分布式系统概述6.Hadoop生态圈以及各组成部分的简介7.Hadoop核心MapReduce例子说明二.分布式文件系统HDFS,是数据库管理员的基础课程1.分布式文件系统HDFS简介2.HDFS的系统组成介

大数据学习路线

偶遇大数据学习路线,赶上一次科技革命不容易,追求下,要有所作为! 一.Hadoop入门,了解什么是Hadoop 1.Hadoop产生背景2.Hadoop在大数据.云计算中的位置和关系3.国内外Hadoop应用案例介绍4.国内Hadoop的就业情况分析及课程大纲介绍5.分布式系统概述6.Hadoop生态圈以及各组成部分的简介7.Hadoop核心MapReduce例子说明 二.分布式文件系统HDFS,是数据库管理员的基础课程 1.分布式文件系统HDFS简介2.HDFS的系统组成介绍3.HDFS的组成

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

大数据学习路线图 让你精准掌握大数据技术学习?

大数据指不用随机分析法这样捷径,而采用所有数据进行分析处理的方法.互联网时代每个企业每天都要产生庞大的数据,对数据进行储存,对有效的数据进行挖掘分析并应用需要依赖于大数据开发,大数据开发课程采用真实商业数据源并融合云计算+机器学习,让学员有实力入职一线互联网企业. 今天小编的技术分享详细学习大数据的精准路线图,学好大数据就还得靠专业的工具. 大数据学习QQ群:119599574 阶段一. Java语言基础 Java开发介绍.熟悉Eclipse开发工具.Java语言基础.Java流程控制.Java

大数据学习系列之—HBASE

hadoop生态系统 zookeeper负责协调 hbase必须依赖zookeeper flume 日志工具 sqoop 负责 hdfs dbms 数据转换 数据到关系型数据库转换 大数据学习群119599574 hbase简介 hadoop database 是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce 来处理Hbase中的海量数据,利用Zookeeper作为其分布式系统服务 主要用来存储非结