Hdfs數據備份

Hdfs數據備份html

1、概述node

本文的hdfs數據備份是在兩個集羣之間進行的,若是使用snapshot在同一個集羣上作備份,若是datanode損壞或誤操做清空了數據,這樣的備份就沒法徹底保證數據安全性。因此選擇將hdfs裏面的數據備份到另外的地方進行存儲,選擇hadoop的分佈式複製工具distcp。將集羣的數據備份到一個製做備份使用的集羣,不要怕浪費資源,由於只是作備份使用,因此配置不要求過高,而且能夠只是用一個節點接收數據。日常的話此服務器能夠跑其餘的任務,只有在備份的時間週期內纔會有備份任務。至於備份任務的週期能夠本身根據實際狀況以及能夠接受丟失數據時間來肯定備份計劃任務,我這裏採用的是天天備份一次,儘可能選擇線上的hadoop集羣任務不繁忙的時候進行。由於咱們的數據量不是很大,須要備份的數據目錄也不是不少,因此就選擇爲天天備份一次。docker

 

2、備份以前首先要了解distcp的工做原理以及考慮同步數據的速度以及磁盤io、網絡帶寬等。apache

一、distcp介紹安全

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

如下摘自官網:服務器

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.網絡

   

二、使用方法tcp

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

 

三、計劃任務

腳本:

#!/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'
        }
    }
}
相關文章
相關標籤/搜索