目录

  • 1.概述
  • 2.客户端核心类
  • 3.代码实现
    • 3.1.使用IDEA创建一个Maven项目
    • 3.2.配置pom.xml文件
    • 3.3.编写代码

1.概述

HDFS在生产应用中主要是Java客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(例如增删改查)HDFS上的文件。
在编写代码操作HDFS之前,个人电脑上的开发环境如下:
(1)在CentOS中安装好hadoop-3.1.4,并搭建好hadoop集群;
(2)在windows中安装好JDK1.8、Maven3.8.1以及IDEA2019;

2.客户端核心类

(1)Configuration:配置对象类,用于加载或设置参数属性。
(2)FileSystem:文件系统对象基类,针对不同文件系统有不同的具体实现。此外,该类封装了文件系统的相关操作方法。

3.代码实现

3.1.使用IDEA创建一个Maven项目

(1)点击Create New Project

(2)选择Maven,点击Next

(3)根据自己的实际情况为自己的项目取名(Name和ArtifactId一般相同),然后点击Finish。

3.2.配置pom.xml文件

根据需要向pom.xml文件中添加以下依赖和插件(在< project >标签下)

<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version></dependency>
</dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins>
</build>

若是本地Maven仓库没有这些依赖和插件,则联网后会自动下载,然后按照下图所示,刷新项目。

3.3.编写代码

创建一个名为HDFSClientTest类,然后编写代码即可。下面的代码主要从创建文件夹、上传文件以及下载文件这三个方面进行了测试。不过值得注意的是,在测试下载文件这一部分的时候,可能会出现这样的错误提示:java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset
原因:Hadoop访问windows本地文件系统,要求Windows上的本地库能正常工作,其中Hadoop使用某些Windows API来实现类似posix的文件访问权限,而这些功能需要hadoop.dll和winutils.exe来实现。
解决办法:下载Hadoop源码在windows平台编译,编译出windows本地库。然后配置Hadoop环境变量。
使用这里提供的 《hadoop-3.1.4_winutils.zip》(提取码:hadp ),配置好之后重启IDEA即可。具体配置方法如下:
将下载的压缩包解压放在一个名称为英文的目录下(例如D盘的softwares目录),然后在电脑的环境变量中做如下配置:

HADOOP_HOME=D:\softwares\hadoop-3.1.4
path=;%HADOOP_HOME%\bin

检查方法:在windows中的命令行模式下,输入命令hadoop,然后回车,如果出现以下结果,则说明配置成功。

具体代码如下:

import org.apache.hadoop.conf.Configuration;
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 java.io.IOException;public class HDFSClientTest {private static Configuration conf=null;private static FileSystem fs=null;//初始化方法,用于和HDFS集群建立连接@Beforepublic void connect2HDFS() throws IOException {//设置客户端的身份,以用于和HDFS集群建立连接System.setProperty("HADOOP_USER_NAME","root");//创建配置对象conf = new Configuration();//设置操作的文件系统时HDFS,并且指定HDFS操作地址conf.set("fs.defaultFS","hdfs://node1.itcast.cn:8020");//创建FileDSystem对象实例fs = FileSystem.get(conf);}//测试:创建文件夹@Testpublic void mkdir() throws IOException {//首先判断文件夹是否存在if(!fs.exists(new Path("/itheima"))){//创建文件夹fs.mkdirs(new Path("/itheima"));}}//测试:上传文件@Testpublic void putFile2HDFS() throws IOException {//创建本地文件路径Path src = new Path("E:\\testData\\1.txt");Path dst = new Path("/it/1.txt");//上传文件fs.copyFromLocalFile(src,dst);}//测试:下载文件@Testpublic void getFile2Local() throws IOException {//文件路径Path src = new Path("/it/1.txt");Path dst = new Path("E:\\");//下载文件fs.copyToLocalFile(src,dst);}//关闭客户端和HDFS的连接@Afterpublic void close(){//首先判断文件系统实例是否为nullif(fs!=null) {try {fs.close();} catch (IOException e) {e.printStackTrace();}}}
}

使用Java API访问HFDS相关推荐

  1. 6 HBase java API访问HBase数据库

    HBase java API访问HBase数据库 package com.hunan.hbase_options;import org.apache.hadoop.conf.Configuration ...

  2. Java API访问HDFS集群(HA)

    title: Java API访问HDFS集群(HA) date: 2021-06-23 17:06:11 tags: HDFS hadoopV2版本及以后都是HA架构,active namenode ...

  3. ElasticSearch 使用Java Api访问集群

    ElasticSearch 使用Java Api访问集群 1.创建maven工程导入pom依赖 <dependencies><dependency><groupId> ...

  4. Java API 访问HA模式下的HDFS集群

    在使用Hadoop Java API访问HDFS集群时,在创建FileSystem对象时,直接指定NameNode的IP以及端口号即可.但是在HA模式下,访问HDFS集群却有一些不同,需要指定Name ...

  5. Java API访问HA方式的HDFS

    1.介绍 对于namenode是HA高可用集群时,客户端远程访问hdfs有两种实现方法: (1)将所有关于namenode的参数写入Configuration对象中 (2)将配置文件core-site ...

  6. Java API访问ZK的权限控制

    无权限访问结点 /*** 对于ZK的授权访问* Created by liuhuichao on 2017/7/27.*/ public class AutoSample {private stati ...

  7. ews java 新建邮箱_通过EWS JAVA API订阅邮箱更新

    0. EWS JAVA API是什么? 用来访问 Exchange Web 服务的 Java 客户端,说白了就是一套访问Exchange邮件服务的Java API库,利用它我们可以编写Java代码来动 ...

  8. Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖

    之前已经介绍过了libvirt api的上手使用方式: <Windows下Libvirt Java API使用教程(二)- 接口使用说明> <Windows下Libvirt Java ...

  9. java 令牌访问_Microsoft Graph API访问令牌验证失败(java)

    我正在尝试设置一个原生Java应用程序,它将在使用ADAL4j进行身份验证后,利用MS Graph的API访问用户OneDrive.我正在使用this库来获取我的访问令牌.到目前为止,我有这样的代码: ...

最新文章

  1. java servlet 请求_Java中前台JSP请求Servlet实例(http+Servlet)
  2. memcached监控的几种方法(nagios等)
  3. 四十七、SQL 语法总结
  4. 最近总结——关于自己的基础问题
  5. Go 模块--开始使用 Go Modules
  6. Java虚拟机(十三)——垃圾回收概述
  7. 【蓝桥杯单片机】实战训练:基于15单片机的距离测试及电压数据采集响应系统(超声波测距、上位机、DAC输出)
  8. Android程序员视角的Apple发布会
  9. Ubuntu12.04中eclipse提示框黑色背景色修改
  10. android vitamio 教程,使用vitamio开发步骤
  11. 如何将PDF转换为DOCX?
  12. LeetCode 翻转字符串里的单词
  13. js前端之浅拷贝与深拷贝
  14. 软考下午c语言真题,软考程序员下午试题分析和备考建议
  15. android框架揭秘!Android开发者跳槽指南一线互联网公司面经总结
  16. python新浪api_python编程之API入门: (二)python3中使用新浪微博API
  17. (Macbook Air)BCM4360网卡Linux(Ubuntu/Fedora)驱动安装总结
  18. X5之position_estimator_inav_main.c
  19. 神舟IV号开发板-带屏例程源码修改bug(2.8寸屏)
  20. JavaScript实现富文本编辑器

热门文章

  1. linux vi只读文件,linux下vi编辑只读文档无法保存的解决方法
  2. 智能合约逆向心法2(案例篇)——34C3_CTF题目分析续篇
  3. express实现图片上传
  4. 计算机网络-自顶向下方法 第三章课后习题答案(第七版)
  5. 编程语言php加密与解密的方法
  6. 从MPU6050了解姿态解算
  7. 【论文笔记】Predictive control of aerial swarms in cluttered environments
  8. 论文发表费用怎样更省钱
  9. 【小学】小学汉语拼音知识复习汇总
  10. java int格式转换文本_java 文件导出Excel 文本形式转数字格式解决,字段是int导出需求是数字解决方案...