一. 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 distcpusage: 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