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

news2024/9/27 17:27:58

HDFS分布式文件系统

    • 参考
    • 学习目标
    • 第三课时
      • 知识点1-HDFS的Java API介绍
      • 知识点2-案例-使用Java API操作HDFS
    • 第四课时
      • 知识点1-Federation机制的实现原理
      • 知识点2-Federation机制的特点
      • 知识点3-Federation机制的实现
      • 知识点4-Erasure Coding

参考

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中,常用的一个核心包为

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依赖

        <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

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(数据块存储)层。
在这里插入图片描述
在这里插入图片描述

Block Management(数据块管理器)和 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

影刀RPA实战:网页爬虫之天猫商品数据

1.实战目标 1.1 实战目标 在电商行业&#xff0c;我们经常爬取各个平台的商品数据&#xff0c;通过收集和分析这些商品数据&#xff0c;企业可以了解市场趋势、消费者偏好和竞争对手的动态&#xff0c;从而制定更有效的市场策略。爬取商品数据对于企业在市场竞争中把握先机、…

招联金融2025校招内推喇

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 深圳&#xff0c;武汉&#xff1a; 后台开发 前端开发 数据开发 数据运营…

SD卡读写

SD卡 SD卡分类根据存储容量根据性能 SD卡协议简介SPI 模式命令命令格式命令类别CMDACMD 响应R1R2R3R7 寄存器CSD 总线读操作写操作擦除&写保护 初始化流程 SD 模式 IP 设计IP 例化界面IP 接口IP 状态机IP 验证 雷龙贴片式TF卡参考资料 SD卡分类 根据存储容量 Standard Ca…

五星级可视化页面(26):经常被模仿,从未被的超越的大屏界面。

Hello&#xff0c;各位老铁&#xff0c;本期分享的可视化界面&#xff0c;你可能在某些地方见过&#xff0c;或者被某些设计师临摹过&#xff0c;说明它们足够漂亮了&#xff0c; 你如果仔细观看细节&#xff0c;还是会发现很作出彩的地方不是轻易可以模仿的。 只有创新&#x…

linux网络编程8

24.9.25学习目录 一.原始套接字&#xff08;续&#xff09;1.sendto发送数据原始套接字1.ARP 二.Web编程1.概述2.HTML 一.原始套接字&#xff08;续&#xff09; 混杂模式&#xff1a; 指一台机器的网卡能够接受所有经过它的数据包&#xff0c;不论其目的地址是否是它&#xf…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近使用alpine操作系统上docker遇到了一些错误&#xff0c;尝试解决之后就准备输出一篇博客&#xff0c;帮助有需要的后人能够少踩坑&#xff0c;因为淋过雨所以想给别人撑伞 错误场景 我…

dump java内存并进行分析

一、确保机器存在jmap命令 jmap 如果不存在&#xff0c;可以从其他机器将完整的jdk拷贝过来&#xff0c;然后进行使用 二、dump内存 ./jmap -dump:formatb,file./dump.hprof 2853 其中2853是java的PID&#xff0c;将其改为自己想要dump的java进程ID 三、分析&#xff0c;…

系统敏感信息搜索工具(支持Windows、Linux)

目录 工具介绍 使用说明 search模块 browser模块 下载地址 工具介绍 可以快速搜索服务器中的有关username,passsword,账号,口令的敏感信息还有浏览器的账户密码。 使用说明 search模块 searchall64.exe search -p 指定路径 searchall64.exe search -p 指定路径 -s &q…

前缀和(3)_寻找数组的中心下标

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 前缀和(3)_寻找数组的中心下标 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1…

hackbar 插件安装(google版)

hackbar下载&#xff08;github&#xff09; 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/19 18:17 HackBar 是一个辅助进行网络渗透测试和安全评估的浏览器插件。它提供了一系列快捷工具和功能&#xff0c;可以帮助用户执行各种网络攻击和测试&#xff0c;包括 XS…

Linux宇宙-1

1.Linux的前世今生 1.计算机 根据摩尔定理&#xff0c;计算机快速向小型化和高性能化发展。 计算机私人公司也是蓬勃发展&#xff0c;包括面向企业的大型计算机&#xff1a;IBM&#xff1b;面向个人的计算机&#xff1a;苹果&#xff0c;微软和英特尔&#xff1b; 由于计算…

MySQL高阶1965-丢失信息的雇员

目录 题目 准备数据 分析数据 实现 题目 编写解决方案&#xff0c;找到所有 丢失信息 的雇员 id。当满足下面一个条件时&#xff0c;就被认为是雇员的信息丢失&#xff1a; 雇员的 姓名 丢失了&#xff0c;或者雇员的 薪水信息 丢失了 返回这些雇员的 id employee_id &…

定制几何尺寸组合测量仪 提高利用率 降低成本!

几何尺寸种类也包括很多类型&#xff0c;外径、圆度、长度、宽度、厚度、直线度等等均在其中&#xff0c;而通常的测量仪都是单一尺寸测量仪&#xff0c;但同一产品需要检测的尺寸往往不止一种&#xff0c;多台测量仪的应用会增加成本、增加占地面积&#xff0c;因此定制几何尺…

Java面向对象(二)(类的方法)(自己学习整理的资料)

目录 一.带参方法 带1个参数的方法 带2个参数的方法 带3个参数的方法 数组作为参数 &#xff08;图书管理系统&#xff09; 递归方法 二.简易银行存取款功能 一.带参方法 语法 <访问修饰符>返回类型<方法名>(<形式参数列表>){ //方法的主体 } 带1…

C++——认识STL及使用及实现第一个容器string

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 小伞的主页&#xff1a;xiaosan_blog 1. 什么是STL 1.1 STL的版本 STL(standard template libaray-标准模板库)&…

垃圾回收级别分类识别系统源码分享

垃圾回收级别分类识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

【线程】线程的同步---生产消费者模型

本文重点&#xff1a;理解条件变量和生产者消费者模型 同步是在保证数据安全的情况下&#xff0c;让我们的线程访问资源具有一定的顺序性 条件变量cond 当一个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了&#xff0c;…

电路 - 笔记2

1 555 芯片 2 类比 - pU*I 与 Fm*a 是不是可以与牛顿定律类比 - Fm*a 人的力量&#xff08;F&#xff09;有限。 当推大箱子&#xff08;m&#xff09;时&#xff0c;加速度&#xff08;a&#xff09;就不会很大 当推小箱子&#xff08;m&#xff09;时&#xff0c;加速度…

RTE 大会报名丨AI 时代新基建:云边端架构和 AI Infra ,RTE2024 技术专场第二弹!

所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0c;如何构建高可用的云边端协同架构&#xff1f; 语音 AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频的爆炸增长&#xff0c;给新一代编解码技术提出了什么新挑战&#xff1f; 当大模型进化到实时多模态&am…