hdfs设计思想元数据简单javaapi操作hdfs

hatcher-h      2022-04-05     284

关键词:

一、 设计思路

分布式文件系统

在Hadoop中文件系统是一个顶层的抽象。
分布式文件系统相当与对文件系统进行了一个扩展(类似于java中的接口)。
HDFS是分布式文件系统的一个实现,分布式文件系统还有许多其他的实现。

二、设计目标

1、硬件错误 是常态:特别是硬盘的损坏。所以存在副本机制。
2、数据流访问:所有的访问都是访问大量的数据,
					使用IO流一直操作。稳定而不是效率。
3、大数据集:存入到HDFS的数据都是海量的数据,不擅长处理小数据。
因为存入过多小数据,每个小数据都需要元数据,容易导致namenode宕机。
4、简单的相关模型:假定文件是一次写入,多次访问
5、移动计算比移动数据便宜
6、多种软硬件的可移植性

三 HDFS架构图

namenode:主要处理用户请求,维护元数据信息
secondarynode:辅助namenode维护元数据
datanode:存储数据
300M的文件需要划分为3个block块,实际的存储磁盘是300M,与block块个数没关系。

技术图片

四、HDFS元数据管理

技术图片

元数据分为两部分:
	fsimage 和edits
	fsimage :保存着一份相对比较完整的元数据  。内存和磁盘中都有
	edits:保存着一段时间内的操作日志、元数据。 内存和磁盘中都有
	edits会在一些特定条件下(一段时间内,或者在文件达到多大)合并到fsimage中。

五、HDFS元数据合并

技术图片

1、当达到条件后,secondarynode会通知namenode将要进行元数据合并,并让namenode进行edits切换。
2、secondarynode通过http的方式获取fsimage和edits
3、将fsimage和edits进行合并
4、将新的fsimage发送给namenide替换旧的fsimage
注意:
sencondarynode进行合并的时候是在内存中进行的,所以需要大的内存,部署的时候最好单独部署。

6、HDFS上传文件

技术图片

1、client通知namenode需要上传文件
2、namenode检查是否有权限。namenode允许client上传文件
3、client将文件分割成block块,并访问namenode询问第一个block块存入何处。
4、namenode通过机架感知原理,找到离客户端最近的一台机器(跨交换机最少的机器),找到该机器可用的block块,返回给client
5、client找到对应的datanode以及对应的block的id ,建立RPC连接,通过rpc连接简历pipline进行数据传输。(数据传输是通过UDP进行包传输)。
6、当第一个block块传递完毕,数据校验。反向的校验机制会给client一个响应,client进行第二个block传递,直至所有block传递完毕
7、等数据传递完毕后,client通知namenode建立元数据
block复制策略:
第一个block存在namenode返回的datanode中
第二个存储在同一个交换机下的datanode
第三个存在不通的交换机

7、HDFS文件读取

技术图片

1、client通知namenode读取数据
2、namenode检验权限,如果前线通过,那么namenode通过查找元数据,返回所有block块地址
		查找block规则:
								离client最近
								心跳机制(最近活跃的,namenode和datanode间存在心跳机制,datanode会一直返回给namenode自己的状态)
3、client并行访问datanode,读取所有block块并进行拼接。

注意

数据写入是串行:写入有ack机制,需要一个block块验证数据完整性后才能写入下一个。
数据读取是并行:读取不需要数据校验。
当一个block块读取到一般出现异常?
没有断点续传
client会到到副本中找,然后重新读取。

八、JAVA API

   public void hdfs() throws Exception {
        //注册驱动
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
        String url = "hdfs://node01:8020/install2.log";
        InputStream inputStream = new URL(url).openStream();
        FileOutputStream fileOutputStream = new FileOutputStream(new File("c:softwarehello1.txt"));
        IOUtils.copy(inputStream, fileOutputStream);
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(fileOutputStream);
    }

    @Test
    public void fileSystem01() throws IOException {
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://node01:8020");
        FileSystem fileSystem = FileSystem.get(configuration);
        System.out.println(fileSystem.toString());
        fileSystem.close();
    }

    @Test
    public void fileSystem02() throws URISyntaxException, IOException {
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), configuration);
        System.out.println(fileSystem.toString());
        fileSystem.close();
    }

    @Test
    public void fileSystem03() throws IOException {
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://node01:8020");
        FileSystem fileSystem = FileSystem.newInstance(configuration);
        System.out.println(fileSystem.toString());
        fileSystem.close();
    }
    @Test
    public void fileSystem04() throws IOException, URISyntaxException {
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://node01:8020"),configuration);
        System.out.println(fileSystem.toString());
        fileSystem.close();
    }

javaapi操作hdfs

...了用HDFS的shell命令对文件系统进行操作,我们也可以利用JavaAPI对文件系统进行操作,比如文件的创建、删除、修改权限等等,还有文件夹的创建、删除、重命名等等。使用JavaAPI对文件系统进行操作主要涉及以下几个类:1.Configur... 查看详情

大数据hadoophdfs的javaapi操作(代码片段)

...说。好了,我们开始今天的正文。文章目录一、HDFS的JavaAPI操作二、搭建开发环境三、FileSystem实例获取讲解四、HDFS常用JavaAPI代码一、HDFS的JavaAPI操作HDFS在生产应用中主要是客户端的开发,其核心 查看详情

hadoop3-javaapi操作hdfs(代码片段)

...用ShellCli对HDFS进行了一些基本的操作,本篇文章使用JavaApi对HDFS进行操作,下面是上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/127172685如果在windows环境下使用JavaApi进行操作&# 查看详情

hadoop3-javaapi操作hdfs(代码片段)

...用ShellCli对HDFS进行了一些基本的操作,本篇文章使用JavaApi对HDFS进行操作,下面是上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/127172685如果在windows环境下使用JavaApi进行操作&# 查看详情

hadoop3-javaapi操作hdfs(代码片段)

...用ShellCli对HDFS进行了一些基本的操作,本篇文章使用JavaApi对HDFS进行操作,下面是上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/127172685如果在windows环境下使用JavaApi进行操作&# 查看详情

hdfs读写和冷备份原理

参考技术A当用户通过命令行或者JavaAPI向Hadoop集群发起写入文件操作时,将触发写文件流程,分为3个阶段:创建文件,建立数据流管道和写数据。数据传输过程中,如果datanode2突然挂掉了,HDFS会启动如下步骤进行容错。namenode负... 查看详情

使用javaapi操作hdfs

使用javaAPI操作hdfs packagecom.zuoyan.hadoop;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;importor 查看详情

hdfs深入:10hdfs的javaapi操作(代码片段)

 看到10、hdfs的javaAPI操作, 13分19秒具体代码如下:/***递归遍历hdfs中所有的文件路径*/@TestpublicvoidgetAllHdfsFilePath()throwsURISyntaxException,IOException//获取fs的客户端FileSystemfileSystem=FileSystem.get(newURI("hdfs:// 查看详情

hdfs详解(代码片段)

...理解hdfs的工作原理******HDFS基本概念篇******1.HDFS前言l 设计思想分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;l 在大数据系统中作用:为各类分布... 查看详情

hdfs的javaapi操作(代码片段)

...文。文章目录一、HDFS的shell(命令行客户端)操作二、HDFS的javaapi操作一、HDFS的shell(命令行客户端)操作1.基本语法bin/hadoopfs具体命令或者bin/hdfsdfs具体命令2& 查看详情

javaapi操作hdfs

packageproject.etl.core.util;importjava.io.FileNotFoundException;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.F 查看详情

javaapi操作hdfs服务器

1.准备  开发环境:eclipse  依赖包:hadoop-2.7.7.tar.gz安装包 share/hadoop/下 common、hdfs中的jar包  2.连接HDFS服务器/**   *连接HDFS服务器*/@TestpublicvoidconnectHDFS(){//做一个配置Configurationconf=newConfiguration();//服务器地址端口conf... 查看详情

javaapi操作hdfs详细示例(代码片段)

1.遍历当前目录下所有文件与文件夹可以使用listStatus方法实现上述需求。listStatus方法签名如下/***Listthestatusesofthefiles/directoriesinthegivenpathifthepathis*adirectory.**@paramfgivenpath*@returnthestatusesofthefiles/directorie 查看详情

javaapi操作hdfs详细示例(代码片段)

1.遍历当前目录下所有文件与文件夹可以使用listStatus方法实现上述需求。listStatus方法签名如下/***Listthestatusesofthefiles/directoriesinthegivenpathifthepathis*adirectory.**@paramfgivenpath*@returnthestatusesofthefiles/directorie 查看详情

大数据讲课笔记4.4使用javaapi操作hdfs(代码片段)

...习目标一、导入新课二、新课讲解(一)了解HDFSJavaAPI1、HDFS常见类与接口2、FileSystem的常用方法(二)编写Java程序访问HDFS1、创建Maven项目2、修改pom.xml文件,添加hadoop依赖3、在resources目录里创建log4j.properties... 查看详情

大数据讲课笔记4.4使用javaapi操作hdfs(代码片段)

...习目标一、导入新课二、新课讲解(一)了解HDFSJavaAPI1、HDFS常见类与接口2、FileSystem的常用方法(二)编写Java程序访问HDFS1、创建Maven项目2、修改pom.xml文件,添加hadoop依赖3、在resources目录里创建log4j.properties... 查看详情

javaapi操作hdfs

使用idea工具创建的是maven项目,操作linux环境首先需要配置好Maven环境,如果下载jar包下的慢,可以将镜像站换为阿里云的镜像【配置maven环境参考:...............(待完成)】准备工作完成即可开始编写代码1.创建maven项目  2.... 查看详情

hdfs中javaapi的使用

...件、删除文件、读取文件内容等操作。下面记录一下使用JAVAAPI对HDFS中的文件进行操作的过程。  对分HDFS中的文件操作主要涉及一下几个类:  Configuration类:该类的对象封转了客户端或者服务器的配置。  FileSystem... 查看详情