Java API操作HDFS文件,利用Junit单元测试

2023-11-08

操作HDFS文件,约有以下两种方法
(1)shell,这个相信大家基本都会;
(2)Java API 的操作
这次主要记录下Java API操作HDFS文件的相关测试

环境:IDEA+JDK10.0.1,虚拟机centos
版本:hadoop2.6.0-cdh5.7.0, junit 4.11,maven3.0

事先要在pom.xml中添加相关依赖,并指定一个仓库

测试代码如下:

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

import java.net.URI;

/**
* Hadoop HDFS 的Java API 操作
* */
public class HDFSApp {
    //操作HDFS文件系统,注意选择hadoop相关的
    FileSystem fileSystem =null;
    //配置类
    Configuration configuration=null;
    //定义路径
    public  static final String HDFS_PASH="hdfs://192.168.199.128:8020";

    //**创建HDFS目录
    @Test //单元测试
    public void mkdir()throws Exception{
        fileSystem.mkdirs(new Path("/hafsapi/test"));
    }
    //**创建文件
    @Test
    public void creat()throws Exception{
        FSDataOutputStream out = fileSystem.create(new Path("/hafsapi/test/a.txt"));
        out.write("hello hadoop".getBytes());
        out.flush();
        //关闭流
        out.close();
    }
    //**查看HDFS文件的内容
    @Test
    public void cat()throws Exception{
        FSDataInputStream in = fileSystem.open(new Path("/hafsapi/test/a.txt"));
        IOUtils.copyBytes(in,System.out,1024);
        //关闭流
        in.close();
    }
    //**文件重命名
    @Test
    public void rename()throws Exception{
        Path oldPath =new Path("/hafsapi/test/a.txt");
        Path newPath =new Path("/hafsapi/test/abc.txt");
        fileSystem.rename(oldPath,newPath);
    }
    //**从本地(指的是win下安装盘,而非虚拟机)拷贝文件到HDFS上面,上传文件
    @Test
    public void copyFromLocalFile()throws Exception{
        Path localPath = new Path("/JavaWork/data/h.txt");
        Path hdfsPath = new Path("/h.txt");
        fileSystem.copyFromLocalFile(localPath,hdfsPath);
    }
    //**下载HDFS文件到本地
    @Test
    public void copyToLocalFile()throws Exception{
        Path localPath = new Path("/JavaWork/data/h.txt");
        Path hdfsPath = new Path("/hi.txt");
        fileSystem.copyToLocalFile(false,hdfsPath, localPath,true);
    }
    //**查看某个目录下的所有文件
    @Test
    public void listFiles()throws Exception{
        FileStatus[] fileStatuses=fileSystem.listStatus(new Path("/"));
        for(FileStatus fileStatus:fileStatuses){
            //判断是文件夹还是文件
            String isDr=fileStatus.isDirectory()?"文件夹":"文件";
            //有几个副本,即副本系数
           short replication= fileStatus.getReplication();
           //文件大小
            long fileLen=fileStatus.getLen();
            //打印出路径
            String path=fileStatus.getPath().toString();
            System.out.println(isDr+"\t"+replication+"\t"+fileLen+"\t"+path);
        }
    }
    //删除某个文件
    @Test
    public void dele()throws Exception{
        fileSystem.delete(new Path("/h,txt"));
    }

    //准备环境
    @Before //在单元测试之前执行
    public void setUp()throws Exception{
        System.out.println("HDFSApp setUp");
        configuration=new Configuration();
        fileSystem = FileSystem.get(new URI(HDFS_PASH),configuration, "hadoop");

    }

    //释放资源
    @After //在单元测试之后执行
    public void tearDown()throws Exception{
        configuration=null;
        fileSystem =null;
        System.out.println("HDFSApp tearDown");
    }
}

注意:
在查看某个路径下的所有文件时,
如果是通过hadoop shell的方式put上去的,采用配置的xml文件中的副本系数1;如果是通过Java API 上传上去,因为在本地没有手工设置副本系数,所有采用的时hadoop副本系数3。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java API操作HDFS文件,利用Junit单元测试 的相关文章

  • 公平调度器和容量调度器有什么区别?

    我是 Hadoop 世界的新手 想了解公平调度程序和容量调度程序之间的区别 另外我们什么时候应该使用每一个 请简单地回答一下 因为我在网上读了很多东西 但从中得到的不多 公平调度是一种为作业分配资源的方法 使得所有作业随着时间的推移平均获得
  • 适用于 Python 3.x 的 Hive 客户端

    是否可以使用 Python 3 x 连接到 hadoop 并运行 hive 查询 我正在使用Python 3 4 1 我发现可以按照这里写的方式完成 https cwiki apache org confluence display Hiv
  • 使用 org.apache.hadoop/* 依赖项离线编译 sbt 时遇到的问题

    使用依赖于 org apache hadoop 包的 sbt 进行离线编译时遇到很多麻烦 一个简单的build sbt name Test version 1 0 scalaVersion 2 10 4 libraryDependencie
  • 覆盖hadoop中的log4j.properties

    如何覆盖hadoop中的默认log4j properties 如果我设置 hadoop root logger WARN console 它不会在控制台上打印日志 而我想要的是它不应该在日志文件中打印 INFO 我在 jar 中添加了一个
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 使用 Java API 在 Hadoop 中移动文件?

    我想使用 Java API 在 HDFS 中移动文件 我想不出办法做到这一点 FileSystem 类似乎只想允许在本地文件系统之间移动 但我想将它们保留在 HDFS 中并将它们移动到那里 我错过了一些基本的东西吗 我能想到的唯一方法是从输
  • 以不同用户身份运行 MapReduce 作业

    我有一个与 Hadoop 交互的 Web 应用程序 Cloudera cdh3u6 特定的用户操作应在集群中启动新的 MapReduce 作业 该集群不是一个安全集群 但它使用简单的组身份验证 因此 如果我以自己的身份通过 ssh 连接到它
  • Flink从hdfs读取数据

    我是 Flink 的新生 我想知道如何从 hdfs 读取数据 有人可以给我一些建议或一些简单的例子吗 谢谢你们 如果您的文件采用文本文件格式 则可以使用 ExecutionEnvironment 对象中的 readTextFile 方法 这
  • Hive 聚集在多个列上

    据我所知 当配置单元表聚集在一列上时 它会执行该分桶列的哈希函数 然后将该行数据放入其中一个桶中 每个桶都有一个文件 即如果有 32 个桶 那么 hdfs 中就有 32 个文件 将 clustered by 放在多个列上意味着什么 例如 假
  • Protobuf RPC 在 Hadoop 2.2.0 单节点服务器上不可用?

    我正在尝试在按照本教程安装的本地单节点集群上运行 hadoop 2 2 0 mapreduce 作业 http codesfusion blogspot co at 2013 10 setup hadoop 2x 220 on ubuntu
  • AWS EMR 引导操作为 sudo

    我需要更新 etc hosts适用于我的 EMR 集群 EMR AMI 4 3 中的所有实例 整个脚本无非就是 bin bash echo e ip1 uri1 gt gt etc hosts echo e ip2 uri2 gt gt e
  • 没有函数映射到名称“coord:formatTime”

    我正在尝试使用 oozie 中的以下内容获取当前时间戳
  • 如何修复“任务尝试_201104251139_0295_r_000006_0 未能报告状态 600 秒”。

    我编写了一个 MapReduce 作业来从数据集中提取一些信息 该数据集是用户对电影的评分 用户数量约25万 电影数量约30万 地图的输出是
  • MapReduce 中 1 个任务的减速器数量

    在典型的 MapReduce 设置 如 Hadoop 中 1 个任务使用多少个减速器 例如计算单词数 我对 Google MapReduce 的理解意味着只涉及 1 个减速器 那是对的吗 例如 单词计数会将输入分为 N 个块 并且 N 个
  • Hadoop 减速器数量配置选项优先级

    以下3个设置reduce数量的选项的优先级是什么 换句话说 如果三者都设置了 会考虑哪一个呢 Option1 setNumReduceTasks 2 within the application code Option2 D mapredu
  • 谷歌的Dremel是什么?它与 MapReduce 有什么不同?

    谷歌的 Dremel 是此处描述 http research google com pubs pub36632 html Dremel 和 Mapreduce 有什么区别 Dremel http research google com pu
  • “客户端”对于 Hadoop/HDFS 究竟意味着什么?

    我理解其背后的一般概念 但我希望对 客户 是什么有更多的澄清和明确的定义 例如 如果我只是在终端上写一个 hdfs 命令 它仍然是 客户端 吗 ClientHadoop中是指用于与Hadoop文件系统通信的接口 Hadoop 可使用不同类型
  • 找不到 hadoop 安装:必须设置 $HADOOP_HOME 或 hadoop 必须位于路径中

    所以有一点背景 我一直在尝试在 CentOS 6 机器上设置 Hive 我按照 YouTube 视频的说明进行操作 http www youtube com watch v L2lSrHsRpOI http www youtube com
  • 主节点的“start-all.sh”和“start-dfs.sh”没有启动从节点服务?

    我已使用从属节点的主机名更新了 Hadoop 主节点上的 conf slaves 文件 但我无法从主节点启动从属节点 我必须单独启动从属服务器 然后我的 5 节点集群才能启动并运行 如何使用主节点的单个命令启动整个集群 此外 Seconda
  • Hive 错误:parseException 缺少 EOF

    我不确定我在这里做错了什么 hive gt CREATE TABLE default testtbl int1 INT string1 STRING stored as orc tblproperties orc compress NONE

随机推荐

  • O(nlogn)在数组S中找存在相加可得到x的算法

    题目 设计一个运行时间为O nlogn 算法 给定n个整数的集合S和另一个整数x 该算法能确定S中是否存在两个和相加刚好为x 的元素 思想 O nlogn O n O nlogn O nlogn 就是快排的时间复杂度 O n 就是查找的时间
  • 因果推断学习笔记(一)

    在日常生活中 我们常常会用到因果推断 比如 你淋雨了 赶紧去洗澡 不然容易着凉 感冒 这里我们认为淋雨是感冒的因 通过原因 来推断可能得结果 我拉肚子了 可能是昨天海鲜吃多了 这里我们认为海鲜吃多了是拉肚子的因 并且通过拉肚子反推可能得原因
  • N皇后问题

    久闻N皇后问题在算法界的赫赫大名 今天晚上有空我也来试一下 ps 至于我的作业 哈哈哈 请读者自行领悟 一 问题描述 在n n格的棋盘上放置彼此不受攻击的n个皇后 按照国际象棋的规则 皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子 n
  • 工作组 文件服务器,工作组文件服务器

    工作组文件服务器 内容精选 换一换 媒体处理包括媒体素材的上传 下载 编目 节目转码和数据归档等工作 涉及音视频数据的存储 调用和管理 根据其业务特性对共享的文件系统有如下要求 媒体素材的视频码率高 文件规模大 要求文件系统容量大且易于扩展
  • 琢磨下python装饰器的例子

    首先得强调 python中的引用是无处不在的 建议先看引文再回来琢磨例子 简单概括装饰器 对象 装饰器名字 A 任意函数名字 B 装饰语句 A B 若执行函数B B 则可理解为 带有 A的语句可将函数B 被装饰函数 作为参数传入A 装饰器
  • 【转】英文论文审稿意见汇总

    转自 海岩秋沙 的QQ空间 以下是从一个朋友转载来的 关于英文投稿过程中编辑给出的意见 与大家一起分享 以下12点无轻重主次之分 每一点内容由总结性标题和代表性审稿人意见构成 1 目标和结果不清晰 It is noted that your
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为

    相信很多人都买过家用监控摄像头 有的是为了及时查看家里的老人孩子的动态 有的是为了看家里宠物 遇到小偷时还能拍下面貌 但市场上五花八门的监控摄像头 各种功能让人看花了眼 于是呢 为了让大家更了解智能摄像头 今天我们来测下市面上比较靠前小米
  • games103——作业2

    实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github 文章目录 基于物理的方法 弹簧系统 单个弹簧 多个弹簧 弹簧网络 结构化弹簧网络 Structured Spring Networks 非结构化弹簧网络 Uns
  • lua中的math类库

    Lua5 1中数学库的所有函数如下表 math pi 为圆周率常量 3 14159265358979323846 abs 取绝对值 math abs 15 15 acos 反余弦函数 math acos 0 5 1 04719755 asi
  • 编程语言发展简史

    编程语言发展简史 一 编程的起源 二 第一代计算机语言 机器语言 三 第二代计算机语言 汇编语言 四 第三代计算机语言 高级语言 2022年4月 TIOBE编程排行榜 https www tiobe com tiobe index 高级语言
  • 16进制换成10进制 c语言 单片机,单片机入门之三种进制的转换

    单片机使用的两大进制表示形式 十进制和十六进制 这里使用十进制的数据 这里使用十六进制的数据 十进制一般用于运算 表示形式就是直接写 例如上面的1701 十六进制一般用于配置单片机的寄存器 表示形式是在数字前面加0x 例如上面的0xC0 0
  • 自定义信号槽机制

    自定义信号槽机制 自定义信号 自定义槽 自定义信号和槽函数的使用 解决办法 如果想要在QT类中自定义信号槽 需要满足一些条件 并且有些事项也需要注意 要编写新的类并且让其继承Qt的某些标准类 这个新的子类必须从QObject类或者是QObj
  • demo演示是什么意思_十分钟学会制作动态Demo

    一 设计师为什么要会做动态Demo 1 提高沟通协作效率 日常工作中 如果只是用文字和图片来表达Demo的动态逻辑 简单一些的效果 比较容易表达 但一些相对较为复杂的效果 就比较困难了 如下图 是在某项目中的模块动态交互说明 不知道这样表达
  • 异常检测(二)——IsolationForest

    1 简介 孤立森林 Isolation Forest 是另外一种高效的异常检测算法 它和随机森林类似 但每次选择划分属性和划分点 值 时都是随机的 而不是根据信息增益或者基尼指数来选择 在建树过程中 如果一些样本很快就到达了叶子节点 即叶子
  • Google Chrome “网站连接不安全”NET::ERR_CERT_AUTHORITY_INVALID

    Chrome 浏览器打开任何网站显示 网站连接不安全 报错 NET ERR CERT AUTHORITY INVALID 具体操作方法如下 1 运行输入cmd 右击以管理员身份运行命令提示符 2 输入 netsh winsock reset
  • Android Studio远程连接模拟器调试

    目录 需求 ADB端口说明 远程连接步骤 启动模拟器 ADB连接 端口映射 远程连接 需求 Android Studio 高版本已经可以使用 Pair Devices Using Wi fi 功能连接同一局域网下的真机设备了 低版本也可以使
  • 时序预测

    时序预测 MATLAB实现GWO LSTM灰狼算法优化长短期记忆神经网络时间序列预测 目录 时序预测 MATLAB实现GWO LSTM灰狼算法优化长短期记忆神经网络时间序列预测 预测效果 基本介绍 模型描述 程序设计 参考资料 预测效果 基
  • 从0搭建Vue3组件库(五): 如何使用Vite打包组件库

    本篇文章将介绍如何使用 vite 打包我们的组件库 同时告诉大家如何使用插件让打包后的文件自动生成声明文件 d ts 打包配置 vite 专门提供了库模式的打包方式 配置其实非常简单 首先全局安装 vite 以及 vitejs plugin
  • Java API操作HDFS文件,利用Junit单元测试

    操作HDFS文件 约有以下两种方法 1 shell 这个相信大家基本都会 2 Java API 的操作 这次主要记录下Java API操作HDFS文件的相关测试 环境 IDEA JDK10 0 1 虚拟机centos 版本 hadoop2