Hadoop—HDFS

  • 0. Hadoop概述
  • 1. 企业存储系统
  • 1.1 硬盘
  • 1.2 存储架构
  • 1.2.1 DAS存储架构
  • 1.2.2 NAS网络接入存储
  • 1.2.3 SAN 存储区域网络存储
  • 1.2.4 对比图
  • 1.3 文件系统
  • 1.3.1 介绍
  • 1.3.2 重要概念
  • 1.3.3 文件系统分类
  • 1.4 面临海量数据存储的问题
  • 2. 分布式文件HDFS
  • 2.1 HDFS简介
  • 2.2 HDFS适用场景
  • 2.3 HDFS重要特性
  • 2.3.1 主从架构
  • 2.3.2 分块存储机
  • 2.3.3 副本机制
  • 2.3.4 命名空间(namespace)
  • 2.3.5 元数据管理
  • 2.3.6 数据块存储
  • 2.3.7 负载均衡机制
  • 2.3.8 HDFS心跳机制
  • 3. HDFS Shell 操作
  • 3.1 知识准备
  • 3.2 基础知识
  • 3.2.1 创建目录(mkdir)
  • 3.2.2 查看HDFS中的目录(ls)
  • 3.2.3 上传文件(put & moveFromLocal)
  • 3.2.4 查看文件(cat & head & tail)
  • 3.2.5 下载文件(get)
  • 3.2.6 拷贝文件(cp)
  • 3.2.7 追加数据到文件(appendToFile)
  • 3.2.8 查看使用空间(df & du)
  • 3.2.9 移动文件(mv)
  • 3.2.10 修改文件副本数(setrep)
  • 3.2.11 常见命令
  • 3.2.12 更多命令
  • 4. Hadoop常见文件存储格式
  • 4.1 传统系统常见文件存储格式
  • 4.2 Hadoop文件格式需求
  • 4.3 Hadoop文件存储格式
  • 4.3.1 存储形式
  • 4.3.2 存储文件格式
  • 4.3.2.1 Text File
  • 4.3.2.2 Sequence File
  • 4.3.2.3 Avro File
  • 4.3.2.4 RCFile
  • 4.3.2.5 ORC File
  • 4.3.2.6 Parquet File
  • 4.4 文件压缩
  • 4.4.1 文件压缩算法优劣指标
  • 4.4.2 Hadoop支持的压缩格式
  • 4.4.3 选择那种压缩方式


0. Hadoop概述

Hadoop核心:

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root

1. 企业存储系统

随着互联网的推动和发展,越来越多的企业开始进行数字化转型,将传统的业务流程进行数字化改造。在进行数字化的过程中,需要数据来支撑企业的业务流程重塑,并以客户、产品为核心,以数据来支撑精细化运营。而数据分散在不同的系统中,要更充分的利用数据,需要将企业的大量数据集中存储,并进行业务化处理。此时,我们要想办法来解决大规模数据存储的问题。不管是使用哪种存储技术,都需要有存储硬件的支持。

1.1 硬盘

  1. SATA硬盘
  2. SATA SSD固态硬盘
  3. RAID磁盘阵列
    RAID可以将多块独立的硬盘组织在一起,可以将多块硬盘连接在一起,并在性能上、容错上有一定提升。

1.2 存储架构

详细了解点这里

1.2.1 DAS存储架构

DAS存储架构也称为直连式存储(Direct-Attached Storage),很多中小型的企业,存储系统会直接和服务器进行连接。因为DAS是通过服务器直接连接存储的,比较依赖操作系统来进行IO操作。

1.2.2 NAS网络接入存储

NAS也称为网络接入存储(Network-Attached Storage),是将各种存储设备通过网络地方式连接在一起,因为NAS存储是通过网络连接的,所以并不依赖某一种类的操作系统,所以不管是Windows、MacOS、Linux、Unix都是可以使用NAS的。

1.2.3 SAN 存储区域网络存储

SAN(Storage Area Network)是一种高速的、专门用于存储操作的网络,通常独立于计算机局域网(LAN)。
SAN将主机和存储设备连接在一起,能够为其上的任意一台主机和任意一台存储设备提供专用的通信通道。
SAN将存储设备从服务器中独立出来,实现了服务器层次上的存储资源共享。

1.2.4 对比图

大数据将hdfs的权限赋值给root 大数据之hdfs_big data_02

1.3 文件系统

1.3.1 介绍

  1. 是一种存储和组织数据的方法,它使得对文件访问和查找变得容易
  2. 使用文件和树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数 据底层存在硬盘哪里,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,只需要记住这个文件的所属目录和文件名。
  3. 文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。
  4. 文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。

1.3.2 重要概念

  1. 文件名
  2. 元数据(metadata)
    又称之为解释性数据,记录数据的数据文件系统。元数据一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息

1.3.3 文件系统分类

  1. 基于磁盘的文件系统:
    是在非易失介质上(磁盘、光盘)存储文档的经典方式。用以在多次会话之间保持文件的内容。
  2. 虚拟文件系统:
    在内核中生成的文件系统,比如proc。
    proc文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。
  3. 网络文件系统:
    网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制。
    允许本地计算机访问另一台计算机上的数据,对此类文件系统中文件的操作都通过网络连接进行。

1.4 面临海量数据存储的问题

  1. 性能低
    单节点I/O性能瓶颈无法逾越,难以支撑海量数据的高并发高吞吐场景。
  2. 可扩展性差
    无法实现快速部署和弹性扩展,动态扩容、缩容成本高,技术实现难度大。
  3. 成本高
    传统存储硬件通用性差,设备投资加上后期维护、升级扩容的成本非常高。

2. 分布式文件HDFS

通常来说一个分布式文件系统需要具备:分布式特性、分块存储、副本机制、元数据记录、抽象目录树、统一命名空间。
分布式文件系统(Distributed FileSystem)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。

2.1 HDFS简介

  1. HDFS是一个使用java实现,能够在普通硬件上运行的分布式文件系统,它是高横跨在多台计算机上的存储系统度容错的,即高度容错。
  2. HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统。
  3. HDFS为海量数据提供了高容错性、高可扩展性、高吞吐率!

2.2 HDFS适用场景

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_03

2.3 HDFS重要特性

2.3.1 主从架构

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

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_04

  1. Namenode
    Namenode 是集群的管理者,管理整个文件系统的命名空间,如果损坏则整个HDFS数据无法访问
    Namenode 维护整个文件系统树内所有文件和目录的元数据,这些信息以镜像文件和编辑日志文件的形式永久保存在本地磁盘上
  2. Datanode
    Datanode上存储文件的块数据(Block)
    每个块会在本地文件系统产生两个文件,一个是实际的数据文件,另一个是块的附加信息文件,其中包括数据的校验和,生成时间
    Datanode 通过心跳(Heartbeat)机制与 Namenode通讯
    客户端读取/写入数据的时候直接与Datanode通信

2.3.2 分块存储机

HDFS中的文件在物理上是分块存储(block)的,数据块是磁盘进行数据读写的最小单位,一般是512byte的整数倍,

块的大小可以通过配置参数来规定,参数位于hdfs-default.xml中:dfs.blocksize。默认大小是128M

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_05


数据快抽象的好处:

  1. 文件的大小可以大于网络中任意一个磁盘的容量
  2. 简化存储子系统,以块为单位计算存储容量
  3. 提供容错能力

2.3.3 副本机制

文件的所有block都会有副本。每个文件的block大小(dfs.blocksize)和副本系数(dfs.replication)都是可配置的。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。默认dfs.replication的值是3,也就是会额外再复制2份,连同本身总共3份副本。

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_06


三副本放置策略(BlockPlacementPolicyDefault)

写请求方所在机器是其中一个Datanode,则第一份副本直接存放在本地,否则随机在集群中选择一个Datanode,第二个副本存放于不同第一个副本的所在的机架,第三个副本存放于第二个副本所在的机架,但是属于不同的节点。

其余的副本在遵循以下限制的前提下随机放置,一个节点最多放置一个副本,如果副本数少于两倍机架数,同一机架不能放置超过两个副本。

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_07

2.3.4 命名空间(namespace)

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

2.3.5 元数据管理

在HDFS中,Namenode管理的元数据具有两种类型:

  1. 文件自身属性信息
    文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
  2. 文件块位置映射信息
    记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

2.3.6 数据块存储

文件的各个block的具体存储管理由DataNode节点承担。每一个block都可以在多个DataNode上存储。

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_08

2.3.7 负载均衡机制

将存储占比大的Datanode节点上的数据移动到存储占比小的Datanode节点上,从而使每一个Datanode存储的数据占比相当。
Namenode会定期检查集群的负载,如果发现集群中Datanode节点的负载不平衡,则自动启动负载均衡。
手动平衡:表示节点最大占用率与节点的最小的占用率之间的差值当超过10%时(不会立刻进行负载均衡,而在集群不忙的时候进行)start-balancer.sh -t 10%

2.3.8 HDFS心跳机制

Datenode以固定周期向Namenode发送心跳,如果在一段时间内Namenode没有收到心跳,就会标记Datenode为宕机。

计算公式:

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_09

3. HDFS Shell 操作

首先得了解一下Hadoop端口号:借AHincsdn博主的文章 查看所有配置的文档请点击这

大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_10

3.1 知识准备

hadoop dfs、hdfs dfs、 hadoop fs 三者区别

hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),不过已经Deprecated

hdfs dfs 只能操作HDFS文件系统相关(包括与Local FS间的操作),常用

hadoop fs 可操作任意文件系统,不仅仅是hdfs文件系统,使用范围更广

HDFS Shell CLI支持操作多种文件系统,包括本地文件系统(file:///)、分布式文件系统(hdfs://namenode:9000)等
操作的是什么文件系统取决于URL中的前缀协议。如果没有指定前缀,则将会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统.

  1. hdfs dfs -ls file:/// #操作本地文件系统
  2. 大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_11

  3. hdfs dfs -ls hdfs://node1:9000/ #操作HDFS分布式文件系统
  4. 大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_12

  5. hdfs dfs -ls / #直接根目录,没有指定协议 将加载读取fs.defaultFS值
  6. 大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_13


  7. 大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_14

3.2 基础知识

3.2.1 创建目录(mkdir)

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_15

3.2.2 查看HDFS中的目录(ls)

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_16

3.2.3 上传文件(put & moveFromLocal)

大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_17


大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_18

3.2.4 查看文件(cat & head & tail)

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_19


大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_20


大数据将hdfs的权限赋值给root 大数据之hdfs_big data_21

3.2.5 下载文件(get)

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_22


大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_23

3.2.6 拷贝文件(cp)

大数据将hdfs的权限赋值给root 大数据之hdfs_big data_24

3.2.7 追加数据到文件(appendToFile)

大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_25

3.2.8 查看使用空间(df & du)

大数据将hdfs的权限赋值给root 大数据之hdfs_big data_26


大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_27

3.2.9 移动文件(mv)

大数据将hdfs的权限赋值给root 大数据之hdfs_big data_28

3.2.10 修改文件副本数(setrep)

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_29

3.2.11 常见命令

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_30


大数据将hdfs的权限赋值给root 大数据之hdfs_big data_31


大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_32

3.2.12 更多命令

想了解全部命令,可以查询官网。 官网链接

4. Hadoop常见文件存储格式

4.1 传统系统常见文件存储格式

常见的文件格式有很多种,例如:JPEG文件用来存储图片、MP3文件用来存储音乐、DOC文件用来存储WORD文档。

4.2 Hadoop文件格式需求

我们在开发大数据中,选择合适的文件格式可能会带来一些明显的好处:

  1. 可以保证写入的速度
  2. 可以保证读取的速度
  3. 文件是可被切分的
  4. 对压缩支持友好
  5. 支持schema的更改

4.3 Hadoop文件存储格式

4.3.1 存储形式

大数据将hdfs的权限赋值给root 大数据之hdfs_big data_33


行式存储、列式存储优缺点

  1. 行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。行适合插入、不适合查询。
  2. 列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。列适合查询,不适合插入。

4.3.2 存储文件格式

4.3.2.1 Text File

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_34

4.3.2.2 Sequence File

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_35


大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_36

4.3.2.3 Avro File

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_37


大数据将hdfs的权限赋值给root 大数据之hdfs_big data_38

4.3.2.4 RCFile

大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_39


大数据将hdfs的权限赋值给root 大数据之hdfs_大数据_40

4.3.2.5 ORC File

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_41


大数据将hdfs的权限赋值给root 大数据之hdfs_big data_42

4.3.2.6 Parquet File

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_43


大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_44


大数据将hdfs的权限赋值给root 大数据之hdfs_大数据将hdfs的权限赋值给root_45

4.4 文件压缩

4.4.1 文件压缩算法优劣指标

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_46

4.4.2 Hadoop支持的压缩格式

大数据将hdfs的权限赋值给root 大数据之hdfs_hadoop_47


大数据将hdfs的权限赋值给root 大数据之hdfs_big data_48


大数据将hdfs的权限赋值给root 大数据之hdfs_HDFS_49

4.4.3 选择那种压缩方式

  1. 压缩的合理使用可以提高HDFS存储效率
  2. 压缩解压缩意味着CPU、内存需要参与编码解码
  3. 选择压缩算法时不能一味追求某一指标极致。综合考虑性价比较高的。
  4. 文件的压缩解压需要程序或者工具的参与来对数据进行处理。大数据相关处理软件都支持直接设置。