辛星笔记之Hadoop权威指南第五篇HDFS基本概念

每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位。构建于单个磁盘上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的数倍。文件系统一般为几千字节,而磁盘块一般为512字节。

HDFS同样也有块的概念,但是它大得多,默认为64MB。与单一磁盘上的文件系统相似,HDFS的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。但是HDFS中小于一个块大小的文件不会占据整个块的空间。

HDFS的块比磁盘块大,它的目的是为了最小化寻址开销。如果块设置的足够大,那么从磁盘传输数据的时间可以明显大于定位这个块开始位置所需的时间。这样,传输一个由多个块组成的文件的时间取决于磁盘传输速率。随着新一代磁盘驱动器传输速率的提升,块的大小将会被设置的更大。但是该参数也不会设置的过大,MapReduce中的map任务通常一次处理一个块中的数据,因此如果任务数太少(少于集群中的节点数量),作业的运行速度就会比较慢。

对分布式文件系统中的块进行抽象会带来很多好处,如下:

(1)一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上,因此它们可以利用集群上的任意一个磁盘进行存储。事实上,尽管不常见,但是对于整个HDFS集群而言,也可以仅存储一个文件,该文件中的块占满集群中所有的磁盘。

(2)使用块抽象而不是整个文件作为存储单元,大大简化了存储子系统的设计。简化是所有系统的目标,但是这对于故障种类繁多的分布式系统来说尤其重要。将存储子系统控制单元设置为块,可以简化存储管理,由于块的大小是固定的,因此计算单个磁盘能存储多少个块就相对容易。同时也消除了对元数据的顾虑,因为块只是存储数据的一部分,而文件的元数据,比如全县信息,并不需要与块一同存储,这样一来,其他系统就可以单独地管理这些元数据。

而且块非常适合用于数据备份进而提供数据容错能力和可用性。将每个块复制到少数几个独立的机器上(默认为3个),可以确保在发生块、磁盘或者机器故障后数据不丢失。如果发现一个块不可用,系统会从其他地方读取另一个复本,而这个过程对用户是透明的。一个因为损坏或者机器故障而丢失的块可以从其他候选地点复制到另一台可以正常运行的机器上,以保证复本的数量回到正常水平。

我们可以使用HDFS中的fsck指令来显示块信息,比如hadoop  fsck   /   -files  -blocks

HDFS集群有两类节点,并且以管理者-工作者模式运行,即一个namenode(管理者)和多个datanode(工作者).而namenode管理文件系统中的命名空间,它维护者文件系统树以及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但是它并不永久保存块的位置信息,因为这些信息会在启动时由数据节点创建。

客户端代表用户通过与namenode和datanode交互来访问整个文件系统,客户端提供一个类似于POSIX(可移植操作系统界面)的文件系统接口,因此用户在编程时无需知道namenode和datanode也可以实现其功能。

datanode是文件系统的工作节点,它们根据需要存储并且检索数据块(受客户端或者namenode调度),并且定期向namenode发送它们所存储的块的列表。

没有namenode,文件系统将无法使用。事实上,如果运行namenode服务的机器毁坏,文件系统上所有的文件将会丢失,因为我们不知道如何根据datanode的块来重建文件。

对namenode的容错非常重要,Hadoop为此提供了两种机制:

(1)第一种机制是备份那些组成文件系统元数据持久状态的文件。Hadoop可以通过配置使得namenode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,是原子操作。一般的配置是,我们将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS).

(2)另一种可行的方法是运行一个辅助namenode,但是它不能被用作namenode。这个辅助namenode的重要作用是定期通过编辑日志合并并且命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存来执行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。但是辅助namenode保存的状态总是滞后于主节点,所以在主节点全部失效后,难免会丢失部分数据。这种情况下,一般把存储在NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行。

时间: 2024-12-03 06:13:54

辛星笔记之Hadoop权威指南第五篇HDFS基本概念的相关文章

辛星笔记之Hadoop权威指南第四篇HDFS简介

当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并且存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统被称为分布式文件系统(distributed  filesystem). 分布式文件系统架构于网络智商,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更加复杂,比如文件系统能够容忍节点故障但是不丢失数据就是一个很大的挑战. HDFS的全称是Hadoop  Distributed  Filesystem,在非正式文档或者旧文档以及配置文件中,有

辛星笔记之Hadoop权威指南第三篇combiner

集群上的可用宽带限制了MapReduce作业的数量,因此最重要的一点是尽量避免map任务和reduce任务之间的数据传输.Hadoop允许用户针对map任务的输出指定一个合并函数,有时候我们也称作combiner,它就像mapper和reducer一样. 合并函数的输出作为reduce函数的输入,由于合并函数是一个优化方案,所以Hadoop无法确定针对map任务输出中任一条记录需要调用多少次合并函数.不管我们调用多少次合并函数,reducer的输出结果都应该一致.合并函数的规则限定了可以使用的函

辛星笔记之Hadoop权威指南第一篇即MapReduce

MapReduce是一种可用于数据处理的编程模型,该模型比较简单,但用于编写有用的程序并不简单.Hadoop可以运行由各种语言编写的MapReduce程序.MapReduce程序本质上是并行运行的,因此可以将大规模的数据分析任务交给任何一个拥有足够多机器的运营商.MapReduce的优势在于处理大规模数据集. MapReduce任务过程被分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键/值对作为输入或者输出,并且由程序员选择它们的类型.程序员还需要具体定义两个函数:map函数和re

hadoop学习笔记(七)——hadoop权威指南中天气数据运行

1) hdfs文件系统准备工作 a) # hadoop fs –ls /user/root #查看hdfs文件系统 b) # hadoop fs -rm /user/root/output02/part-r-00000 c) 删除文档,删除文件夹 d) # hadoop fs -rm –r /user/root/output02 e) # hadoop fs –mkdir –p input/ncdc f) 解压缩输入文件,hadoop无法识别.zip或者.rar g) # hadoop fs -

《Hadoop权威指南》笔记 第一章&第二章

? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用MapReduce ? ? ? ? ? ? ? ? import java.io.IOException; // 是hadoop针对流处理优化的类型 import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; // 会继承这个基类 import org.apache

Hadoop权威指南读书笔记

本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,运行于大型商业集群. HDFS:分布式文件系统,运行于大型商用机集群. Pig:一种数据流语言和运行环境,用以检索非常大的数据集.Pig运行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS

Hadoop权威指南学习笔记二

MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 上一篇介绍了什么是Hadoop.Hadoop的作用等.本篇相同基于Hadoop权威指南,结合迪伦的Hadoop的视频教程对MapReduce做一个介绍. 1. MapReduce是Hadoop的核心之中的一个.MapReduce分为两个部分,Mapper和Ruducer模块.简单

《Hadoop权威指南》读书笔记

<Hadoop权威指南>读书笔记 Day1 第一章 1.MapReduce适合一次写入.多次读取数据的应用,关系型数据库则更适合持续更新的数据集. 2.MapReduce是一种线性的可伸缩编程模型. 3.高性能计算HPC和网格计算比较适合用于计算密集型的作业,但如果几点需要访问的数据量更庞大,很多节点就会因为网络带宽的瓶颈问题不得不闲下等数据.(HPC和网格计算的数据存储与SAN中,数据存储比较集中,数据访问一般通过网络) 4.MapReduce尽量在计算节点上存储数据,以实现数据的本地化快速

《Hadoop权威指南》笔记 第一章&第二章 MapReduce初探

? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用MapReduce ? ? ? ? ? ? ? ? import java.io.IOException; // 是hadoop针对流处理优化的类型 import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; // 会继承这个基类 import org.apache