Hdfs数据备份

一、概述

本文的hdfs数据备份是在两个集群之间进行的,如果使用snapshot在同一个集群上做备份,如果datanode损坏或误操作清空了数据,这样的备份就无法完全保证数据安全性。所以选择将hdfs里面的数据备份到另外的地方进行存储,选择hadoop的分布式复制工具distcp。将集群的数据备份到一个制作备份使用的集群,不要怕浪费资源,因为只是做备份使用,所以配置不要求太高,并且可以只是用一个节点接收数据。平常的话此服务器可以跑其他的任务,只有在备份的时间周期内才会有备份任务。至于备份任务的周期可以自己根据实际情况以及可以接受丢失数据时间来确定备份计划任务,我这里采用的是每天备份一次,尽量选择线上的hadoop集群任务不繁忙的时候进行。因为我们的数据量不是很大,需要备份的数据目录也不是很多,所以就选择为每天备份一次。

 

二、备份之前首先要了解distcp的工作原理以及考虑同步数据的速度以及磁盘io、网络带宽等。

1、distcp介绍

http://hadoop.apache.org/docs/r1.2.1/distcp.html

以下摘自官网:

DistCp (distributed copy) is a tool used for large inter/intra-cluster copying. It uses MapReduce to effect its distribution, error handling and recovery, and reporting. It expands a list of files and directories into input to map tasks, each of which will copy a partition of the files specified in the source list. Its MapReduce pedigree has endowed it with some quirks in both its semantics and execution. The purpose of this document is to offer guidance for common tasks and to elucidate its model.

   

2、使用方法

1)相同版本

#hadoop  distcp  -p  -skipcrccheck  -update –m 10 \

  hdfs://spark:9000/data/metastore/userlogs \

  hdfs://backup:9000/data/userlogs \

参数解释:

-p:带权限复制

-skipcrccheck: 跳过hdfs检查

-update: 比较两边文件的大小,如果不一样就更新,相同就不操作。如果不是追加数据,而是修改的数据,并且数据大小没有变,那就要结合-overwrite-delete来使用

 

2)如果版本不相同,则可以使用只读的HftpFileSystem,需要在目标集群上执行:

#hadoop  distcp  -p  -skipcrccheck  -update –m 10 \

  hftp://spark:50090/data/metastore/userlogs \

  hdfs://backup:9000/data/userlogs \

 hftp的端口是在hdfs-site.xml:

 <property>

      <name>dfs.namenode.http-address</name>

      <value>spark:50090</value>

    </property>

OPTIONS:

-p[rbugp]              Preserve status

r: replication number

b: block size

u: user

g: group

p: permission

-p alone is equivalent to -prbugp

-i                     Ignore failures

-log <logdir>          Write logs to <logdir>

-m <num_maps>          Maximum number of simultaneous copies

-overwrite             Overwrite destination

-update                Overwrite if src size different from dst size

-f <urilist_uri>       Use list at <urilist_uri> as src list

-filelimit <n>         Limit the total number of files to be <= n

-sizelimit <n>         Limit the total size to be <= n bytes

-delete                Delete the files existing in the dst but not in src

3、计划任务

脚本:

#!/bin/bash
# copy spark:/data/metastore/userlogs to docker:/data/userlogs
/data/hadoop-2.7.3/bin/hadoop distcp -skipcrccheck -update -m 10 hdfs://spark:9000/data/metastore/userlogs hdfs://backup:9000/data/userlogs

#-m 是指启动10个map任务执行,每个map任务默认256m,如果设定为10,则每个map是总数据量/10
#使用update是因为历史数据没有修改,如果修改则可以加上overwrite.

使用jenkins的pipline执行计划任务

pipeline {
agent {label 'spark' }
stages {
stage('userlogs') {
steps {
dir('/data/scripts'){
sh 'sh userlogs.sh' }
}
}
}
post {
failure {
emailext subject: '$DEFAULT_SUBJECT',
body: '$DEFAULT_CONTENT',
recipientProviders: [
[$class: 'CulpritsRecipientProvider'],
[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']
],
replyTo: '$DEFAULT_REPLYTO',
to: '93048029849203@qq.com'
}
}
}

Hdfs数据备份的更多相关文章

  1. 基于HBase的手机数据备份系统 .

    基于HBase实现的手机数据备份系统,实现了手机关键信息的备份,如短信.联系人等. 包括服务器端(Server)和客户端(Client) Server运行环境:Hadoop+HBase+Tomcat ...

  2. HBase数据备份及恢复(导入导出)的常用方法

    一.说明 随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业(数据)资产.备份Hbase时的难点是其待备份的数据集可能非 ...

  3. hbase数据备份或者容灾方案

    HBase的数据备份或者容灾方案有这几种:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分别介绍(以下描述的内容均是基于0.94.20版本 ...

  4. Hbase数据备份&&容灾方案

    Hbase数据备份&&容灾方案 标签(空格分隔): Hbase 一.Distcp 在使用distcp命令copy hdfs文件的方式实现备份时,需要禁用备份表确保copy时该表没有数据 ...

  5. 数据备份的OSS接口

    最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...

  6. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  7. redis主从复制 从而 数据备份和读写分离

    蜗牛Redis系列文章目录http://www.cnblogs.com/tdws/tag/NoSql/ 爬虫转载注明地址本文地址—博客园蜗牛 http://www.cnblogs.com/tdws/p ...

  8. MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  9. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

随机推荐

  1. Oracle SQL Trace 和 10046 事件

    http://blog.csdn.net/tianlesoftware/article/details/5857023 一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRAC ...

  2. Eclipse ADT 代码注释模版

    具体怎么用: 将下面的内容拷贝出来保存为XML文件,进入,Eclipse :Window --> Java --> Code Style --> Code Templates-> ...

  3. Angular6 学习笔记——组件详解之模板语法

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  4. vs2017使用rdlc

    写在前面:因为公司要求做个批量打印工具,以前用Delphi+FastReport开发的,现在因为公司就剩下一个Delphi开发工程师了,还外出,所以这是就落在我身上.因为这个打印工具不需要使用人员设计 ...

  5. UWP开发---DIY星级评分控件

    一,需求来源 在开发韩剧TV UWP过程中,遇到了星级评分的控件问题,在安卓和html中很容易用现有的轮子实现星级评分,搜索了一下目前UWP还未有相关文章,在WPF的一篇文章中使用Photo shop ...

  6. Android 导入 aar 库文件

    1. 在需要导入 aar 的 module 目录下创建一个名叫 "aars" 的目录,并把 aar 文件复制到这里. 2. 在项目的 build.gradle 文件里添加 allp ...

  7. python 简单搭建阻塞式单进程,多进程,多线程服务

    由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 :  --> 点击这里 我们可以通过这样子的方式去理解apache的工作原理 1 单进程TCP服 ...

  8. Python 将一个列表里面的元素拼接成一个字符串

    item1 = ["lowman", "isbusy"] item2 = ",".join(item1) # 根据实际需要使用相应的分隔符连 ...

  9. webpack快速入门——实战技巧:开发和生产并行设置

    package.json中,devDependencies和dependencies是不同的 devDependencies:开发依赖 dependencies:生产依赖(线上) 1.安装生产环境的依 ...

  10. ansible 的第一次亲密接触

    如何添加一台机器 编辑 /etc/ansible/hosts 添加本机的 public ssh key 到目标机器的 authorized_keys 添加本机的 私钥 到 ansible 运行 ans ...