目录
一、HDFS概述
数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。
是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
容错。即使系统中有某些节点宕机,整体来说系统仍然可以持续运作而不会有数据损失【通过副本机制实现】。
分布式文件管理系统很多,hdfs只是其中一种,不合适小文件。
二、hdfs 体系结构

1、Namenode
NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
文件包括:
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件,namenode启动后一些新增元信息日志。
fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中。
hdfs-site.xml的dfs.namenode.name.dir属性
2、secondary namenode的工作流程
1)secondary通知namenode切换edits文件
2)secondary从namenode获得fsimage和edits(通过http)
3)secondary将fsimage载入内存,然后开始合并edits
4)secondary将新的fsimage发回给namenode
5)namenode用新的fsimage替换旧的fsimage


3、DATANode
提供真实文件数据的存储服务。
文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。2.0以后HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block. hdfs-site.xml中dfs.blocksize属性
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
Replication。多复本。默认是三个。
hdfs-site.xml的dfs.replication属性
三、hdfs java调用
FileSysterm
fileSysterm是使用java代码操作hdfs的api接口
文件操作
create 写文件
open 读取文件
delete 删除文件
目录操作
mkdirs 创建目录
delete 删除文件或目录
listStatus 列出目录的内容
getFileStatus 显示文件系统的目录和文件的元数据信息
getFileBlockLocations 显示文件存储位置
package com.shujia.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
import java.net.URI;
public class HdfsAPI {
FileSystem fs;
//1.获取hdfs文件管理系统 file system
@Before
public void main() throws Exception {
//获取配置文件
Configuration configuration = new Configuration();
//手动更改配置信息
configuration.set("dfs.replication", "1");
//获取连接地址
URI uri = new URI("hdfs://master:9000");
//获取hdfs文件管理对象
fs = FileSystem.get(uri, configuration);
}
@Test

本文深入探讨HDFS,包括其概述、体系结构、NameNode、Secondary NameNode、DataNode的角色,以及文件读写流程。还讨论了HDFS的Java API使用、RPC调用、数据回收站机制、高可用性和联邦特性,最后分析了常见的HDFS问题及解决方案。
最低0.47元/天 解锁文章
899

被折叠的 条评论
为什么被折叠?



