MHuiG

「看庭前花开花落,望天上云卷云舒」

HDFS

# 大数据处理技术 - HDFS 入门介绍

## HDFS 介绍

`HDFS` 是 `Hadoop Distribute File System` 的简称，意为：`Hadoop` 分布式文件系统。是 `Hadoop` 核心组件之一，作为最底层的分布式存储服务而存在。
分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景，它们为存储和处理超大规模数据提供所需的扩展能力。

## HDFS 的特性

首先，它是一个文件系统，用于存储文件，通过统一的命名空间目录树来定位文件；

其次，它是分布式的，由很多服务器联合起来实现其功能，集群中的服务器有各自的角色。

### master/slave 架构

`HDFS` 采用 `master/slave` 架构。一般一个 `HDFS` 集群是有一个 `Namenode` 和一定数目的 `Datanode` 组成。`Namenode` 是 `HDFS` 集群主节点，`Datanode` 是 `HDFS` 集群从节点，两种角色各司其职，共同协调完成分布式的文件存储服务。

### 分块存储

`HDFS` 中的文件在物理上是分块存储（`block`）的，块的大小可以通过配置参数来规定，默认大小在 hadoop2.x 版本中是 `128M`。

### 名字空间（NameSpace）

`HDFS` 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录，然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似：用户可以创建、删除、移动或重命名文件。
`Namenode` 负责维护文件系统的名字空间，任何对文件系统名字空间或属性的修改都将被 `Namenode` 记录下来。
`HDFS` 会给客户端提供一个统一的抽象目录树，客户端通过路径来访问文件，形如：

`hdfs://namenode:port/dir-a/dir-b/dir-c/file.data`。

### Namenode 元数据管理

我们把目录结构及文件分块位置信息叫做元数据。`Namenode` 负责维护整个 `hdfs` 文件系统的目录树结构，以及每一个文件所对应的 `block` 块信息（`block` 的 `id`，及所在的 `datanode` 服务器）。

元数据信息：描述数据的数据
第一个问题：如果有一堆书，如何快速查找到我需要的时平凡的世界 书本的分类，书本的编号，书本所在的书架，书本的位置，如果记录了这些信息，就可以快速找到对应的书本
这些信息，描述了我们需要的书本在哪里，确定了这些描述信息，就可以唯一定位到这本书
如何区分关羽与王熙凤：性别，外观样貌信息（丹凤眼） 长头发，短头发，都是通过一些描述信息，来区分每一个人的
如何设计一个文件系统：
第一个：盘符
第二个：文件名
第三个：文件的类型
第四个：文件大小
第五个：创建时间修改时间
第六个：所属权限
第七个：文件的路径
这些数据都是用于描述一个文件或者文件夹，只要有了这些描述信息，那么我们就能定位到一个唯一的文件或者文件夹
这些都是一些描述数据，叫做我们的元数据信息
元数据信息：文件名称，文件路径，文件的大小，文件的权限
每一个文件或者每一个文件夹都会产生一份元数据信息
只要抓住了元数据信息，就抓住了磁盘上面存储的所有的文件或者文件夹

### Datanode 数据存储

文件的各个 `block` 的具体存储管理由 `datanode` 节点承担。每一个 block 都可以在多个 `datanode` 上。`Datanode` 需要定时向 `Namenode` 汇报自己持有的 block 信息。 存储多个副本（副本数量也可以通过参数设置 `dfs.replication`，默认是 `3`）。

### 副本机制

为了容错，文件的所有 `block` 都会有副本。每个文件的 `block` 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定，也可以在之后改变。

### 一次写入，多次读出

`HDFS` 是设计成适应一次写入，多次读出的场景，且不支持文件的修改。
正因为如此，`HDFS` 适合用来做大数据分析的底层存储服务，并不适合用来做网盘等应用，因为，修改不方便，延迟大，网络开销大，成本太高。

## 分布式文件系统详细介绍

在 `hadoop` 当中，分布式文件系统 `HDFS`，对文件系统有一个抽象，`HDFS` 属于当中的一个实现类，也就是说分布式文件系统类似于一个接口，定义了标准，下面有很多的实现类
其中 `HDFS` 是一个子实现类而已，但是现在很多人都只知道一种就是 `HDFS` 的实现，并没有了解过其他的实现类
其实分布式文件系统的实现有很多种，具体详细参见《hadoop 权威指南第三版》第 `59` 页

我们重点突出讲解 HDFS 这种文件系统

## HDFS 分布式文件系统设计目标

- 1、 硬件错误 由于集群很多时候由数量众多的廉价机组成，使得硬件错误成为常态（磁盘损坏 屌丝机）
- 2、 数据流访问 所有应用以流的方式访问数据，设置之初便是为了用于批量的处理数据，而不是低延时的实时交互处理
- 3、 大数据集 典型的 HDFS 集群上面的一个文件是以 G 或者 T 数量级的，支持一个集群当中的文件数量达到千万数量级
- 4、 简单的相关模型 假定文件是一次写入，多次读取的操作（假设 不会频繁写）
- 5、 移动计算比移动数据便宜 一个应用请求的计算，离它操作的数据越近，就越高效（代码到数据）
- 6、 多种软硬件的可移植性

## HDFS 的来源

`HDFS` 起源于 `Google` 的 `GFS` 论文（`GFS`，`Mapreduce`，`BigTable` 为 google 的旧的三驾马车）发表于 2003 年 10 月
`HDFS` 是 `GFS` 的克隆版 `Hadoop Distributed File system`
易于扩展的分布式文件系统，运行在大量普通廉价机器上，提供容错机制为大量用户提供性能不错的文件存取服务.

大数据处理技术-Hadoop集群初体验

Hadoop 集群初体验 大数据处理技术 - Hadoop 集群初体验 HDFS 使用体验从 Linux 本地上传一个文本文件到 hdfs 的 /test/input 目录下递归的创建文...

大数据处理技术-HDFS的命令行使用

HDFS 命令行 大数据处理技术 - HDFS 的命令行使用 hdfs 常用的操作命令查看根路径下面的文件或者文件夹 hdfs dfs -ls / 查看 test 路径下面的文件或者文...

留言区

Notes
Hadoop
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are you Robot?</pjax>