一、HDFS 原理分析
HDFS 全称 Hadoop Distribute File System,是 Hadoop 的一个分布式文件系统
一、HDFS 的系统结构
1.1 数据块 —— block
- 文件在 HDFS 上分块存储。
- 一个文件分多少块,是按照你设置的存储单位大小算的。
- 设置存储单位时,不能太大,也不能太小。
- 太大:处理数据时,需要教高的配置。
- 太小:数据块的映射信息是存在 NameNode 的内存中(一个快占用 150 字节),内存也是受限的,如果块太小,会占用较多 namenode 的存储空间。
80M 文件,1M一个块,就会分成80块数据。占用 NameNode 内存 80 * 150 字节
80M 文件,64M一个块,分2块一块:64M,一块:16M(如果小于块大小,就按照实际存储)。占用 NameNode 内存 2 * 150 字节
总结如下:
- 数据块是 HDFS 中基本的数据存储单位,一般大小为64M/128M/256M,一个大文件根据数据块的大小,将文件分为若干个块。
- NameNode 存储的文件对应的 block 映射信息;而 datanode 存储块信息对应的数据。
- 块越小读取的速度就越快,但是整体占用 NameNode 的空间就越大,因为不管块大小一个块所占用的 NameNode 内存存储空间为一般为150字节。
- 一个大文件会被拆分成一个个的块,然后存储于不同的机器。对于大规模的集群会存储在不同的机架上,如果一个文件少于 Block 大小,那么实际占用的空间为其文件的大小。
- 数据块也是基本的读写单位,类似于磁盘的扇区,每次都是读写一个块。读写多个块就合成了一个文件。
- 为了容错,文件的所有数据块都会有副本,也就是说复制的是数据块而不是单独的一个文件被复制了,默认复制3份,可以在 hdft-site.xml 里进行配置。
- 副本的数据的存储规则:
- 若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。
- 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。
1.2 各组件介绍
NameNode:
- 是整个集群的中心,负责安排管理集群中数据的存储并记录存储文件的元数据和负责客户端对文件的访问。
- HA 模式下,一般有一个 active 状态的 NameNode,若干个 standby 状态的 NameNode,其中,active 状态的 NameNode 负责所有的客户端操作,standby 状态的 NameNode 处于从属地位,维护着数据状态,随时准备切换。
- 存储文件的元数据(metadata),主要包括整个文件系统的目录树、文件名与 blockid 的映射关系、blockid 在哪个 datanode 上等。
- 在运行时把所有的元数据都保存到 NameNode 机器的内存中,所以整个 HDFS 可存储的文件数受限于 NameNode 的内存大小。
- 一个 block 在 NameNode 中对应一条记录。
- NameNode 的元数据的镜像文件会保存到本地磁盘,但不保存 block 具体的位置信息,而是由 DataNode 注册和运行时进行上报维护。
- NameNode 完蛋了,那整个 HDFS 也就完蛋了,所以要采用冗余的方案来保证 NameNode 的高可用性。
DataNode:
- 保存 block 块对应的具体数据。
- 负责数据的读写和复制操作。
- DataNode 启动时会向 NameNode 报告当前存储的数据块信息,也会持续的报告数据块的修改信息。
- DataNode 之间会进行互相通信,来完成复制数据块的动作,以保证数据的冗余性。
- DataNode 启动时要在 NameNode 上注册,当 DataNode 改变时,也要通知 NameNode 。DataNode 会定期向 NameNode 发送心跳,告知 NameNode 该节点的 DataNode 是可用的。
JournalNode:
- 负责两个状态的 NameNode 进行数据同步,保持数据一致
ZKFC:
- 作用是 HA 自动切换。会将 NameNode 的 active 状态信息保存到 zookeeper。
二、数据的读取和写入过程
2.1 HDFS 的数据写入过程
- 客户端发起数据写入请求,告诉 NameNode 要写入的文件信息;
- NameNode 根据你的情况(client端所在位置、文件大小)分配给你分配写入数据的位置也就是写到那几个机器上;
- 客户端根据 NameNode 反馈的信息向 DataNode 写入数据;
- DataNode 之前感觉副本数复制数据;
- 复制完成之后,各数据节点向 NameNode 上报 block 信息;
- DataNode 通知客户端已完成;
2.2 HDFS 的数据读取过程
- 客户端发起读数据的请求;
- 告诉 NameNode 要读那个文件;
- NameNode 返回 block 信息列表(包括要读取的数据在那个机器上);
- 到指定的机器上读取具体的数据;
- DataNode 根据 block 信息找到数据的存储位置并返回数据给客户端;
- 客户端读完数据之后告诉 NameNode 已经读取完成;
三、HDFS 常用配置文件
3.1 hdfs-site.xml
name | value | description |
---|---|---|
dfs.datanode.data.dir | /data1/dfs,/data2/dfs,/data3/dfs,/data4/dfs,/data5/dfs,/data6/dfs | datanode本地文件存放地址 |
dfs.replication | 3 | 副本数 |
dfs.namenode.name.dir | /data1/dfsname,/data2/dfsname,/data3/dfsname | namenode本地文件存放地址 |
dfs.support.append | TRUE | 是否支持追加,但不支持并发线程往里追加 |
dfs.permissions.enabled | FALSE | 是否开启目录权限 |
dfs.nameservices | ns1 | 提供服务的NS逻辑名称,与core-site.xml里的对应,可以配置多个命名空间的名称,使用逗号分开即可。 |
dfs.ha.namenodes.[nameservice ID] | nn1,nn2 | 命名空间中所有NameNode的唯一标示名称。可以配置多个,使用逗号分隔。该名称是可以让DataNode知道每个集群的所有NameNode。 |
dfs.namenode.rpc-address.ns1.nn1 | nn1.hadoop:9000 | 指定NameNode的RPC位置 |
dfs.namenode.http-address.ns1.nn1 | nn1.hadoop:50070 | 指定NameNode的Web Server位置 |
dfs.namenode.rpc-address.ns1.nn2 | nn2.hadoop:9000 | 指定NameNode的RPC位置 |
dfs.namenode.http-address.ns1.nn2 | nn2.hadoop:50070 | 指定NameNode的Web Server位置 |
dfs.namenode.shared.edits.dir | qjournal://nn1.hadoop:8485;nn2.hadoop:8485/ns1 | 指定用于HA存放edits的共享存储,通常是namenode的所在机器 |
dfs.journalnode.edits.dir | /data/journaldata/ | journaldata服务存放文件的地址 |
fs.trash.interval | 2880 | 垃圾回收周期,单位分钟 |
dfs.blocksize | 134217728 | 块的大小 |
dfs.datanode.du.reserved | 2147483648 | 每个存储卷保留用作其他用途的磁盘大小 |
dfs.datanode.fsdataset.volume.choosing.policy | org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy | datanode数据副本存放的磁盘选择策略,、有2种方式一种是轮询方式 (org.apache.hadoop.hdfs.server.datanode.fsdataset.RoundRobinVolumeChoosingPolicy,为默认方式),另一种为选择可用空间足够多的磁盘存储方式 (org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy)。 |
dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold | 2147483648 | 当选择可用空间足够多的磁盘存储方式才生效,hdfs计算最大可用空间-最小可用空间的差值,如果差值小于此配置,则选择轮询方式存储 |
3.2 core-site.xml
name | value | description |
---|---|---|
io.native.lib.available | true | 开启本地库支持 |
fs.defaultFS | hdfs://ns1 | 客户端连接HDFS时,默认的路径前缀。默认文件服务的协议和NS(nameservices)逻辑名称,和hdfs-site里的对应此配置替代了1.0里的fs.default.name |
io.compression.codecs | org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec | 相应编码的操作类,用逗号分隔 |
ha.zookeeper.quorum | nn1.hadoop:2181,nn2.hadoop:2181,s1:2181 | HA使用的zookeeper地址 |
3.3 slaves
- slaves文件里面记录的是集群里所有DataNode的主机名
3.4 hadoop-env.sh
- HADOOP_CLASSPATH:hadoop的classpath
- JAVA_LIBRARY_PATH:java加载本地库的地址
- HADOOP_HEAPSIZE:java虚拟机使用的最大内存
- HADOOP_OPTS:hadoop启动公用参数
- HADOOP_NAMENODE_OPTS:namenode专用参数
- HADOOP_DATANODE_OPTS:datanode专用参数
- HADOOP_CLIENT_OPTS:hadoop client专用参数
一、HDFS 原理分析的更多相关文章
- HDFS原理分析之HA机制:avatarnode原理
一.问题描述 由于namenode 是HDFS的大脑,而这个大脑又是单点,如果大脑出现故障,则整个分布式存储系统就瘫痪了.HA(High Available)机制就是用来解决这样一个问题的.碰到这么个 ...
- Hadoop之HDFS原理及文件上传下载源码分析(上)
HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随 ...
- Hadoop之HDFS原理及文件上传下载源码分析(下)
上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...
- HDFS原理介绍
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Googl ...
- HDFS 原理、架构与特性介绍--转载
原文地址:http://www.uml.org.cn/sjjm/201309044.asp 本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前H ...
- Hadoop数据管理介绍及原理分析
Hadoop数据管理介绍及原理分析 最近2014大数据会议正如火如荼的进行着,Hadoop之父Doug Cutting也被邀参加,我有幸听了他的演讲并获得亲笔签名书一本,发现他竟然是左手写字,当然这个 ...
- HDFS 原理、架构与特性介绍
本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前HDFS架构详尽分析 HDFS架构 •NameNode •DataNode •Senc ...
- 1、Hbase原理分析
一.Hbase介绍 1.1.对Hbase的认识 HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随机读写操作,HBase正是为此而出现. HBase参考 Google 的 Bigtable ...
- Handler系列之原理分析
上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...
随机推荐
- MySQL为某字段加前缀、后缀
在开发过程中,可能会遇到加前缀或者后缀的情况.比如为视频添加路径时,如果手动加起来肯定慢,而且比较不符合程序员的特点,我们就应该能让程序跑就不会手动加. 使用UPDATE sql 语句:update ...
- 地点下来框的实现(php)
效果图: 样式(bootstrap): class="selectpicker show-tick form-control",就是多了个form-contro就行了 概念: 这里 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第八周作业
<Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函 ...
- 理解分布式一致性:Paxos协议之Multi-Paxos
理解分布式一致性:Paxos协议之Multi-Paxos Multi-Paxos without failures Multi-Paxos when phase 1 can be skipped Mu ...
- 对话Roadstar投资人:一家自动驾驶公司之死(三)
...
11. Roadstar 如何收场? 雷锋网:你觉得 Roadstar 造成今天这样的局面,是什么导致的? 投资人代表 1:刚才我们也数次表达了,在每个人身上,可能每个人的诉求,不能达到同步,与公司的 ...
- Highcharts的自适应DOM或者DIV,JS方法实现
那我们就按照官网的一分钟极速入门代码来说 // 图表配置 var options = { chart: { type: 'bar' //指定图表的类型,默认是折线图(line) }, title: { ...
- 覆盖equals 时总要覆盖hashCode(9)
2019独角兽企业重金招聘Python工程师标准>>> 1.在每个覆盖了equals 方法的类中,也必须覆盖hashCode 这是关于hashCode 的通用约定 这样可以与 基于散 ...
- Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
一.Tomcat体系结构 从conf/server.xml可体现Tomcat的体系.一个Server可有多个service,一个service可以有多个连接器connector,每个连接器暴露出不同的 ...
- 现代软件工程讲义 如何提出靠谱的项目建议 NABCD
互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代. 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了- 那么 ...
- 图论--差分约束--POJ 1364 King
Description Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen p ...