zoukankan      html  css  js  c++  java
  • IDEA 创建HDFS项目 JAVA api

    1.创建quickMaven

    1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中

    2.写一个repostory将依赖加载到本地仓库中

    这是加载完成的页面

    这是开发代码

    package com.kevin.hadoop;


    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.*;
    import org.apache.hadoop.io.IOUtils;
    import org.apache.hadoop.util.Progressable;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.net.URI;

    /**
    * Created by Administrator on 2018/7/21 0021.
    * Hadoop HDFS java API 操作
    */
    public class HDFSApp {
    public static final String HDFS_PATH = "hdfs://hadoop000:8020";
    //文件系统
    FileSystem fileSystem = null;
    //配置类
    Configuration configuration = null;

    //Before适用于类加载之前
    @Test
    /**
    * 创建HDFS系统
    */
    public void mkdir() throws Exception {
    fileSystem.mkdirs(new Path("/hdfsapi/test"));
    }

    @Test
    public void create() throws Exception {
    FSDataOutputStream output = fileSystem.create(new Path("/hdfsapi/test/a.txt"));
    output.write("hello hadoop".getBytes());
    output.flush();
    output.close();
    }

    @Test
    /**
    * 查看HDFS文件上的内容
    */
    public void cat() throws Exception {
    FSDataInputStream in = fileSystem.open(new Path("/hdfsapi/test/a.txt"));
    IOUtils.copyBytes(in, System.out, 1024);
    in.close();
    }

    @Before
    public void setUp() throws Exception {
    System.out.printf("HDFSapp.setup");
    configuration = new Configuration();
    //拿到文件系统
    fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, "hadoop");
    }

    //关闭资源用的这个
    @After
    public void tearDown() throws Exception {
    //释放资源
    configuration = null;
    fileSystem = null;
    System.out.printf("HDFSAPP.tearDown");
    }

    /**
    * 重命名文件
    */
    @Test
    public void rename() throws Exception {
    Path oldPath = new Path("/hdfsapi/test/a.txt");
    Path newPath = new Path("/hdfsapi/test/b.txt");
    fileSystem.rename(oldPath, newPath);
    }

    /**
    * 上传一个文件
    *
    * @throws Exception
    */
    @Test
    public void copyFromLocalFile() throws Exception {
    Path localPath = new Path(" //c//hello.txt");
    Path hdfsPath = new Path("/hdfsapi/test");
    fileSystem.copyFromLocalFile(localPath, hdfsPath);
    }

    /**
    * 上传一个大文件
    *
    * @throws Exception
    */
    @Test
    public void copyFromLocalBigFile() throws Exception {
    InputStream in = new BufferedInputStream(
    new FileInputStream(
    new File("C:\mmall-fe\all.zip")));

    FSDataOutputStream output = fileSystem.create(new Path("/hdfsapi/test/all.zip"),
    new Progressable() {
    public void progress() {
    System.out.print("."); //带进度提醒信息
    }
    });


    IOUtils.copyBytes(in, output, 4096);
    }
    /**
    * 下载HDFS文件
    */
    @Test
    public void copyTOLocalFile() throws Exception{
    Path localPath = new Path("C:\test\b.txt");
    Path hdfsPath = new Path("/hdfsapi/test/hello.txt");
    fileSystem.copyToLocalFile(false,hdfsPath,localPath,true);
    }
    @Test
    public void listFiles() throws Exception {
    FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/hdfsapi/test"));

    for (FileStatus fileStatus : fileStatuses) {
    String isDir = fileStatus.isDirectory() ? "文件夹" : "文件";
    //副本
    short replication = fileStatus.getReplication();
    //大小
    long len = fileStatus.getLen();
    //路径
    String path = fileStatus.getPath().toString();

    System.out.println(isDir + " " + replication + " " + len + " " + path);
    }
    }
    @Test
    public void delete() throws Exception{
    fileSystem.delete(new Path("hdfsapi/test/"),true);
    }

    }


    注意在查询文件的副本系数时如果是通过hadoop sell put上去的文件副本系数在伪分布式中是1,如果说是通过java api put上去的则副本系数是1,因为我们并没有在本地设置自己的副本系数,所以hadoop采用自己的副本系数

  • 相关阅读:
    leetcode 141 环形链表
    [转载]Tensorflow中reduction_indices 的用法
    SIFT特征原理与理解
    numpy切片和布尔型索引
    IPython的使用
    [文献阅读]基于卷积神经网络的高光谱图像深度特征提取与分类
    验证码校验
    防止表单重复提交
    MyBatis 一对一,一对多,多对多
    MySQL基础内容
  • 原文地址:https://www.cnblogs.com/chenligeng/p/9348120.html
Copyright © 2011-2022 走看看