前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDFS分布式文件系统01-HDFS JAVA操作与联邦机制

HDFS分布式文件系统01-HDFS JAVA操作与联邦机制

作者头像
用户2225445
发布2024-09-25 09:04:46
640
发布2024-09-25 09:04:46
举报
文章被收录于专栏:IT从业者张某某

参考

maven的setting.xml配置文件详解

http://tch.ityxb.com

学习目标

使学生了解文件系统的分类,能够描述不同文件系统的特点 使学生熟悉HDFS架构,能够描述HDFS架构的主要组件及其作用 使学生了解HDFS的特点,能够简述HDFS的特点 使学生掌握HDFS的文件读写原理,能够叙述HDFS读写文件的流程 使学生熟悉HDFS的健壮性,能够叙述HDFS心跳机制、副本机制和负载均衡等策略 使学生掌握HDFS的Shell操作,能够灵活运用HDFS Shell命令操作HDFS 使学生掌握HDFS的Java API操作,能够灵活使用Java API编写应用程序操作HDFS 使学生熟悉Federation机制,能够描述Federation机制的结构、特点并实现Federation机制。 使学生了解Erasure Coding,能够简述Erasure Coding节省存储空间的原理

第三课时

除了通过HDFS Shell操作HDFS之外,还可以通过HDFS提供的Java API操作HDFS,其核心是使用HDFS提供的Java API构造一个访问的对象

知识点1-HDFS的Java API介绍

在HDFS Java API中,常用的一个核心包为

代码语言:javascript
复制
org.apache.hadoop.fs

该包提供了常用的FileSystem、FileStatus、FSDataInputStream、FSDataOutputStream和Path类。

FileSystem类:用于介绍为对文件进行一系列操作。 FileStatus类:该类用于向客户端展示HDFS中文件和目录的元数据,包括文件大小、Block大小、副本信息和修改时间等。 FSDataInputStream类:表示HDFS输入流,用于实现HDFS写入文件的操作。 FSDataOutputStream类:表示HDFS输出流,用于实现HDFS读取文件的操作。 Path类:表示HDFS中的一个目录或一个文件路径。

HDFS中对文件的一系列操作,通常使用org.apache.hadoop.fs包下的FileSystem类实现。HDFS的Java API中FileSystem类的常用方法。

① copyFromLocalFile(Path src,Path dst) ② copyToLocalFile(boolean delSrc, Path src, Path dst) ③ mkdirs(Path f) ④ rename(Path src, Path dst) ⑤ delete(Path f,boolean recursive)

知识点2-案例-使用Java API操作HDFS

通过IntelliJ IDEA开发工具编写Java应用程序演示使用Java API操作HDFS,操作步骤如下。 (1)配置案例环境 (2)添加Maven库依赖 (3)获取客户端对象 (4)上传文件到HDFS (5)从HDFS下载文件 (6)目录操作 (7)查看目录中的文件信息 (8)在Windows配置Hadoop运行环境 (9)运行Java应用程序 (10)查看HDFS下载到本地文件系统的文件 (11)查看HDFS的目录

打开IDEA,选择Maven,设置settings.xml文件

在pom.xml中添加Maven依赖

代码语言:javascript
复制
        <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-common</artifactId>
              <version>3.3.4</version>
         </dependency>
         <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-hdfs</artifactId>
              <version>3.3.4</version>
         </dependency>
                  <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-client</artifactId>
              <version>3.3.4</version>
         </dependency>
         <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.13</version>
        </dependency>

创建类Hdfscurdtest1

代码语言:javascript
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.IOException;

public class hdfscurdtest1 {
    FileSystem fs = null;

    @Before
    public  void init() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.100.3:9000");
        System.setProperty("HADOOP_USER_NAME","root");
        fs = FileSystem.get(conf);
    }

    @Test
    public void testAddFileToHdfs() throws Exception{
        Path src = new Path("d:\\data\\a.txt");
        Path des = new Path("/a/a.txt");
        Path des1 = new Path("/a/b/c/a.txt");
        Path des2 = new Path("/a2/a.txt");
        Path des3 = new Path("/a.txt");
        fs.copyFromLocalFile(src,des);
        fs.copyFromLocalFile(src,des1);
        fs.copyFromLocalFile(src,des2);
        fs.copyFromLocalFile(src,des3);
        fs.close();
    }

    @Test
    public void testDownloadFileToLocal() throws IllegalArgumentException,
            IOException {
        fs.copyToLocalFile(
                new Path("/a.txt"),
                new Path("D:\\downloadFile"));
    }

    @Test
    public void testMkdirAndDeleteAndRename() throws Exception {
        fs.mkdirs(new Path("/a/b/c"));
        fs.mkdirs(new Path("/a2/b2/c2"));
        fs.rename(new Path("/a"), new Path("/a3"));
        fs.delete(new Path("/a2"), true);
    }

    @Test
    public void testListFiles() throws FileNotFoundException,
            IllegalArgumentException, IOException {
        RemoteIterator<LocatedFileStatus> listFiles =
                fs.listFiles(new Path("/a"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            System.out.println("文件名:" + fileStatus.getPath().getName());
            System.out.println("文件的副本数:" + fileStatus.getReplication());
            System.out.println("文件的权限:" + fileStatus.getPermission());
            System.out.println("文件大小:" + fileStatus.getLen() + "字节");
            BlockLocation[] blockLocations =
                    fileStatus.getBlockLocations();
            for (BlockLocation bl : blockLocations) {
                String[] hosts = bl.getHosts();
                System.out.println("文件的Block所在虚拟机的主机名:");
                for (String host : hosts) {
                    System.out.println(host);
                }
            }
            System.out.println("----------------------------");
        }
    }
}

第四课时

知识点1-Federation机制的实现原理

HDFS提供了一种Federation(联邦)机制,该机制允许单个HDFS可以存在多个NameNode,从而不仅可以解决HDFS的存储能力受单个NameNode的内存限制,而且可以提高HDFS读写数据的效率。本节课将针对Federation机制进行详细讲解。

HDFS的NameSpace(命名空间)层和Block Storage(数据块存储)层。

在这里插入图片描述
在这里插入图片描述

>Federation机制使用多个独立的NameNode

在这里插入图片描述
在这里插入图片描述
知识点2-Federation机制的特点

教师通过PPT讲解Federation机制的特点。 (1)介绍Federation机制的优点。

① NameSpace的可扩展性 ② 高性能 ③ 隔离机制

(2)Federation机制的缺点。

① 交叉访问 ② 数据移动效率低

知识点3-Federation机制的实现

Federation机制的实现,主要是通过修改Hadoop的自定义配置文件hdfs-site.xml实现,该配置文件存在参数dfs.nameservices用于指定多个NameNode中不同NameSpace的唯一标识符,通过NameSpace的唯一标识符可以指定不同NameNode的配置信息,例如NameNode的RPC通信地址、Http通信地址等。

操作步骤如下。 (1)前提准备 ①关闭Hadoop的HDFS和YARN ②删除HDFS的数据和元数据 (2)修改hdfs-site.xml配置文件 (3)分发hdfs-site.xml配置文件 (4)格式化HDFS文件系统 (5)启动Hadoop集群 (6)使用不同的NameNode

知识点4-Erasure Coding

PPT结合实际操作的方式讲解Erasure Coding。 (1)介绍Erasure Coding(纠删码)。 (2)介绍条带化技术。 (3)介绍HDFS通过条带化实现Erasure Coding的原理。 (4)通过示意图介绍应用Erasure Coding的HDFS如何存储文件。 (5)介绍常用的Erasure Coding策略。 ① RS-10-4-1024k ② RS-6-3-1024k ③ RS-3-2-1024k (6)演示通过Admin Commands类型的HDFS Shell子命令ec的子命令选项应用Erasure Coding来存储文件。 ① -enablePolicy ② -setPolicy ③ -getPolicy ④ -unsetPolicy ⑤-disablePolicy

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
  • 学习目标
  • 第三课时
    • 知识点1-HDFS的Java API介绍
      • 知识点2-案例-使用Java API操作HDFS
      • 第四课时
        • 知识点1-Federation机制的实现原理
          • 知识点2-Federation机制的特点
            • 知识点3-Federation机制的实现
              • 知识点4-Erasure Coding
              相关产品与服务
              负载均衡
              负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档