共计 2905 个字符,预计需要花费 8 分钟才能阅读完成。
一. HDFS 数据迁徙解决方案
数据迁徙指的是一种大规模量级的数据转移,转移的过程中往往会跨机房、跨集群,数据迁徙规模的不同会导致整个数据迁徙的周期也不尽相同。
在 HDFS 中,同样有许多须要数据迁徙的场景,比方冷热数据集群之间的数据转化,或者 HDFS 数据的双机房备份等等。因为波及跨机房、跨集群,所以数据迁徙不会是一个简略的操作。
1. 数据迁徙应用场景
- 冷热集群数据同步、分类存储
- 集群数据整体搬迁
当公司的业务迅速的倒退, 导致以后的服务器数量资源呈现长期缓和的时候, 为了更高效的利用资源, 会将原 A 机房数据整体迁徙到 B 机房的, 起因可能是 B 机房机器多, 而且 B 机房自身开销较 A 机房成本低些等; -
数据的准实时同步
数据准实时同步的目标在于 数据的双备份可用 , 比方某天 A 集群忽然宣告不容许再应用了, 此时 能够将线上应用集群间接切向 B 的同步集群, 因为 B 集群实时同步 A 集群数据, 领有完全一致的实在数据和元数据信息, 所以对于业务方应用而言是不会受到任何影响的。2. 数据迁徙因素考量
- Bandwidth- 带宽
带宽用的多了, 会影响到线上业务的工作运行, 带宽用的少了又会导致数据同步过慢的问题。 - Performance- 性能
是采纳简略的单机程序? 还是多线程的性能更佳的分布式程序? - Data-Increment- 增量同步
当 TB,PB 级别的数据须要同步的时候, 如果每次以全量的形式去同步数据, 后果肯定是十分蹩脚。如果 仅针对变动的增量数据进行同步将会是不错的抉择。能够配合 HDFS 快照等技术实现增量数据同步。 -
Syncable- 数据迁徙的同步性
数据迁徙的过程中须要保障周期内数据是肯定可能同步完的, 不能差距太大. 比方 A 集群 7 天内的增量数据, 我只有花半天就能够齐全同步到 B 集群, 而后我又能够等到下周再次进行同步. 最可怕的事件在于 A 集群的 7 天内的数据, 我的程序花了 7 天还同步不完, 而后下一个周期又来了, 这样就无奈做到准实时的一致性. 其实 7 天还是一个比拟大的工夫, 最好是能达到按天同步
数据在指定周期内还没有同步完, 下一个周期就开始了, 这样就无奈做到准实时的一致性3. HDFS 分布式拷贝工具:DistCp
1. DistCp 介绍:
DistCp 是 Apache Hadoop 中的一种风行工具,在 hadoop-tools 工程下,作为独立子工程存在。其定位就是 用于数据迁徙的,定期在集群之间和集群外部备份数据 。(在备份过程中,每次运行 DistCp 都称为一个备份周期。)只管 性能绝对较慢 ,但它的遍及水平曾经越来越高。
DistCp 底层 应用 MapReduce 在群集之间或并行在同一群集内复制文件。执行复制的 MapReduce 只有 mapper 阶段。它波及两个步骤:- 构建要复制的文件列表(称为复制列表)
- 运行 MapReduce 作业以复制文件,并以复制列表为输出。
2. DistCp 劣势个性
- 带宽限流
DistCp 能够通过命令参数 bandwidth 来为程序进行带宽限流。避免拷贝数据占用大量带宽导致集群性能降落 -
增量数据同步
在 DistCp 中能够通过 update、append 和 diff 这 3 个参数实现增量同步参数 性能 Update 只拷贝不存在的文件或者目录 Append 追加写指标门路下已存在的文件 Diff 通过快照的 Diff 比照信息来同步源门路与指标门路 Update 解决了新增文件、目录的同步。
Append 解决己存在文件的增量更新同步。
Diff 解决删除或重命名类型文件的同步。 -
高效的性能: 分布式个性
DistCp 底层应用 MapReduce 执行数据同步,MapReduce 自身是一类分布式程序。3. DistCp 命令
$ hadoop distcp usage: distcp OPTIONS [source_path...] <target_path> -append // 拷贝文件时反对对现有文件进行追加写操作 -async // 异步执行 distcp 拷贝工作 -bandwidth <arg> // 对每个 Map 工作的带宽限速 -delete // 删除绝对于源端, 指标端多进去的文件 -diff <arg> // 通过快照 diff 信息进行数据的同步 -overwrite // 以笼罩的形式进行拷贝,如果指标端文件曾经存在,则间接笼罩 -p <arg> // 拷贝数据时, 扩大属性信息的保留,包含权限信息、块大小信息等等 -skipcrccheck // 拷贝数据时是否跳过 cheacksum 的校验 -update // 拷贝数据时, 只拷贝绝对于源端,指标端不存在的文件数据
命令:
hadoop distcp hdfs://nnl:8020/foo/a hdfs://nn2:8020/bar/foo
下面的命令示意从 nnl 集群拷贝/foo/a 门路下的数据到 nn2 集群的/bar/foo 门路下。
二. HDFS NAMENODE 平安模式
1. 平安模式概述
Hadoop 中的 平安模式 safe mode 是 NameNode 的保护状态 ,在此状态下 NameNode 不容许对文件系统进行任何更改,能够承受读数据申请。
在 NameNode 启动过程中,首先会从 fsimage 和 edits 日志文件加载文件系统状态。而后,期待 DataNodes 汇报可用的 block 信息。在此期间,NameNode 放弃在平安模式。随着 DataNode 的 block 汇报继续进行,当整个零碎达到平安规范时,HDFS 主动来到平安模式 。在 NameNode Web 主页上会显示平安模式是关上还是敞开。
如果 HDFS 处于平安模式下,不容许 HDFS 客户端进行任何批改文件的操作, 包含上传文件,删除文件,重命名,创立文件夹, 批改正本数等操作。
2. 平安模式主动进入来到
1. 主动进入工夫
DFS 集群启动时,当 NameNode 启动胜利之后,此时集群就会主动进入平安模式
2. 主动来到条件
平安模式相干的配置属性参数都在 hdfs-default.xml 中定义,如果须要笼罩任何值,请在 hdfs-site.xml 文件中从新笼罩定义
- dfs.replication
hdfs block 的正本数据,默认 3 - dfs.replication.max
最大块正本数,默认 512 - dfs.namenode.replication.min
最小块正本数,默认 1 - dfs.namenode.safemode.threshold-pct
已汇报可用数据块数量占整体块数量的百分比阈值。默认 0.999f。
小于或等于 0,则示意退出平安模式之前,不要期待特定百分比的块。大于 1 的值将使平安模式永恒失效。 - dfs.namenode.safemode.min.datanodes
指在退出平安模式之前必须存活的 DataNode 数量,默认 0 -
dfs.namenode.safemode.extension
达到阈值条件后继续扩大的工夫。倒计时完结如果仍然满足阈值条件,主动来到平安模式。默认 30000 毫秒3. 平安模式的手动进入来到
1. 手动获取平安模式的状态信息
hdfs dfsadmin -safemode get
2. 手动进入平安模式
hdfs dfsadmin -safemode enter
动进入平安模式 对于集群保护或者降级的时候十分有用,因为这时候 HDFS 上的数据是只读的。
3. 手动来到平安模式
hdfs dfsadmin -safemode leave