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 应用开发的更多相关文章

  1. 2 weekend110的HDFS的JAVA客户端编写 + filesystem设计思想总结

    HDFS的JAVA客户端编写  现在,我们来玩玩,在linux系统里,玩eclipse 或者, 即,更改图标,成功 这个,别慌.重新换个版本就好,有错误出错是好事. http://www.eclips ...

  2. HDFS的Java客户端编写

    总结: 之前在教材上看hdfs的Java客户端编写,只有关键代码,呵呵…….闲话不说,上正文. 1. Hadoop 的Java客户端编写建议在linux系统上开发 2. 可以使用eclipse,ide ...

  3. spark之java程序开发

    spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...

  4. 一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse)

    一次失败的尝试hdfs的java客户端编写(在linux下使用eclipse) 给centOS安装图形界面 GNOME桌面环境 https://blog.csdn.net/wh211212/artic ...

  5. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  6. day03-hdfs的客户端操作\hdfs的java客户端编程

    5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...

  7. hadoop学习(五)----HDFS的java操作

    前面我们基本学习了HDFS的原理,hadoop环境的搭建,下面开始正式的实践,语言以java为主.这一节来看一下HDFS的java操作. 1 环境准备 上一篇说了windows下搭建hadoop环境, ...

  8. Hadoop(五):HDFS的JAVA API基本操作

    HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...

  9. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

随机推荐

  1. 《java并发编程实战》

    目录 对本书的赞誉 译者序 前 言 第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更 ...

  2. 泛型理解及应用(二):使用泛型编写通用型Dao层

    相信目前所有的IT公司网站在设计WEB项目的时候都含有持久层,同样地使用过Hibernate的程序员都应该看过或者了解过Hibernate根据数据库反向生成持久层代码的模板.对于Hibernate生成 ...

  3. C语言第八讲,指针*

    C语言第八讲,指针* 一丶简单理解指针 说到指针,很多人都说是C语言的重点. 也说是C语言的难点. 其实指针并不是难.而是很多人搞不清地址 和 值.以及指针类型. 为什么这样说. 假设有两个变量,如下 ...

  4. Ubuntu14.04 编译 Android 5.1.1源码(采用国内镜像)

    欢迎转载,转载请注明出处: http://www.cnblogs.com/lanrenxinxin/p/5424554.html 之前就有编译android源码的想法,但是由于有GFW的存在,又没有梯 ...

  5. Windows系统环境下创建mysql主从数据库方法(双向主从复制)

    创建mysql主从数据库方法(双向主从复制) (一)Windows系统下的MySQL主从复制(单向复制) (1)环境说明: 1,Mysql版本:mysql5.7.20(主从机mysql版本必须一致) ...

  6. 【PyTorch深度学习60分钟快速入门 】Part2:Autograd自动化微分

      在PyTorch中,集中于所有神经网络的是autograd包.首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络. autograd包为张量的所有操作提供了自动微分.它是一个运行式定义的 ...

  7. pip更新到18版本后使用pycharm更新问题:module 'pip' has no attribute 'main'

    今天升级pip到18.0版本后更新模块时出现错误 分析报错信息可知,问题出在packaging_tool.py文件的213行和109行,找到具体的代码,如下 # 109行函数 def do_insta ...

  8. forfiles

    关键命令就这一条了:forfiles.exe /p "D:\Kugou" /m *.tar /d -14 /c "cmd /c del @path" 这条命令的 ...

  9. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  10. LVOOP设计模式在路上(二)-- 策略模式

    前言 最近工作还挺忙的,连着好些周都是单休了,今天休息在家就来写写关于策略模式的理解和labivew的实现. 正文 1.什么是策略模式 定义是这样描述的:它定义了算法家族,分别封装起来,让它们之间可以 ...