【大数据技术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;
相关文章
|
11天前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
33 2
|
11天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
10天前
|
分布式计算 Hadoop Shell
Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第4天】Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
24 5
|
13天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
51 1
|
30天前
|
消息中间件 SQL 分布式计算
大数据Hadoop生态圈体系视频课程
熟悉大数据概念,明确大数据职位都有哪些;熟悉Hadoop生态系统都有哪些组件;学习Hadoop生态环境架构,了解分布式集群优势;动手操作Hbase的例子,成功部署伪分布式集群;动手Hadoop安装和配置部署;动手实操Hive例子实现;动手实现GPS项目的操作;动手实现Kafka消息队列例子等
20 1
大数据Hadoop生态圈体系视频课程
|
1月前
|
网络协议 Java Linux
Java 开发常用的 Linux 命令知识积累
Java 开发常用的 Linux 命令知识积累
38 0
|
3月前
|
Java Shell 网络安全
java实现连接远程服务器,并可以执行shell命令
java实现连接远程服务器,并可以执行shell命令
55 2
|
3月前
|
Java Unix Linux
Java大神常用Linux命令整理二
Java大神常用Linux命令整理二
16 0
|
3月前
|
Java Linux 开发工具
Java大神常用Linux命令整理一
Java大神常用Linux命令整理一
17 0
|
4月前
|
分布式计算 资源调度 搜索推荐
《PySpark大数据分析实战》-02.了解Hadoop
大家好!今天为大家分享的是《PySpark大数据分析实战》第1章第2节的内容:了解Hadoop。
48 0
《PySpark大数据分析实战》-02.了解Hadoop