【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)

简介: 【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

一、HDFS的Shell介绍

Shell在计算机科学中俗称“壳”,是提供给使用者使用界面的进行与系统交互的软件,通过接收用户输入的命令执行相应的操作,Shell分为图形界面Shell和命令行式Shell。

文件系统(FS)Shell包含了各种的类Shell的命令,可以直接与Hadoop分布式文件系统以及其他文件系统进行交互。

常用命令如下

二、案例-Shell命令

三、HDFS的Java API

由于Hadoop是使用Java语言编写的,因此可以使用Java API操作Hadoop文件系统。HDFS Shell本质上就是对Java API的应用,通过编程的形式操作HDFS,其核心是使用HDFS提供的Java API构造一个访问客户端对象,然后通过客户端对象对HDFS上的文件进行操作(增、删、改、查)。

Hadoop整合了众多文件系统,HDFS只是这个文件系统的一个实例。

在Java中操作HDFS,创建一个客户端实例主要涉及以下两个类:

Configuration:该类的对象封装了客户端或者服务器的配置,Configuration实例会自动加载HDFS的配置文件core-site.xml,从中获取Hadoop集群的配置信息。

FileSystem:该类的对象是一个文件系统对象。

FileSystem对象的一些方法可以对文件进行操作,常用方法如下:

四、案例-使用Java API操作HDFS

1:搭建项目环境

创建一个项目名为“HadoopDemo”,包名为“com.chapter03”的Maven项目,并在项目的pom.xml文件中引入hadoop-common、hadoop-hdfs、hadoop-client以及单元测试junit的依赖。

2:初始化客户端对象

首先在项目src文件夹下创建com.chapter03. hdfsdemo包,并在该包下创建HDFS_API_TEST.java文件,编写Java测试类,构建Configuration和FileSystem对象,初始化一个客户端实例进行相应的操作。

3:上传文件到HDFS

由于采用Java测试类来实现JavaApi对HDFS的操作,因此可以在HDFS_CRUD.java文件中添加一个AddFileToHdfs()方法来演示本地文件上传到HDFS的示例。

4. 从HDFS下载文件到本地

在HDFS_CRUD.java文件中添加一个DownloadFileToLocal()方法,来实现从HDFS中下载文件到本地系统的功能。

5. 目录操作

在文件添加一个MkdirAndDeleteAndRename()方法,实现创建,删除,重命名文件。

6. 查看目录中的文件信息

在文件中添加一个ListFiles()方法,实现查看目录中所有文件的详细信息的功能。

java类代码如下

package com.chapter03.hdfsdemo;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;
public class HDFS_API_TEST {
  FileSystem fs = null;
  @Before
  public void init() throws Exception {
    // 构造配置参数对象
    Configuration conf = new Configuration();
    // 设置访问的hdfs的URI
    conf.set("fs.defaultFS", "hdfs://172.16.106.69:9000");
    // 设置本机的hadoop的路径
    System.setProperty("hadoop.home.dir", "D:\\hadoop");
    // 设置客户端访问身份
    System.setProperty("HADOOP_USER_NAME", "root");
    // 通过FileSystem的静态get方法获取文件系统客户端对象
    fs = FileSystem.get(conf);
  }
  @Test
  public void testAddFileToHdfs() throws IOException {
    // 要上传的文件所在本地路径
    Path src = new Path("D:/test.txt");
    // 要上传到hdfs的目标路径
    Path dst = new Path("/testFile");
    // 上传文件方法
    fs.copyFromLocalFile(src, dst);
    // 关闭资源
    fs.close();
  }
  // 从hdfs中复制文件到本地文件系统
  @Test
  public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
    // 下载文件
    fs.copyToLocalFile(new Path("/testFile"), new Path("D:/"));
  }
  // 创建,删除,重命名文件
  @Test
  public void testMkdirAndDeleteAndRename() throws Exception {
    // 创建目录
    fs.mkdirs(new Path("/test1"));
    fs.rename(new Path("/test1"),new Path("/tes3"));
    // 删除文件夹,如果是非空文件夹,参数2必须给值true
    fs.delete(new Path("/test2"), true);
  }
  // 查看目录信息,只显示文件
  @Test
  public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
    // 获取迭代器对象
    RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
    while (listFiles.hasNext()) {
      LocatedFileStatus fileStatus = listFiles.next();
      // 打印当前文件名
      System.out.println(fileStatus.getPath().getName());
      // 打印当前文件块大小
      System.out.println(fileStatus.getBlockSize());
      // 打印当前文件权限
      System.out.println(fileStatus.getPermission());
      // 打印当前文件内容长度
      System.out.println(fileStatus.getLen());
      // 获取该文件块信息(包含长度,数据块,datanode的信息)
      BlockLocation[] blockLocations = fileStatus.getBlockLocations();
      for (BlockLocation bl : blockLocations) {
        System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());
        String[] hosts = bl.getHosts();
        for (String host : hosts) {
          System.out.println(host);
        }
      }
      System.out.println("----------------------------");
    }
  }
  // 查看文件及文件夹信息
  @Test
  public void ListFileAll() throws FileNotFoundException, IllegalArgumentException, IOException {
    // 获取HDFS系统中文件和目录的元数据等信息
    FileStatus[] listStatus = fs.listStatus(new Path("/"));
    String filelog = "文件夹--       ";
    for (FileStatus fstatus : listStatus) {
      // 判断是文件还是文件夹
      if (fstatus.isFile()) {
        filelog = "文件--         ";
      }
      System.out.println(filelog + fstatus.getPath().getName());
    }
  }
}

创作不易 觉得有帮助请点赞关注收藏

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
10月前
|
传感器 Java 大数据
Java 大视界 -- 基于 Java 的大数据实时数据处理在车联网车辆协同控制中的应用与挑战(197)
本文深入探讨了基于 Java 的大数据实时数据处理在车联网车辆协同控制中的关键应用与技术挑战。内容涵盖数据采集、传输与实时处理框架,并结合实际案例分析了其在车辆状态监测、交通优化与协同驾驶中的应用效果,展示了 Java 大数据技术在提升交通安全性与效率方面的巨大潜力。
|
9月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
10月前
|
存储 搜索推荐 算法
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
本文深入探讨了Java大数据技术在智能金融理财产品风险评估与个性化配置中的关键应用。通过高效的数据采集、存储与分析,Java大数据技术助力金融机构实现精准风险评估与个性化推荐,提升投资收益并降低风险。
Java 大视界 -- Java 大数据在智能金融理财产品风险评估与个性化配置中的应用(195)
|
9月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
9月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
9月前
|
存储 供应链 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业供应链风险预警与决策支持中的应用(204)
本篇文章探讨了基于 Java 的大数据可视化技术在企业供应链风险预警与决策支持中的深度应用。文章系统介绍了从数据采集、存储、处理到可视化呈现的完整技术方案,结合供应链风险预警与决策支持的实际案例,展示了 Java 大数据技术如何助力企业实现高效、智能的供应链管理。
|
9月前
|
存储 SQL Java
Java 大视界 -- Java 大数据在智能医疗手术风险评估与术前方案制定中的应用探索(203)
本文探讨了Java大数据技术在智能医疗手术风险评估与术前方案制定中的创新应用。通过多源数据整合、智能分析模型构建及知识图谱技术,提升手术风险预测准确性与术前方案制定效率,助力医疗决策智能化,推动精准医疗发展。
|
10月前
|
机器学习/深度学习 Java 大数据
Java 大视界 -- Java 大数据在智能政务公共资源交易数据分析与监管中的应用(202)
本篇文章深入探讨了 Java 大数据在智能政务公共资源交易监管中的创新应用。通过构建高效的数据采集、智能分析与可视化决策系统,Java 大数据技术成功破解了传统监管中的数据孤岛、效率低下和监管滞后等难题,为公共资源交易打造了“智慧卫士”,助力政务监管迈向智能化、精准化新时代。
|
10月前
|
数据采集 机器学习/深度学习 Java
Java 大视界 -- Java 大数据在智能体育赛事运动员体能监测与训练计划调整中的应用(200)
本篇文章聚焦 Java 大数据在智能体育赛事中对运动员体能监测与训练计划的智能化应用。通过构建实时数据采集与分析系统,结合机器学习模型,实现对运动员体能状态的精准评估与训练方案的动态优化,推动体育训练迈向科学化、个性化新高度。