1、背景

在上一节中,我们简单学习了在命令行上如何操作hdfs shell api,此处我们通过java程序来操作一下。

2、环境准备

  1. 需要在本地环境变量中 配置 HADOOP_HOME 或在程序启动的时候通过命令行指定hadoop.home.dir的值,值为HADOOP的home目录地址。可通过org.apache.hadoop.util.Shell#checkHadoopHome方法验证。
  2. 我们的HADOOP最好是自己在本地系统进行重新编译,不然可能运行部分java api会出现问题。

3、环境搭建

3.1 引入jar包

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.7.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>

3.2 引入log4j.properties配置文件

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%-5p] %d{ HH:mm:ss,SSS} [%t]:%m%n log4j.rootLogger = debug,console

引入这个配置是为了,当hadoop报错时,更好的排查问题

3.3 初始化Hadoop Api

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class HdfsApiTest { private FileSystem fileSystem; private static final Logger log = LoggerFactory.getLogger(HdfsApiTest.class); @BeforeAll
public void setUp() throws IOException, InterruptedException {
// 1、将 HADOOP_HOME 设置到环境变量中 Configuration configuration = new Configuration();
// 2、此处的地址是 NameNode 的地址
URI uri = URI.create("hdfs://192.168.121.140:8020");
// 3、设置用户
String user = "hadoopdeploy"; // 此处如果不设置第三个参数,指的是客户端的身份,默认获取的是当前用户,不过当前用户不一定有权限,需要指定一个有权限的用户
fileSystem = FileSystem.get(uri, configuration, user);
} @AfterAll
public void tearDown() throws IOException {
if (null != fileSystem) {
fileSystem.close();
}
}
}

此处我们需要注意的是,需要设置客户端操作的 用户,默认情况下获取的是当前登录用户,否则很有可能会出现如下错误



解决办法:

1、修改目录的访问权限。

2、修改客户端的用户,比如此处修改成hadoopdeploy

4、java api操作

4.1 创建目录

@Test
@DisplayName("创建hdfs目录")
public void testMkdir() throws IOException {
Path path = new Path("/bigdata/hadoop/hdfs");
if (fileSystem.exists(path)) {
log.info("目录 /bigdata/hadoop/hdfs 已经存在,不在创建");
return;
}
boolean success = fileSystem.mkdirs(path);
log.info("创建目录 /bigdata/hadoop/hdfs 成功:[{}?]", success);
}

4.2 上传文件

@Test
@DisplayName("上传文件")
void uploadFile() throws IOException {
/**
* delSrc: 文件上传后,是否删除源文件 true:删除 false:不删除
* overwrite: 如果目标文件存在是否重写 true:重写 false:不重写
* 第三个参数:需要上传的文件
* 第四个参数:目标文件
*/
fileSystem.copyFromLocalFile(false, true,
new Path("/Users/huan/code/IdeaProjects/me/spring-cloud-parent/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java"),
new Path("/bigdata/hadoop/hdfs"));
}

4.3 列出目录下有哪些文件

@Test
@DisplayName("列出目录下有哪些文件")
void testListFile() throws IOException {
RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path("/bigdata"), true);
while (iterator.hasNext()) {
LocatedFileStatus locatedFileStatus = iterator.next();
Path path = locatedFileStatus.getPath();
if (locatedFileStatus.isFile()) {
log.info("获取到文件: {}", path.getName());
}
}
}

4.4 下载文件

@Test
@DisplayName("下载文件")
void testDownloadFile() throws IOException {
fileSystem.copyToLocalFile(false, new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java"),
new Path("/Users/huan/HdfsApiTest.java"), true);
}

4.5 删除文件

@Test
@DisplayName("删除文件")
public void testDeleteFile() throws IOException {
fileSystem.delete(new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java"), false);
}

4.6 检测文件是否存在

@Test
@DisplayName("检查文件是否存在")
public void testFileExists() throws IOException {
Path path = new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java");
boolean exists = fileSystem.exists(path);
log.info("/bigdata/hadoop/hdfs/HdfsApiTest.java 存在:[{}]", exists);
}

5、完整代码

https://gitee.com/huan1993/spring-cloud-parent/blob/master/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java

mac系统上hdfs java api的简单使用的更多相关文章

  1. 在mac电脑上创建java的一些简单操作

    首先你要在电脑上下载一个JDK创造出一个java环境 如下第二个: 然后步奏如下: step1:苹果->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop ...

  2. Java Web项目在Mac系统上启动时提示nodename nor servname provided的解决办法

    今天在Mac系统上启动Java Web项目的时候,提示了Java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local nodename n ...

  3. hadoop集群配置和在windows系统上运用java操作hdfs

    安装 配置 概念 hadoop常用shell命令 使用java操作hadoop 本文介绍hadoop集群配置和在windows系统上运用java操作hdfs 安装 http://mirror.bit. ...

  4. HDFS Java API 常用操作

    package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; impo ...

  5. 在MAC系统上进行屏幕录制

    最近打算将一些软件操作过程进行屏幕录制进行视频分享,所以寻思着找一块能在MAC上使用的屏幕录制软件.google了一番,没想到MAC系统自带的QuickTime Player已经内置屏幕录像功能,而且 ...

  6. 关于如何在mac系统上安装Git并在码市上建立项目

    对Git一窍不通,为了在mac系统上安装Git,查了很多资料,走了很多弯路,一切搞定后发现其实很简单. 1.在https://brew.sh上按要求安装Homebrew. 2.在电脑终端键入brew ...

  7. HDFS shell操作及HDFS Java API编程

    HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...

  8. hadoop hdfs java api操作

    package com.duking.util; import java.io.IOException; import java.util.Date; import org.apache.hadoop ...

  9. HDFS Java API 的基本使用

    一. 简介 二.API的使用         2.1 FileSystem         2.2 创建目录         2.3 创建指定权限的目录         2.4 创建文件,并写入内容 ...

  10. Hadoop 学习之路(七)—— HDFS Java API

    一. 简介 想要使用HDFS API,需要导入依赖hadoop-client.如果是CDH版本的Hadoop,还需要额外指明其仓库地址: <?xml version="1.0" ...

随机推荐

  1. 想做长期的 AB 实验?快来看看这些坑你踩了没

    作者:江颢 1.什么是长期的 AB 实验 大部分情况下,我们做的 AB 实验都是短期的,一到两周或者一个月之内的,通过分析这段时期内测得的实验效应得出实验结论,并最终进行推广. 长期实验即运行时间达数 ...

  2. Mac系统下word论文参考文献更新域

    写论文的时候可能会遇到后续要增加文献的情况 在参考文献增加后会发现文章中的交叉引用的序号并没有更新 下面分享两种情况的处理方法 一.更新全部域 首先确认自己的打印️项是选中的 2.  打开word偏好 ...

  3. redis(二)

    Redis简单使用 一. Redis的安装 Redis作为一款目前这个星球上性能最高的非关系型数据库之一. 拥有每秒近十万次的读写能力. 其实力只能用恐怖来形容. mac版本, brew: https ...

  4. Spring之Bean注入Spring容器中的方式

    向spring容器中加入bean有以下方式: 通过<Bean>标签 @Configuration + @Bean @Component + 组件扫描 @Import导入[见 Spring注 ...

  5. 有备无患!DBS高性价比方案助力富途证券备份上云

    "某中心受病毒攻击,导致服务中断,线上业务被迫暂停" "某公司员工误操作删库,核心业务数据部分丢失,无法完全找回" "由于服务器断线,某医院信息系统瘫 ...

  6. 读python代码-学到的python函数-2

    1.zip函数 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * ...

  7. nacos注册中心单节点ap架构源码解析

    一.注册流程 单nacos节点流程图如下: 流程图可以知,Nacos注册流程包括客户端的服务注册.服务实例列表拉取.定时心跳任务:以及服务端的定时检查服务实例任务.服务实例更新推送5个功能. 服务注册 ...

  8. [seaborn] seaborn学习笔记3-直方图Histogramplot

    文章目录 3 直方图Histogramplot 1. 基本直方图的绘制 Basic histogram 2. 数据分布与密度信息显示 Control rug and density on seabor ...

  9. Flink mini-batch "引发" 的乱序问题

    问题描述 近期业务反馈, 开启了 mini-batch 之后, 出现了数据不准的情况, 关掉了 mini-batch 之后, 就正常了, 因此业务方怀疑,是不是 Flink 的 mini-batch ...

  10. [C#]C++/CLI中^的含义

    例子 // here normal pointer P* ptr = new P; // usual pointer allocated on heap P& nat = *ptr; // o ...