一. 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。