分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

简介: 分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)

       前面的文章介绍了怎么将整个集群系统搭建起来,并进行了有效的测试。为了解决登录一台服务器登录其他服务器需要多次输入密码的问题,提供了SSH免密码登录解决方案。还有一些hadoop的简单操作shell命令。今天我们就结合eclipse来用JAVA语言来读取和操作我们的hadoop文件系统中的文件。

一、POM文件

1.1 让我们来先看一下mvnrepository里面关于hadoop中的JAR包

1.2 需要引进的JAR包。

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>2.7.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.7.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>2.7.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <version>2.7.5</version>
    </dependency>
      <dependency>
      <groupId>jdk.tools</groupId>
      <artifactId>jdk.tools</artifactId>
      <version>1.8</version>
      <scope>system</scope>
      <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>

二、代码

2.1 前提我先在hdfs dfs 系统根目录下建立一个test文件夹,将README.txt复制了进去。

2.2 查看文件

/**
 * 
 */
package com.yuyi.hadoop;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
 
/**
 * @author mcb
 *
 *         2018年10月11日 下午5:49:28
 */
public class ReadFileToConSoleTest {
 
  public static void main(String[] args) throws Exception {
    // 该路径为你想获取的文件的路径,就是想着读取那一个文件
    String filePath = "/test/README.txt";
    readFileToConSole(filePath);
//    readFileToLocal(filePath);
    localToHDFS();
  }
 
  static FileSystem fs = null;
  static {
    Configuration conf =new Configuration();
    try {
      fs = FileSystem.get(new URI("hdfs://192.168.71.233:8020"), conf, "root");
    } catch (IOException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    } catch (InterruptedException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    } catch (URISyntaxException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    }
  }
 
  // 文件读取
  public static void readFileToConSole(String filePath) throws Exception {
    // 获取配置
    Configuration conf = new Configuration();
    // 配置
    conf.set("fs.defaultFS", "hdfs://192.168.71.233:8020");
    // 获取hdfs文件系统的操作对象
    FileSystem fs = FileSystem.get(conf);
    // 具体对文件操作
    FSDataInputStream fin = fs.open(new Path(filePath));
    // 输入流读取,读出到何处,读出大小和是否关闭
    IOUtils.copyBytes(fin, System.out, 4096, true);
  }
 
  // 文件下载到本地
  public static void readFileToLocal(String filePath) throws Exception {
 
    FSDataInputStream fin = null;
    OutputStream out = null;
    try {
      // 获取配置
      Configuration conf = new Configuration();
      // 配置
      // conf.set("fs.defaultFS", "hdfs://192.168.71.233:8020");
      // 获取hdfs文件系统的操作对象
      FileSystem fs = FileSystem.get(new URI("hdfs://192.168.71.233:8020"), conf, "root");
      // 具体对文件操作
      fin = fs.open(new Path(filePath));
 
      out = new FileOutputStream(new File("F:\\hadoop\\testout\\a.txt"));
      // 输入流读取,读出到何处,读出大小和是否关闭
      IOUtils.copyBytes(fin, out, 4096, true);
    } catch (Exception e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
 
    } finally {
      fin.close();
      out.close();
    }
  }
 
  // 文件从本地上传到hdfs系统中
  public static void localToHDFS() throws IllegalArgumentException, IOException {
    String localPath="F:\\hadoop\\testout";
    String hdfsPath="/test/b.txt";
    fs.copyFromLocalFile(new Path(localPath), new Path(hdfsPath));
    System.out.println("传输完成~~");
    
    
  }
 
}

目录
相关文章
|
4天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
13天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
13天前
|
消息中间件 Java 数据库连接
Java 反射最全详解 ,框架设计必掌握!
本文详细解析Java反射机制,包括反射的概念、用途、实现原理及应用场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 反射最全详解 ,框架设计必掌握!
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
4天前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
12 2
|
12天前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
44 3
|
13天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
15天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
23 4
|
15天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
10 1
|
8天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
10 0