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

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;@Beforepublic  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);}@Testpublic 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();}@Testpublic void testDownloadFileToLocal() throws IllegalArgumentException,IOException {fs.copyToLocalFile(new Path("/a.txt"),new Path("D:\\downloadFile"));}@Testpublic 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);}@Testpublic 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.xdnf.cn/news/1547712.html

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

相关文章

软件测评CNAS认可实验室程序文件之检测报告的编制和交付程序

软件测评实验室在申请CNAS认可时&#xff0c;需要根据相关准则文件的要求&#xff0c;建立质量管理体系&#xff0c;其中程序文件是质量管理体系中非常重要的一环。在前面的文章中&#xff0c;我们为大家整体介绍了CNAS软件测评实验室程序文件主要都有哪些&#xff0c;以及对部…

Pygame中Sprite实现逃亡游戏4

在《Pygame中Sprite实现逃亡游戏3》中实现了玩家跳跃飞火的效果&#xff0c;接下来通过精灵类的碰撞检测来判断飞火是否击中玩家、飞火是否击中飞龙以及飞龙是否抓住玩家。 1 飞火是否击中玩家的判断 判断飞火是否击中玩家的代码如图1所示。 图1 判断飞火是否击中玩家的代码 …

使用Docker快速本地部署RSSHub结合内网穿透访问RSS订阅源

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具&#xff0c;并结合cpolar内网穿透工具使用公网地址远…

心觉:如何重塑高效学习的潜意识(3)东西很好,但用不起,怎么破?

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作182/1000天 上篇文章我们讲了喜欢系统化学习的人的底层逻辑 已经做到了知己&#xff0c;还需要做到知彼&#xff0c;才能百战不殆…

学习Java(二)

1.条件语句 package com.msb.test02;public class TestIf01 {//条件语句public static void main(String[] args) { // 需求判定一个数是否大于10 // 给定一个数&#xff1b;int num 18;if (num > 10) {System.out.println("大于10的");}else {Sy…

C++11:现代C++的演变与提升

目录 前言 一、统一的列表初始化 1、{}初始化 2、std::initializer_list 二、新的声明 1、auto 2、decltype 3、nullptr 三、范围for循环 四、右值引用与移动语义 1. 左值 vs 右值 2、移动构造与移动赋值 3、 move转换 4、完美转发&#xff1a;forward 五、lamb…

HP UX服务器监控指标深度解读(Telnet)

随着企业IT架构的日益复杂&#xff0c;对关键服务器的监控与管理成为确保业务连续性和系统稳定性的重要环节。HP UX作为一款广泛应用于企业级环境的Unix服务器操作系统&#xff0c;其监控工作显得尤为重要。本文将针对监控易软件中HP UX服务器的监控指标进行深度解读&#xff0…

WinForm程序嵌入Web网页

文章目录 前言一、三方库或控件的选择测试二、Microsoft Edge WebView2安装、使用步骤1.安装2.使用 前言 由于此项目需要winform客户端嵌入web网页并于JAVA端交互数据&#xff0c;所以研究了一下嵌入web网页这部分&#xff0c;趟了一遍雷&#xff0c;这里做下记录。 一、三方库…

软考高级:系统设计 - MDA 模型 AI 解读

生活化例子 想象一下&#xff0c;你要建造一栋房子。建房子需要三个阶段&#xff1a; CIM (概念阶段)&#xff1a;这是你想象中的房子。你大概知道房子需要几间卧室、厨房、卫生间&#xff0c;但是还没有详细的设计图。就像在脑海中有个大概的想法&#xff1a;我要建个温馨的…

C++ 关于继承和多态常见的一些问题

大家好久不见&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎…

【含文档】基于Springboot+Vue的高校洗浴管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

OJ在线评测系统 前端 完善题目提交服务 细讲异步前端请求与后端接口交互

题目提交服务完善 这则笔记是我们来梳理一下前后端逻辑 主要是我们的提交逻辑 先是看前端 按钮绑定的是这个异步请求 async 关键字表示这个函数内部会使用 await 来等待异步操作完成。 异步提交表单数据 const doSubmit async () > {// message.error("刷题机架构…

如何为创新成果进行专利保护?

专利作为保护创新成果的重要法律手段&#xff0c;如同为创新者披上了一层坚实的盔甲&#xff0c;确保他们的智慧结晶免受侵犯。然而&#xff0c;随着科技的飞速发展&#xff0c;专利侵权现象也日益增多&#xff0c;如何有效保护专利&#xff0c;维护创新者的合法权益&#xff0…

使用SNAP工具处理Sentinel-1数据应注意磁盘和内存问题

近期使用SNAP处理数据比较多&#xff0c;有一些心得给大家分享一下&#xff01;在预处理Sentinel-1数据 的过程中出错基本上是有3种情况&#xff1a; 磁盘被写满 由于JAVA优化一般是通过空间换效率的方式。所以SNAP为了提高效率&#xff0c;本版本升级增加了数据本地缓存的比重…

C++冷门知识点1

1.特殊情况汇总&#xff1a; 负数&#xff0c;空指针&#xff0c;叶节点&#xff0c;INT_MAX和INT_MIN 2.双指针法(快慢指针&#xff0c;头尾指针)&#xff0c;三数指针法(链表逆序那块) 3.一定要注意极端情况 2.e后边可以跟负数&#xff0c;但是不能跟小数 3.string的push_bac…

工具介绍---效率高+实用

Visual Studio Code (VS Code) 功能特点&#xff1a; 智能代码提示&#xff1a;内置的智能代码提示功能可以自动完成函数、变量等的输入&#xff0c;提高代码编写速度。插件丰富&#xff1a;支持成千上万的扩展插件&#xff0c;例如代码片段、主题、Linting等&#xff0c;能够…

Iceberg 基本操作和快速入门

安装 Iceberg 是一种适用于大型分析表的高性能工具&#xff0c;通过spark启动并运行iceberg&#xff0c;文章是通过docker来进行安装并测试的 新建一个docker-compose.yml文件 文件内容 version: "3" services: spark-iceberg: image: tabulario/spark-iceberg co…

FastAPI 第五课 -- 基本路由

目录 一. 前言 二. 根路径路由 三. 路径参数 四. 启动应用和测试路由 一. 前言 在 FastAPI 中&#xff0c;基本路由是定义 API 端点的关键。每个路由都映射到应用程序中的一个函数&#xff0c;用于处理特定的 HTTP 请求&#xff0c;并返回相应的响应。 二. 根路径路由 创…

Java中使用ZXing和QRCode生成二维码(附Demo)

目录 前言1. 基本知识2. ZXing3. QRCode 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 生成二维码在J…

SpringBoot实现自定义Redis的连接

SpringBoot实现自定义Redis的连接 1.docker安装Redis docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf2.maven 的pom文件导包 <dependency>&…