首页 > 其他分享 >hdfs测试(文件上传,内容读取,文件删除)

hdfs测试(文件上传,内容读取,文件删除)

时间:2022-10-20 16:49:16浏览次数:59  
标签:文件 fs 读取 hdfs org hadoop new import

工具:idea2021

配置:hadoop2.6.0

项目:Maven项目

 

首先编辑pom.xml(Maven项目的核心文件)文件,添加如下内容,导入依赖(所需jar包)(注意hadoop版本号)

<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
    <artifactId>HDFS_test1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- Hadoop所需依赖包 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- junit测试依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

 

 这边可能会爆红,等它自动更新配置就好,或者手动刷新下载

JavaAPI.java

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import sun.plugin.com.BeanCustomizer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Scanner;

public class JavaAPI {
    // 可操作HDFS文件系统的对象
    FileSystem hdfs = null;

    private static FileSystem fs;

    // 测试方法执行前执行,用于初始化操作,避免频繁初始化
    @Before
    public void init() throws IOException {
        // 构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
        Configuration conf = new Configuration();
        // 指定使用HDFS访问
        conf.set("fs.defaultFS","hdfs://hadoop102:9002");
        // 进行客户端身份的设置(root为虚拟机的用户名,hadoop集群节点的其中一个都可以)
        System.setProperty("HADOOP_USER_NAME","root");
        // 通过FileSystem的静态get()方法获取HDFS文件系统客户端对象
        try {
            hdfs = FileSystem.get(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 测试方法执行后执行,用于处理结尾的操作,关闭对象
    @After
    public void close() throws IOException {
        // 关闭文件操作对象
        hdfs.close();
    }

    @Test

    public void testUploadFileToHDFS() throws IOException {
        // 待上传的文件路径(windows)
        Path src = new Path("E:/result.csv");
        // 上传之后存放的路径(HDFS)
        Path dst = new Path("/result.csv");
        // 上传
        hdfs.copyFromLocalFile(src,dst);
        System.out.println("上传成功");
    }

    @Test
    public void testMkdirFile() throws IOException {
        // 待创建目录路径
        Path src = new Path("/ZR");
        // 创建目录
        hdfs.mkdirs(src);
        System.out.println("创建成功");
    }

    @Test

    public  void write() throws IOException {

        Configuration conf = new Configuration();

        conf.set("fs.defaultFS", "hdfs://192.168.80.134:9004");

        FileSystem fs = FileSystem.get(conf);

        byte[] buff = "信2005-1 ******* rongbao HDFS课堂测试".getBytes(); // 要写入的内容

        String filename = "hdfs://192.168.80.134:9004/ZR/hdfstest2.txt"; //要写入的文件名

        FSDataOutputStream os = fs.create(new Path(filename));

        os.write(buff,0,buff.length);

        System.out.println("写入文件:"+new Path(filename).getName());

        os.close();

        fs.close();



    }


@Test
public void readFileFromHdfs() {
    try {

        Path f = new Path("/ZR/hdfstest2.txt");
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop104:9004"), new Configuration());

        FSDataInputStream dis = fs.open(f);

        InputStreamReader isr = new InputStreamReader(dis, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        String str = "";
        while ((str = br.readLine()) !=null) {
            System.out.println(str);
        }
        br.close();
        isr.close();
        dis.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


@Test
public void deleteFile() {


    FileSystem fs = null;
    try {
        fs = FileSystem.get(new URI("hdfs://hadoop104:9004"), new Configuration());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }


    try{
                fs.delete(new Path("/ZR/hdfstest1.txt"),true);
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

 

标签:文件,fs,读取,hdfs,org,hadoop,new,import
From: https://www.cnblogs.com/rongzhang/p/16810402.html

相关文章

  • 递归遍历指定目录下所有文件
    /***功能描述:递归遍历指定目录下所有文件**@paramsrcFile指定文件*@Author:XHD*@Date:2022/10/20*/publicstati......
  • python 如何修改yaml文件?
    需求:yaml文件可以作为python工程的参数配置,那么,当我们需要修改yaml文件该怎么办呢? 安装ruamel.yaml第三方库(查资料显示,用pyyaml库的时候,读取再写会,会导致格式错乱,故......
  • jmeter使用CSV文件保存参数,读取为传参(CSV数据文件设置)
    为了模拟多用户操作系统,可以把用户名、密码等需要传递的参数保存于CSV文件,自动读取即可   这里我使用来读取的是token,批量保存下拉短期不过期的token ......
  • jsp使用WebUploader做大文件的分块和断点续传
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......
  • 如何使用SVN将文件回退到某个版本
    在使用SVN对文件进行版本管理的时候,如果我们想把这个文件回退到某个历史版本该怎么做呢?下面我就简单给大家介绍一下如何通过TortoiseSVN来回退文件到某个历史版本。方法/......
  • 大文件断点续传工具类
    分享一个大文件断点续传的工具类,实测效果很好。packagecom.skyworth.file.util;importcn.hutool.core.io.FileUtil;importcom.alibaba.fastjson.JSON;importcom.a......
  • 42 C语言文件操作
    01什么是文件文件有不同的类型,在程序设计中,主要用到两种文件:(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容时程序代码......
  • 奇迹客户端服务端目录PLAYER文件怎么改​
    奇迹客户端服务端目录PLAYER文件怎么改​我是艾西,很多想开服的小伙伴对游戏技术肯定是感兴趣的,今天跟大家聊聊Player目录文件代表什么意思怎么修改:​这一期就是大家很关心的......
  • HTML快速入门和HTML标签-文件标签
    HTML快速入门快速入门:语法:1.html文档后缀名.html或者.htm2.标签分为1.围堵标签:有开始标签和结束标签。如<html> </html>2.自闭和标......
  • Linux du命令:统计目录或文件所占磁盘空间大小
    du是统计目录或文件所占磁盘空间大小的命令。需要注意的是,使用"ls-r"命令是可以看到文件的大小的。但是大家会发现,在使用"ls-r"命令査看目录大小时,目录的大小多数是4KB......