hadoop之HDFS

 

1. 场景:如何模拟实现分布式存储?

1.1 如何解决海量数据存的下问题?

传统方式:内存不够加内存,磁盘不够加磁 盘—单机纵向扩展。但是单机能够扩展的内存磁盘是有上限的,不能无限制下去。

分布式存储方式:横向扩展。所谓横向指的是采用多台机器存储,一台 不够就多台一起存储,不够就加机器。

理论上,可以横向无限制下去。因此海量数据如何存储的下的问题解决方式就是采 用多台机器存储—即分布式存储。

1.2 如何解决数据查询便捷问题

此可以借助于元数据记录来解决这 个问题。把文件和其存储的机器的位置信息记录下来, 这样就可以快速定位文件存储在哪一台机器上了。

1.3 如何解决大文件传输效率慢问题

通常的做法是分块存储:把大文件拆分成若干个小块(block 简写 blk),分别存储在不同机器上,并行操作提高效率。

此外分块存储还可以解决数据存储负载均衡问题。此时元数据记录信息也应该更加 详细:文件分了几块,分别位于哪些机器上。

1.4 如何解决数据丢失问题

采用副本机制。副本越多,数据越安全,当然冗余也会越多。

1.5 如何解决用户查询视角统一问题

传 统的文件系统拥有所谓的目录树结构,带有层次感的namespace(命名空间),因此可 以把分布式文件系统的元数据记录这一块也抽象成统一的目录树结构。

1.6 小结

通过上述场景式分析,可以得出要想实现一个分布式文件系统,是需要多方面综合 考虑的。通常来说一个分布式文件系统需要具备:分布式特性、分块存储、副本机制、 元数据记录、抽象目录树、统一namespace命名空间。

2.1 HDFS简介

HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目,它 的设计初衷是为了能够支持高吞吐和超大文件读写操作

HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大 数据集的应用程序,它非常适于存储大型数据 (比如 TB 和 PB)

HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统 一样使用分布式文件系统

2.2 HDFS设计目标

1. HDFS集群由很多的服务器组成,而每一个机器都与可能会出现故障。HDFS为了能够进行故障 检测、快速恢复等。

2. HDFS主要适合去做批量数据出来,相对于数据请求时的反应时间,HDFS更倾向于保障吞吐量。

3. 典型的HDFS中的文件大小是GB到TB,HDFS比较适合存储大文件

4. HDFS很多时候是以: Write-One-Read-Many来应用的,一旦在HDFS创建一个文件,写入 完后就不需要修改了

2.3 适合的应用场景

 存储非常大的文件:这里非常大指的是几百M、G、或者TB级别,需要高吞吐量,对延时没有 要求。

 基于流的数据访问方式: 即一次写入、多次读取,数据集经常从数据源生成或者拷贝一次,然 后在其上做很多分析工作 ,且不支持文件的随机修改。

 正因为如此,HDFS适合用来做大数据分析的底层存储服务,并不适合用来做网盘等应用,因 为,修改不方便,延迟大,网络开销大,成本太高。

 运行于商业硬件上: Hadoop不需要特别贵的机器,可运行于普通廉价机器,可以处节约成本

 需要高容错性  为数据存储提供所需的扩展能力

2.4不适合的应用场景

 低延时的数据访问 对延时要求在毫秒级别的应用,不适合采用HDFS。HDFS是为高吞吐数据 传输设计的,因此可能牺牲延时

 大量小文件的元数据保存在NameNode的内存中, 整个文件系统的文件数量会受限于 NameNode的内存大小。 经验而言,一个文件/目录/文件块一般占有150字节的元数据内存 空间。如果有100万个文件,每个文件占用1个文件块,则需要大约300M的内存。因此十亿级 别的文件数量在现有商用机器上难以支持

 多方读写,需要任意的文件修改 HDFS采用追加(append-only)的方式写入数据。不支持文 件任意offset的修改,HDFS适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等 应用,因为,修改不方便,延迟大,网络开销大,成本太高。

2.5 HDFS重要特性

2.5.1 主从架构

HDFS采用master/slave架构。一般一个HDFS集群是有一个Namenode和一定数目的 Datanode组成。Namenode是HDFS主节点,Datanode是HDFS从节点

2.5.2 分块机制

HDFS中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规 定,参数位于hdfs-default.xml中:dfs.blocksize。默认大小是128M(134217728);

2.5.3 副本机制

为了容错,文件的所有block都会有副本。每个文件的block大小(dfs.blocksize) 和副本系数(dfs.replication)都是可配置的。应用程序可以指定某个文件的副本数 目。

副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。 默认dfs.replication的值是3,也就是会额外再复制2份,连同本身总共3份副本。

2.5.4 NameSpace

HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这 些目录里。

Namenode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属 性的修改都将被Namenode记录下来。

HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如: hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

2.5.5 元数据管理

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

 文件自身属性信息 文件名称、权限,修改时间,文件大小,复制因子,数据块大小。

 文件块位置映射信息 记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上

2.5.6 数据块存储

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

3 HDFS操作_shell客户端

‘’

命令官网:https://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-common/FileSystemShell.html

3.1创建目录

mkdir命令

格式 : hdfs dfs [-p] -mkdir

作用 : 以中的URI作为参数,创建目录。使用-p参数可以递归创建目录
 

hdfs dfs -mkdir /dir1

hdfs dfs -mkdir /dir2

hdfs dfs -p -mkdir /aaa/bbb/ccc

 

3.2查看目录

3.3上传文件

put 时可以同时put多个文件。

3.4查看文件内容

3.5 下载HDFS文件

3.6 拷贝HDFS文件

3.7 追加HDFS文件

3.8 查看磁盘空间

3.9 查看HDFS文件空间

3.10 HDFS文件移动

3.11 修改文件副本

3.12 rm 命令

删除参数指定的文件和目录,参数可以有多个,删除目录需要加-r参数如果指定-skipTrash选项,

那么在回收站可用的情况下,该选项将跳过回收站而直接删除文件;否则,在回收站可用时,在 HDFS Shell 中执行此命令,会将文件暂时放到回收站中。

例如:hdfs dfs -rm /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv

4.HDFS 操作-- JAVA 客户端

4.1 创建文件夹

4.2 上传文件

4.3 下载文件

5. HDFS 数据存储和数据管理

5.1 HDFS 客户端

5.1.1 Shell Command

5.1.2 Java API

5.1.3 C API libhdfs

5.1.4 RESTful 客户端--webHDFS

https://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

5.1.5 RESTful 代理服务--HttpFS

6. HDFS 存储与压缩

对于hadoop,大数据业务来说,通常处理的最多的文件还是文本文件。

6.1 行式存储,列式存储

行式存储:有利于插入,不利于查询

列式存储:有利于查询,不利于插入。

对于大数据业务系统来说,大部分用于数据分析,所以列式存储要比行式存储使用的多。

6.2常见的文件存储方式

6.2.1 Text file

6.2.2 Sequence file

6.2.3 Avro file

6.2.4 RC file

6.2.5 ORC file

6.2.6 Parquet file

6.2.7 新一代存储方式  Apache Arrow

6.3 文件压缩

6.3.1 压缩算法指标

6.3.2 支持的压缩算法

6.3.3 各种压缩对比:

6.3.4 总结

7 HDFS异构存储

7.1 异构存储介质

7.2 块存储类型策略

7.3 案例

7.4 内存存储策略 lazy persist 

7.4.1 lazy persist 概述

7.4.2 lazy persist 使用

7.4.3 案例

8 数据迁移 

8.1 数据迁移概述

8.2 分布式拷贝工具 DistCp

9 HDFS namenode 安全模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值