java API 操作HDFS服务器

1.准备

  开发环境:eclipse

  依赖包:hadoop-2.7.7.tar.gz安装包 share/hadoop/下 common、hdfs中的jar包

  

2.连接HDFS服务器

    /**   * 连接HDFS服务器
     */
    @Test
    public void connectHDFS() {
        //做一个配置
        Configuration conf = new Configuration();
        //服务器地址 端口
        conf.set("fs.defaultFS", "hdfs://192.168.124.26:9000");
        try {
            //连接到服务器
            FileSystem fileSystem = FileSystem.get(conf);
            FileStatus fileStatus = fileSystem.getFileStatus(new Path("/upload/word.txt"));
            System.out.println(fileStatus.isFile());
            System.out.println(fileStatus.isDirectory());
            System.out.println(fileStatus.getPath());
            System.out.println(fileStatus.getLen());
            fileSystem.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

3.重命名(增删改操作需要使用root用户登陆)

    /**
     * 重命名
     */
    @Test
    public void mv() {
        Configuration conf = new Configuration();
        try {
            //修改文件名需要修改的权限,以root用户登陆HDFS
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"),conf,"root");
            boolean rename = fileSystem.rename(new Path("/upload/word.txt"), new Path("/upload/word2.txt"));
            System.out.println(rename?"修改成功":"修改失败");
            fileSystem.close();
        } catch (IOException | URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }        

4.创建文件夹

    /**
     * 创建文件夹
     */
    @Test
    public void mkdir() {
        Configuration conf = new Configuration();
        try {
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"),conf,"root");
            fileSystem.mkdirs(new Path("/user"));
            fileSystem.close();
        } catch (IOException | URISyntaxException | InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

5.文件上传(使用byte[])

    /**
     * 文件上传
     */
    @Test
    public void upload() {
        Configuration conf = new Configuration();
        try {
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"),conf,"root");
            FSDataOutputStream out = fileSystem.create(new Path("/upload/words.txt"));
            FileInputStream in = new FileInputStream(new File("E:\\words.txt"));
            byte[] b = new byte[1024];
            int len = 0;
            while((len=in.read(b))!=-1) {
                out.write(b,0,len);
            }
            in.close();
            out.close();
            fileSystem.close();
        } catch (IOException | URISyntaxException | InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

6.文件上传(使用IOUtils工具包)

    /**
     * 文件上传 使用IOUtils简化步骤
     * jar包在commons-io中
     */
    @Test
    public void upload2() {
        Configuration conf = new Configuration();
        try {
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"), conf, "root");
            FSDataOutputStream out = fileSystem.create(new Path("/upload/words2.txt"));
            FileInputStream in = new FileInputStream(new File("E:/words.txt"));
            IOUtils.copyBytes(in, out, conf);
            fileSystem.close();
        } catch (IOException | InterruptedException | URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

7.文件下载

    /**
     * 文件下载
     */
    @Test
    public void download() {
        Configuration conf = new Configuration();
        try {
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"), conf);
            FSDataInputStream in = fileSystem.open(new Path("/upload/word2.txt"));
            FileOutputStream out = new FileOutputStream(new File("E:/word2.txt"));
            byte[] b = new byte[1024];
            int len = 0;
            while((len=in.read(b))!=-1) {
                out.write(b, 0, len);
            }
            in.close();
            out.close();
            fileSystem.close();
        } catch (IOException | URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

8.实现命令lsr,递归显示文件夹和文件

    /**
     * 实现命令lsr    递归显示文件夹和文件
     */
    @Test
    public void lrs() {
        Configuration conf = new Configuration();
        try {
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.124.26:9000"),conf);
            isDir(fileSystem,new Path("/"));
            fileSystem.close();

        } catch (IOException | URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void isDir(FileSystem fileSystem,Path path) {
        try {
            FileStatus[] listStatuses = fileSystem.listStatus(path);
            for(FileStatus listStatus:listStatuses) {
                Path path1 = listStatus.getPath();
                boolean directory = fileSystem.isDirectory(path1);
                if(directory) {
                    System.out.println("文件夹:"+listStatus.getPath()+"\t"+listStatus.getLen()+"\t"+listStatus.getOwner()+"\t"+listStatus.getGroup());
                    isDir(fileSystem,path1);
                }else {
                    System.out.println("文件:"+listStatus.getPath()+"\t"+listStatus.getLen()+"\t"+listStatus.getOwner()+"\t"+listStatus.getGroup());
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

原文地址:https://www.cnblogs.com/zhan98/p/12346731.html

时间: 2024-08-27 03:04:37

java API 操作HDFS服务器的相关文章

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

使用Java API操作hdfs

如题 我就是一个标题党  就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Maven 下载jar包的镜像站改为 阿里云. 贴一下  pom.xml 使用到的jar包 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifa

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

使用java api操作Hadoop文件 Robbin

1 package cn.hadoop.fs; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.net.URI; 6 import java.net.URISyntaxException; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.FSDataOutputStream; 10 i

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

Java API 读取HDFS目录下的所有文件

/** * 获取1号店生鲜食品的分类id字符串 * @param filePath * @return */ public String getYHDSXCategoryIdStr(String filePath) { final String DELIMITER = new String(new byte[]{1}); final String INNER_DELIMITER = ","; // 遍历目录下的所有文件 BufferedReader br = null; try { F

Java API 读取HDFS的单文件

HDFS上的单文件: -bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_category Found 1 items -rw-r--r-- 2 deploy supergroup 520 2014-08-14 17:03 /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_category/repeatRecCategor

hive-通过Java API操作

通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 1 package org.admln.hive; 2 3 import java.sql.SQLException; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7 import java.sql.DriverManager; 8 9 public class testHiv