【大数据技术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());
    }
  }
}

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

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
Java API Maven
HDFS的API操作
HDFS的API操作
26 0
|
1月前
|
数据采集 运维 数据挖掘
API电商接口大数据分析与数据挖掘 (商品详情店铺)
API接口、数据分析以及数据挖掘在商品详情和店铺相关的应用中,各自扮演着重要的角色。以下是关于它们各自的功能以及如何在商品详情和店铺分析中协同工作的简要说明。
|
2月前
|
数据采集 监控 算法
利用大数据和API优化电商决策:商品性能分析实践
在数据驱动的电子商务时代,大数据分析已成为企业提升运营效率、增强市场竞争力的关键工具。通过精确收集和分析商品性能数据,企业能够洞察市场趋势,实现库存优化,提升顾客满意度,并显著增加销售额。本文将探讨如何通过API收集商品数据,并将这些数据转化为对电商平台有价值的洞察。
|
3月前
|
数据采集 传感器 人工智能
大数据关键技术之电商API接口接入数据采集发展趋势
本文从数据采集场景、数据采集系统、数据采集技术方面阐述数据采集的发展趋势。 01 数据采集场景的发展趋势 作为大数据和人工智能工程的源头,数据采集的场景伴随着应用场景的发展而变化,以下是数据采集场景的发展趋势。
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
159 0
|
15天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
数据采集 数据可视化 算法
电商API接口的大数据分析与挖掘技巧
随着电商行业的快速发展,电商平台上的交易数据量也越来越大。如何对这些数据进行分析和挖掘,从中获取有价值的信息,已经成为电商企业和开发者关注的重点。本文将介绍电商API接口的大数据分析与挖掘技巧。
|
1月前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
3天前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
|
14天前
|
分布式计算 Hadoop Shell
Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第4天】Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
28 5