分布式系统详解--框架(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("传输完成~~");
    
    
  }
 
}

目录
相关文章
|
9天前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
30 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
9天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
24 1
|
3天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
9 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
5天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
14 4
|
6天前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
18 3
|
7天前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
37 4
|
6天前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
26 3
|
6天前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
3天前
|
存储 分布式计算 资源调度
两万字长文向你解密大数据组件 Hadoop
两万字长文向你解密大数据组件 Hadoop
25 11
|
2月前
|
存储 分布式计算 Hadoop
下一篇
无影云桌面