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. 课程三(Structuring Machine Learning Projects),第一周(ML strategy(1)) —— 0.Learning Goals

    Learning Goals Understand why Machine Learning strategy is important Apply satisficing and optimizin ...

  2. Linux编程 6 (查看进程 ps 及输出风格)

    一.查看进程命令ps 1.1 默认ps 命令 在默认情况下,ps命令只会显示运行在当前控制台下,属于当前用户的进程,在上图中,我们只运行了bash shell以及ps命令本身. 上图中显示了程序的进程 ...

  3. Json数据中同字段不同数据类型的解析

    当解析Json数据时,如果碰到同字段不同数据类型的情况,如何处理呢?比如: [ { "code": 1, "data": 33 }, { "code& ...

  4. vmware workstation 提示程序包可能有错,错误代码 29141 & 提示不可恢复错误: (vcpu-0)

    问题一:提示程序包可能有错,错误代码 29141 换了n个版本(vmware workstation 10,11, 12),下载了n次,都提示该错误(29141),明明程序包没错啊, 一开始还怀疑是我 ...

  5. antd tree组件文件名换行 + 点击展开时,自动收起同级其他展开目录

    1.在项目中用 antd的tree组件的时候,遇到两个问题 1.文件名太长的话 会超出容器 很难看,解决方法如下 ` 引入css在global下设置 :global { .ant-tree li .a ...

  6. "java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation."问题解决

    问题描述 运行uiautomator,报错"java.lang.IllegalStateException: No instrumentation registered! Must run ...

  7. mysql创建表时,设置timestamp DEFAULT NULL报错1067 - Invalid default value for 'updated_at'

    问题背景: 线上的linux服务器上的mysql服务器中导出数据库的结构.想要在本地创建一个测试版本 导出后再本地mysql上运行却报错   1067 - Invalid default value ...

  8. SOA&微服务&服务网格&高可用

    SOA 架构 SOA 全称是:Service Oriented Architecture,“面向服务的架构”. 它是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能. 各个 ...

  9. 红黑树深入剖析及Java实现

    红黑树是平衡二叉查找树的一种.为了深入理解红黑树,我们需要从二叉查找树开始讲起. BST 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小, ...

  10. Spark SQL结构化数据处理

    Spark SQL是Spark框架的重要组成部分, 主要用于结构化数据处理和对Spark数据执行类SQL的查询. DataFrame是一个分布式的,按照命名列的形式组织的数据集合. 一张SQL数据表可 ...