[HDFS_4] HDFS 的 Java 应用开发
0. 说明
在 IDEA下 进行 HDFS 的 Java 应用开发
通过编写代码实现对 HDFS 的增删改查操作
1. 流程
1.1 在项目下新建 Moudle
略
1.2 为 Moudle 添加 Maven 框架支持
略
1.3 添加 Maven 依赖
<dependencies>
<!-- Hadoop Client依赖 -->
<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.12</version>
</dependency> </dependencies>
1.4 将 Hadoop/etc/ha 目录下的 [core-site.xml] [hdfs-site.xml] [log4j.properties] 存入 resources 中
2. 代码编写
package hadoop.hdfs; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; /**
* IDEA 下测试 HDFS 的增删改查
*/
public class TestHDFS { // 1. 测试读取
@Test
public void testRead() throws IOException { // 初始化配置文件
Configuration conf = new Configuration(); // 初始化文件系统
FileSystem fs = FileSystem.get(conf); // 初始化路径
Path p = new Path("/a.txt"); // 通过文件系统获取输入流
// FSDataInputStream 是 inputStream 的装饰流,可以通过普通流方式操纵 fis
FSDataInputStream fis = fs.open(p); int len = 0;
byte[] buf = new byte[1024]; while ((len = fis.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
fis.close();
} // 2. 测试读取并通过 IOUtils 拷贝文件到本地
@Test
public void testRead2() throws Exception { // 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); // 初始化路径
Path p = new Path("/a.txt"); // 通过文件系统获取输入流
// FSDataInputStream 是 inputStream 的装饰流,可以通过普通流方式操纵 fis
FSDataInputStream fis = fs.open(p); FileOutputStream fos = new FileOutputStream("D:/1.txt"); // 通过 IOUtils 拷贝文件
IOUtils.copyBytes(fis, fos, 1024); fis.close();
fos.close();
System.out.println("ok"); } // 3. 测试写文件,将本地文件写入到 HDFS 中
@Test
public void testwrite() throws IOException { // 设置系统用户名
System.setProperty("HADOOP_USER_NAME", "centos"); // 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); // 获得输入流
FileInputStream fis = new FileInputStream("E:/p_data/test/customers.txt"); // 初始化路径
Path pout = new Path("/b.txt"); // 通过文件系统获取输出流
// FSDataOutputStream 是 outputStream 的装饰流,可以通过普通流方式操纵 fos
FSDataOutputStream fos = fs.create(pout); // 通过 IOUtils 拷贝文件
IOUtils.copyBytes(fis, fos, 1024); fis.close();
fos.close();
System.out.println("ok"); } // 创建文件夹
@Test
public void testMkdir() throws IOException { // 设置系统用户名
System.setProperty("HADOOP_USER_NAME", "centos"); // 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); boolean b = fs.mkdirs(new Path("/aaa")); System.out.println(b); } // 删除文件夹
@Test
public void testDelete() throws IOException { // 设置系统用户名
System.setProperty("HADOOP_USER_NAME", "centos"); // 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); boolean b = fs.delete(new Path("/aaa"),true); System.out.println(b);
} // 文件末尾追加文件
@Test
public void testAppend() throws IOException { // 设置系统用户名
System.setProperty("HADOOP_USER_NAME", "centos"); // 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); // 通过文件系统获取输出流
// FSDataOutputStream 是 outputStream 的装饰流,可以通过普通流方式操纵 fos
FSDataOutputStream fos = fs.append(new Path("/a.txt")); // 通过文件系统获取输入流
// FSDataInputStream 是 inputStream 的装饰流,可以通过普通流方式操纵 fis
FileInputStream fis = new FileInputStream("E:/p_data/add.txt"); // 通过 IOUtils 拷贝文件
IOUtils.copyBytes(fis,fos,1024); fis.close();
fos.close();
} // 通过递归列出指定文件夹下的文件或文件夹信息
public static void testList(String path) {
try {
// 初始化配置文件
Configuration conf = new Configuration();
// 初始化文件系统
FileSystem fs = FileSystem.get(conf); FileStatus[] statuses = fs.listStatus(new Path(path)); for (FileStatus status : statuses) {
if (status.isDirectory()) {
path = status.getPath().toString();
System.out.println(path);
testList(path);
} else {
System.out.println(status.getPath().toString());
}
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
testList("/");
} }
[HDFS_4] HDFS 的 Java 应用开发的更多相关文章
- 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结
HDFS的JAVA客户端编写 现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...
- HDFS的Java客户端编写
总结: 之前在教材上看hdfs的Java客户端编写,只有关键代码,呵呵…….闲话不说,上正文. 1. Hadoop 的Java客户端编写建议在linux系统上开发 2. 可以使用eclipse,ide ...
- spark之java程序开发
spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...
- 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)
一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- day03-hdfs的客户端操作\hdfs的java客户端编程
5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...
- hadoop学习(五)----HDFS的java操作
前面我们基本学习了HDFS的原理,hadoop环境的搭建,下面开始正式的实践,语言以java为主.这一节来看一下HDFS的java操作. 1 环境准备 上一篇说了windows下搭建hadoop环境, ...
- Hadoop(五):HDFS的JAVA API基本操作
HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...
- 5款强大的Java Web开发工具
1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...
随机推荐
- Rsync文件同步工具
前段时间因公司需求,需要把备份的文件进行同步保存,后面就想到了我们大家都最熟悉的文件同步工作Rsync,于是就捣鼓了一下午时间,然后总结了下大概过程和参数详情. 首先了解了下rsync同步的大致原理: ...
- mysql 开发进阶篇系列 28 数据库二进制包安装(centos系统准备)
1. centos 7安装工作 对于mysql二进制安装,我这里在使用一台新的centos系统.准备好VMware,Xftp-6.0, Xshell-6.0.在VMware中网络使用桥接模式,分配20 ...
- JodaTimeUtil日期处理工具类(简单、实用)
一.maven依赖 <!--joda time--> <dependency> <groupId>joda-time</groupId> <art ...
- centos7 常用工具包安装
.虚拟机上传下载组件( 支持从windows直接拖拽文件,相当好用) yum -y install lrzsz rz+文件名(上传) sz+文件名(下载) .gcc (nginx之类由c语言开发的,编 ...
- Rails/ActiveRecord order by Array
ActiveRecord中如果想根据自定义的一个数组id集合排序: ids = [2,1,3] users = User.where("id in (?)",ids) result ...
- Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导
Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导 在上 ...
- checkbox在vue中的用法总结
前言 关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样, 之前对于 ...
- Form的enctype属性
Form的enctype属性 一般都使用html的Form表单通过HTTP POST方法发送Request body.下面是一个form: <form action="/process ...
- 牛刀小试MySQL--日志文件
牛刀小试MySQL--日志文件 MySQL Server的日志文件一共有五种类型的日志.(Innodb redo log除外,它属于Innodb存储引擎实现的日不在此篇讨论) The Error Lo ...
- java.. C# 使用AES加密互解 采用AES-128-ECB加密模式
java需要下载外部包, commons codec.jar 1.6 較新的JAVA版本把Base64的方法改成靜態方法,可能會寫成Base64.encodeToString(encrypted, ...