1. 程式人生 > >Hadoop distcp 跨叢集遷移資料

Hadoop distcp 跨叢集遷移資料

hadoop中有一個叫做distcp(分散式複製)的有用程式,能從hadoop的檔案系統並行複製大量資料。

distcp一般用於在兩個HDFS叢集中傳輸資料。如果叢集在hadoop的同一版本上執行,就適合使用hdfs方案:

   % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar 
這將從第一個叢集中複製/foo目錄(和它的內容)到第二個叢集中的/bar目錄下,所以第二個叢集會有/bar/foo目錄結構。如果/bar不存在,則會新建一個。可以指定多個源路徑,並且所有的都會被複制到目標路徑。源路徑必須是絕對路徑。

預設情況下,distcp會跳過目標路徑已經有的檔案,但可以通過提供的-overwrite選項進行覆蓋,也可以用-update選項來選擇只更新那些修改過的檔案。

第一個叢集的子樹/foo下的一個檔案與第二個叢集的改變進行同步。

% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo 
distcp是作為一個MapReduce作業執行的,複製工作由叢集中並行執行的map來完成。這裡沒有reducer。每個檔案都由一個單一的map進行復制,並且distcp通過將檔案分成大致相等的檔案來為每個map數量大致相同的資料。

map的數量確定:

通過讓每一個map複製數量合理的資料以最小化任務建立所涉及的開銷,是一個很好的想法,所以每個map的副本至少為256MB。例如,1GB的檔案被分成4個map任務。如果資料很大,為限制頻寬和叢集的使用而限制對映的資料就變得很有必要。map預設的最大數量是每個叢集節點(tasktracker)有20個。例如,複製1000GB的檔案到一個100個節點的叢集,會分配2000個map(每個節點20個map),所以平均每個會複製512MB。通過對distcp指定-m引數,會減少對映的分配數量。例如,-m 1000會分配1000個map,平均每個複製1GB。

如果想在兩個執行著不同版本HDFS的叢集上利用distcp,使用hdfs協議是會失敗的,因為RPC系統是不相容的。想要彌補這種情況,可以使用基於HTTP的HFTP檔案系統從源中進行讀取。這個作業必須執行在目標叢集上,使得HDFS RPC版本是相容的。使用HFTP重複前面的例子:% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar 

注意,需要在URI源中指定名稱節點的Web埠。這是由dfs.http.address的屬性決定的,預設值為50070。

保持HDFS叢集的平衡

向HDFS複製資料時,考慮叢集的平衡相當重要。檔案塊在叢集中均勻地分佈時,HDFS能達到最佳工作狀態。回顧前面1000 GB資料的例子,通過指定-m選項為1,即由一個單一的map執行復制工作,它的意思是,不考慮速度變慢和未充分利用叢集資源,每個塊的第一個副本會儲存在執行map的節點上(直到磁碟被填滿)。第二和第三個副本分散在叢集中,但這一個節點並不會平衡。通過讓map的數量多於叢集中節點的數量,我們便可避免這個問題。鑑於此,最好首先就用預設的每個節點20個map這個預設設定來執行distcp。

然而,這也並不總能阻止一個叢集變得不平衡。也許想限制map的數量以便一些節點可以被其他作業使用。若是這樣,可以使用balancer工具繼續改善叢集中塊的分佈。

自:http://blog.163.com/[email protected]/blog/static/25966032201142712856862/

相關推薦

Hadoop distcp 叢集遷移資料

hadoop中有一個叫做distcp(分散式複製)的有用程式,能從hadoop的檔案系統並行複製大量資料。 distcp一般用於在兩個HDFS叢集中傳輸資料。如果叢集在hadoop的同一版本上執行,就適合使用hdfs方案:    % hadoop distcp hdfs://namenode1/foo hd

HBase 叢集遷移資料-Snapshot 實現

   HBase資料遷移方案有很多種,但今天我們來通過Snapshot方式來實現HBase的資料遷移(即將A叢集HBase的資料遷移到B叢集),廢話不多說,直接進去主題吧:       參考文獻:https://www.cnbl

Kylin實踐(三)--叢集資料遷移

Kylin跨叢集元資料遷移第一步:在待遷移叢集上備份元資料,命令如下:$KYLIN_HOME/bin/metastore.sh backup看到如下提示時即為備份成功:metadata store backed up to /opt/kylin/apache-kylin-2.

hadoop distcp 同步叢集資料

命令1:hadoop distcp -update -delete -p hdfs://Smaster:9000//newexchange  hdfs://Sslave0:9000/newexchange 命令2:hadoop distcp -update -delete

HBase叢集複製資料的另一種方法

2012-08-14 http://abloz.com date:2012.8.14 上一篇文章《hbase 複製備份資料》 中提到用工具CopyTable來在叢集間複製資料。另外還有一種更暴力的方式,來共享HBase備份表。

AWS Dynamodb 區域遷移資料方案(cross-region replication)

最近實在受不了中國訪問AWS首爾區域了 ,決定把整個環境遷移到新加坡,伺服器遷移倒是比較簡單,但資料庫遷移遇到很大的麻煩。 原以為DynamoDB 全域性表可以很容解決跨區域資料同步的問題,結果發現DynamoDB全域性表只能在為空表的前提下使用,即必須是新建的表。而不能說 用到中途

elasticsearch索引備份恢復、叢集遷移

參考連結: https://www.elastic.co/guide/en/elasticsearch/guide/current/backing-up-your-cluster.html# 坑或者是注意事項 indices屬於某種node.box_type,恢復索引的目

使用EMR Spark Relational Cache叢集同步資料

Relational Cache相關文章連結: 使用Relational Cache加速EMR Spark資料分析

把kafka資料從hbase遷移到hdfs,並按天載入到hive表(hbase與hadoop為不同叢集)

需求:由於我們用的阿里雲Hbase,按儲存收費,現在需要把kafka的資料直接同步到自己搭建的hadoop叢集上,(kafka和hadoop叢集在同一個區域網),然後對接到hive表中去,表按每天做分割槽 一、首先檢視kafka最小偏移量(offset) /usr/local/kafka/bin/k

hadoop叢集資料遷移工具

背景     當前比較流行的hdfs間資料遷移工具有hadoop預設提供的distcp,阿里開源的DataX,這些工具能夠滿足常規的大部分需求,但是當時碰到hadoop版本不一致、keberos授權等場景時就行不通了。針對這些特殊的應用場景和實際需求我就構思並實現了Hd

hadoop叢集資料遷移

1、兩個叢集版本不同的 hadoop distcp hftp://192.168.X.X:50070/tmp/test.txt /tmp 2、兩個叢集版本相同的 hadoop distcp hdfs://192.168.X.X:8020/tmp/test.txt /tm

elasticsearch叢集資料遷移

寫這篇文章,主要是目前公司要把ES從2.4.1升級到最新版本7.8,不過現在是7.9了,官方的文件:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 由於從2.4.1跨很大基本的升級,所以不能平滑的升級了,只能

叢集資料拷貝和Hadoop存檔對於小檔案處理

scp實現兩個遠端主機之間的檔案複製 scp -r hello.txt [email protected]:/user/atguigu/hello.txt // 推 push scp -r [email protected]:/user/atguigu

資料入門(14)hadoop+yarn+zookeeper叢集搭建

1、右鍵clone虛擬機器,進入圖形介面,修改虛擬機器ip即可,相關環境變數配置都存在 2、叢集規劃:(必須設定主機名,配置主機名和ip的對映關係,每個檔案都需要配置對映關係)     主機名       &

資料Hadoop學習(環境配置)——Hadoop偽分散式叢集搭建

title: Hadoop偽分散式叢集搭建 date: 2018-11-14 15:17:20 tags: Hadoop categories: 大資料 點選檢視我的部落格: Josonlee’s Blog 文章目錄 前言準備 偽分

資料之五 hadoop HDFS HA叢集客戶端+eclipse配置

首先我們選擇一臺客戶機,任意選擇,只要能與叢集通訊即可,這裡就使用真機 將叢集中配置好的 hadoop 安裝包拷貝到真機上 配置 hadoop 的環境變數 HADOOP_HOME:hadoop安裝包的位置 HADOOP_USER_NAME:登入叢集的使用者名稱稱,只要是可以登入叢集的使用者名稱就可以,這裡配

叢集資料遷移報錯

[[email protected] ~]$ hadoop distcp -update /user/hive/warehouse/cslc.db/ hdfs://172.26.xx.xx:8020/user/hive/warehouse/cslc.db/18/12/24 10:27:06 ERRO

如何在不停機的情況下,完成百萬級資料遷移

技術團隊面臨的困難總是相似的:在業務發展到一定的時候,他們總是不得不重新設計資料模型,以此來支援更加複雜的功能。在生產環境中,這可能意味著要遷移幾百萬條活躍的資料,以及重構數以千行計的程式碼。 Stripe的使用者希望我們提供的API要具備可用性和一致性。這意味著在做遷移時,我們必須非常小心:儲存

資料平臺Hadoop的分散式叢集環境搭建,官網推薦

1 概述 本文章介紹大資料平臺Hadoop的分散式環境搭建、以下為Hadoop節點的部署圖,將NameNode部署在master1,SecondaryNameNode部署在master2,slave1、slave2、slave3中分別部署一個DataNode節點 NN

如何在不停機的情況下,完成百萬級資料遷移

技術團隊面臨的困難總是相似的:在業務發展到一定的時候,他們總是不得不重新設計資料模型,以此來支援更加複雜的功能。在生產環境中,這可能意味著要遷移幾百萬條活躍的資料,以及重構數以千行計的程式碼。 Stripe的使用者希望我們提供的API要具備可用性和一致性。這意味著在做遷