项目使用了Maven  Project 快速进行HDFS 客户端程序测试

客户端操作系统:win10 64位

JDK: 1.7.0_79

开发工具 :Eclipse Luna

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.alixx</groupId>
  <artifactId>hdfsz</artifactId>
  <version>0.0.1</version>
  <packaging>jar</packaging>

  <name>hdfsz</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
    <!-- hadoop 分布式文件系统类库 -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.3</version>
    </dependency>
    <!-- hadoop 公共类库 -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.3</version>
    </dependency>
  </dependencies>
</project>

测试类HDFSUtil

package com.bonc.hdfsz;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.commons.compress.utils.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
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 HdfsUtil {
    /*
        FileSystem是文件系统的抽象,HDFS是分布式文件系统对FileSystem的实现,如此即可解耦合。
        不论底层文件系统的具体实现是什么样的,文件系统FileSystem统一提供了访问接口。
    */

    FileSystem fs = null;

    @Before
    public void init() throws IOException, InterruptedException, URISyntaxException{

        //访问HDFS文件系统两种方式
        Configuration conf = new Configuration();

        /*
            方式1:设置默认文件系统、设置run Configuration的参数 -DHADOOP_USER_NAME=dream361
            默认读取classpath下的xxx.site.xml配置文件,并解析其内容,封装到conf对象中。
            conf.set("fs.defaultFS", "hdfs://master:9000/");
        */
        fs = FileSystem.get(conf);

        /*
            方式2:在此方法的参数中设置默认文件系统、用户名
              根据配置信息,去获取一个具体文件系统的客户端操作实例对象
        */
        fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "dream361");
    }

    // 上传方式1:更底层的
    @Test
    public void upload1() throws IOException{

        Path dst = new Path("hdfs://master:9000/c.txt");

        FSDataOutputStream os = fs.create(dst);

        FileInputStream in = new FileInputStream("D:/c.txt");

        IOUtils.copy(in, os);
    }

    // 上传方式2: 封装好的
    @Test
    public void upload2() throws IllegalArgumentException, IOException{
        fs.copyFromLocalFile(new Path("D:/c2.txt"), new Path("hdfs://master:9000/c3.txt"));
    }

    // 下载文件
    @Test
    public void download() throws Exception, IOException{
        fs.copyToLocalFile(new Path(""), new Path(""));
    }

    //迭代列出文件
    @Test
    public void listFiles1() throws FileNotFoundException, IllegalArgumentException, IOException{
        //listFiles列出的是文件信息,而且提供递归遍历 ,第二个参数为false则不提供递归
        RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);

        while(files.hasNext()){
            LocatedFileStatus file = files.next();
            Path filePath = file.getPath();
            String fileName = filePath.getName();
            System.out.println(fileName);
        }
    }
    //迭代列出目录及文件
    @Test
    public void listFiles2() throws FileNotFoundException, IllegalArgumentException, IOException{
        //listStatus可以列出文件和目录信息,但是不提供自带的递归遍历
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        for(FileStatus status:listStatus){
            String name = status.getPath().getName();
            //判断是目录还是文件,然后打印name+和判断结果
            System.out.println(name+(status.isDirectory()?" is dir":" is file"));
        }
    }
    //创建目录
    @Test
    public void mkdir() throws IllegalArgumentException, IOException{
        fs.mkdirs(new Path("/aa/bb/cc"));
    }

    //删除文件或目录
    @Test
    public void rmFile() throws IllegalArgumentException, IOException{
        fs.delete(new Path("/aa"),true);
    }

    //移动文件
    @Test
    public void mvFile() throws IllegalArgumentException, IOException{
        fs.rename(new Path("/aa/a.txt"), new Path("/bb/b.txt"));
    }

    //在程序入口测试
    public static void main(String[] args) throws IOException {
        //配置文件信息
        Configuration conf = new Configuration();

        FileSystem fs = FileSystem.get(conf);

        Path src = new Path("hdfs://master:9000/jdk.tar.gz");

        FSDataInputStream in = fs.open(src);

        FileOutputStream os = new FileOutputStream("D:/jdk.tar.gz");

        IOUtils.copy(in, os);
    }
}

【Hadoop】HDFS的java客户端编写的更多相关文章

  1. 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结

    HDFS的JAVA客户端编写  现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...

  2. HDFS的Java客户端编写

    总结: 之前在教材上看hdfs的Java客户端编写,只有关键代码,呵呵…….闲话不说,上正文. 1. Hadoop 的Java客户端编写建议在linux系统上开发 2. 可以使用eclipse,ide ...

  3. 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)

    一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...

  4. 一脸懵逼学习hadoop之HDFS的java客户端编写

    1:eclipse创建一个项目,然后导入对应的jar包: 鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries ...

  5. day03-hdfs的客户端操作\hdfs的java客户端编程

    5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...

  6. hdfs shell命令及java客户端编写

    一. hdfs shell命令 可以通过hadoop fs 查看所有的shell命令及其用法. 传文件到hdfs: hadoop fs -put /home/koushengrui/Downloads ...

  7. Hadoop学习(2)-java客户端操作hdfs及secondarynode作用

    首先要在windows下解压一个windows版本的hadoop 然后在配置他的环境变量,同时要把hadoop的share目录下的hadoop下的相关jar包拷贝到esclipe 然后Build Pa ...

  8. HDFS的Java客户端操作代码(HDFS的查看、创建)

    1.HDFS的put上传文件操作的java代码: package Hdfs; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  9. HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)

    1.通过java.net.URL实现屏幕显示demo1文件的内容 package Hdfs; import java.io.InputStream; import java.net.URL; impo ...

随机推荐

  1. U盘发现器

    U盘发现器 package com.lx.io; import java.io.File; import java.io.IOException; import java.util.ArrayList ...

  2. 处理文本,提取数据的脚本-主要就是用sed

    处理文本,提取数据的脚本 #! /bin/sh | sed 's/)<\/small><\/td><td>/\n/g' # 用换行符替换 # 删除带有分号的行 # ...

  3. Groovy - 介绍

    Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言.使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的 ...

  4. LINUX下的远端主机登入 校园网络注册 网络数据包转发和捕获

    第一部分:LINUX 下的远端主机登入和校园网注册 校园网内目的主机远程管理登入程序 本程序为校园网内远程登入,管理功能,该程序分服务器端和客户端两部分:服务器端为remote_server_udp. ...

  5. spring boot 配置文件application

    场景:在项目部署的过程中,对于spring boot的配置文件一直不很了解,直到项目出现一个莫名其妙的问题——工程classes中的配置文件被覆盖,程序启动总是报错! 1  配置文件的优先级 appl ...

  6. 管理 Machine - 每天5分钟玩转 Docker 容器技术(47)

    用 docker-machine 创建 machine 的过程很简洁,非常适合多主机环境.除此之外,Docker Machine 也提供了一些子命令方便对 machine 进行管理.其中最常用的就是无 ...

  7. 【原创】IE11惊现无厘头Crash BUG(三招搞死你的IE11,并提供可重现代码)!

    前言 很多人都知道我们在做FineUI控件库,而且我们也做了超过 9 年的时间,在和浏览器无数次的交往中,也发现了多个浏览器自身的BUG,并公开出来方便大家查阅: 分享IE7一个神奇的BUG(不是封闭 ...

  8. 蓝桥杯比赛javaB组练习《方格填数》

    方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ ( ...

  9. decode

    含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN ...

  10. [补档][JLOI 2017]聪明的燕姿

    [NOI 2008]假面舞会 题目 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排着队拿着爱的号码牌 ...