hdfs的javaAPI使用
时间:2019-04-18
本文章向大家介绍hdfs的javaAPI使用,主要包括hdfs的javaAPI使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考博客:https://www.cnblogs.com/Eddyer/p/6641778.html
1.需求
使用hdfs的javaAPI访问hdfs系统。
2.环境配置
(1)hadoop为本地模式
(2)pom文件代码如下
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
3.使用hdfs的javaAPI操作hdfs的代码
(1)初始化环境
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class hadoopJavaApiDemo {
FileSystem fs = null;
@Before
public void init() throws IOException, URISyntaxException, InterruptedException {
Configuration configuration = new Configuration();
//设置文件系统为hdfs
//获取文件系统的客户端实例对象
//注意:运行程序是要执行用户名为hadoop,否则会出现没写权限的情况
fs = FileSystem.get(new URI("hdfs://127.0.0.1:9900"),configuration,"hadoop");
}
//...
}
(2)上传文件
@Test
public void testUpload() throws IOException {
fs.copyFromLocalFile(new Path("file://[本地文件的路径,例如/a/b.txt]"),new Path("[hdfs文件系统的路径,例如/]"));
fs.close();
}
(3)下载文件
@Test
public void testDownLoad() throws IOException {
fs.copyToLocalFile(new Path("[hdfs上的文件路径,例如/testData]"),new Path("[本地文件路径,例如/home/a.txt]"));
fs.close();
}
(4)创建文件夹
@Test //创建新的文件夹 public void testMakeDir() throws Exception { boolean mkdirs = fs.mkdirs(new Path("/x/y/z")); System.out.println(mkdirs); }
(5)删除文件夹
@Test
public void testDelete() throws Exception{
//第二个参数为true是递归删除
boolean delete = fs.delete(new Path("/x"), true);
System.out.println(delete);
}
4.注意事项
(1)hdfs各种端口的含义(就因为将127.0.0.1:9900写为127.0.0.1:50070,debug了好久。。)
9900是fileSystem的端口号(默认是9000,这里我自定义为9900)
50070是namenode主节点的端口号
50090是namenode的secondarynamenode的端口号
(2)file://是一个传输协议
比如可以通过在浏览器中输入路径file:///a/b/c.txt访问本地文件
5.github链接
https://github.com/gulu2016/STBigData
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用IDEA创建SpringMvc并整合Thymeleaf(Java配置版)
- Junit报错:Argument(s) are different! Wanted:
- RocketMQ使用过滤器filterServer(4.3版本后)
- Python+Appium运行简单的demo,你需要理解Appium运行原理!
- 网站日志分析完整实践【技术创造101训练营】
- HTML前端知识
- 掌握 AST,轻松落地关键业务「技术创作101训练营」
- 一文轻松学会linux字符设备驱动
- leetcode树之N叉树的前序遍历
- 2020-09-20:如何判断一个数是质数?
- 金九银十Android面试复习题集:关于四大组件中的Activity你了解多少?
- HaseMap的循环姿势你真的懂了吗?
- 历经14天自定义3个注解解决项目的3个Swagger难题
- VUE开发–获取DOM对象和组件对象(十九)
- RASP攻防 —— RASP安全应用与局限性浅析