国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 一篇文章徹底掌握 HDFS 跨集群跨版本數據同步工具 Hadoop Distcp

一篇文章徹底掌握 HDFS 跨集群跨版本數據同步工具 Hadoop Distcp

2021-11-12 22:24明哥的IT隨筆IT明哥 編程技術

最近有小伙伴問到 hadoop distcp 的使用,對其中的一些細節和容易踩的坑不是很清楚,所以今天我們來看下 hadoop distcp 的原理,細節和容易踩的坑。

一篇文章徹底掌握 HDFS 跨集群跨版本數據同步工具 Hadoop Distcp

大家好,我是明哥!

最近有小伙伴問到 hadoop distcp 的使用,對其中的一些細節和容易踩的坑不是很清楚,所以今天我們來看下 hadoop distcp 的原理,細節和容易踩的坑。

1.DistCp 概述

我們知道大數據集群內部都有節點級別和機架級別的容錯機制(存儲層對應的就是傳統的三副本或糾刪碼機制),但對于一些數據安全性要求更改的場景,比如在金融行業典型的兩地三中心場景下,經常有跨區域跨集群災備的需求,此時就會涉及到跨集群的數據同步。

DistCp (distributed copy) 就是一款跨集群的數據同步工具

DistCp 可以用來做 hdfs 集群內部或集群之間的大規模的數據同步,由于在底層使用了 MapReduce 框架會通過多個 mapper 來拷貝需要拷貝的文件列表,其性能相比 hdfs dfs -get/put 等通過本地文件系統中轉的數據同步方案,要高效快速很多。

同時由于 DistCp 可以跨 hdfs 大版本進行數據同步,且新版本的 DistCp(distcp version 2) 相比老版本的DistCp(legacy DistCp,version 1.2.1)在很多方面都做了優化和改進,所以大規模的數據同步,不論是集群內部還是集群之間,首選的方案都是DistCp。

很多商業的hdfs數據同步方案,其底層都是原生的 DistCp,比如 cdh 的 bdr 工具,比如 tdh 的 backup工具,其原理都是如此。

2.關于集群間數據同步

  • 集群間數據同步,可以從原集群推送數據到目標集群,此時會為會占用原集群 yarn 中的資源;
  • 集群間數據同步,也可以從目標集群發起作業,主動拉取原集群的數據,此時消耗的是目標集群的YARN資源;
  • 如果原集群是生產集群,一般在目標集群執行命令hadoop distcp來發起作業,通過拉的方式來同步數據,此時不會消耗原集群即生產集群的YARN資源;
  • 當原集群和目標集群大版本不同時,(比如在 hadoop 1.x 跟 hadoop 2.x 之間同步數據),需要使用 webhdfs 協議,即通過以下格式指定遠端集群:webhdfs://:;(當然,既可以從原集群推數據,也可以從目標集群拉數據);
  • 當原集群和目標集群大版本相同時,(比如都是 hadoop 2.x或都是hadoop 3.x),推薦使用 hdfs 協議,此時性能比 webhdfs 更好;
  • 如果 webhdfs 配置了 SSL 加密,則需要使用協議 “swebhdfs://” ;

3.關于開啟了 kerberos 安全認證后的數據同步

  • 如果原集群和目標集群都啟用了kerberos認證 (hadoop.security.authentication=kerberos),需要首先做 kerberos 的 realm 互信,然后才能通過推或拉的方式執行 dictcp 進行數據同步;
  • 如果原集群與目標集群一個啟用了kerberos認證,另一個沒有啟用kerberos認證,為簡單起見,可以在啟用了kerberos認證的集群中執行distCp,通過推或拉的方式進行數據同步;

4.DistCp 的底層工作機制

新版 DistCp 底層有以下組件,其各自的職責如下:

  • DistCp Driver:負責解析 DistCp 的命令行參數,并編排協調具體的拷貝任務(首先調用 copy-listing-generator 獲得需拷貝的文件列表,然后配置并提交 Map-Reduce 拷貝任務,最后根據配置項返回 MR 任務句柄并推出,或等待 MR任務執行結束;)
  • Copy-listing generator:負責解析給定的 source-paths(目錄或文件,可以包含通配符),生成待拷貝的文件/目錄列表,并輸出到一個 SequenceFile;
  • Input-formats 和 Map-Reduce:負責讀取 Copy-listing generator 生成的 SequenceFile 中的待烤包的文件列表,并執行實際的文件拷貝;

5.DistCp 的重要參數講解

DistCp 提供了多種參數,來控制拷貝任務的各種細節,經常使用到的關鍵參數有 -update, -delete, -overwrite, -m, -bandwidth,-diff,-p,-i 等:

  • -m :控制 map 任務的最大個數;(實際的 map 任務數,不會大于待拷貝的文件的個數;更多的 map 數不一定會提升整體IO吞吐);
  • -bandwidth:控制每個 map 任務可用的最大帶寬,單位 MB;
  • -p[rbugpcaxt]:控制是否保留源文件的屬性,rbugpcaxt 分別指:replication number, block size, user, group, permission,checksum-type, acl, xattr,以及 tiemstamp;
  • skipcrccheck:控制檢查源和目標文件差異以生成待拷貝文件列表時,是否跳過 CRC 校驗;
  • update: 如果源和目標目錄下的文件,在 文件大小/塊大小/checksum 上有不同,就用;
  • -update: 拷貝目標目錄下不存在而源目錄下存在的文件,或目標目錄下和源目錄在文件大小/塊大小/checksum 上不同的文件;
  • -overwrite: 覆蓋目標目錄下的同名文件。(如果某個 map 任務執行失敗且沒有指定 -i 參數,則所有的待拷貝的文件,包括拷貝失敗的文件,都會被重新拷貝);
  • -i: 忽略拷貝過程中某些 MAP 任務的錯誤,繼續執行其余的 map拷貝任務,而不是直接失敗整個作業;(默認情況下,如果有某個 map 任務失敗的次數達到了 mapreduce.map.maxattempts,則未完成的 map 任務都會被 kill;);
  • -delete: 刪除目標目錄下存在,但源目錄下不存在的文件;該參數只能和 -update 或 -overwrite 配合使用;
  • -diff 和 -rdiff:控制是否結合使用快照機制,會基于兩個快照的差異(snapshot diff)來確定待拷貝的文件列表,以下要點需要注意:
    • -diff 和 -rdiff,需要配合選項 -update 一起使用;
    • -diff 和 -rdiff,不能和 -delete 一起使用,否則會報錯:java.lang.IllegalArgumentException: -delete and -diff/-rdiff are mutually exclusive. The -delete option will be ignored;
    • 該命令的前提條件:需要源目錄下有指定的兩個快照 from_snapshot 和 to_snapshot;
    • 該命令的前提條件:需要目標目錄下有快照 from_snapshot;
    • 該命令的前提條件:需要目標目錄在前期制作了 from_snapshot 快照后,沒有新的文件寫操作 (create, rename, delete);
    • 該命令執行完畢后,目標目錄下并不會自動創建快照 to_snapshot,如果后續還需要基于快照來做增量同步,需要手工在同步完畢后對目標目錄制作快照 to_snapshot,為后續基于快照的同步(hadoop distcp -diff -update)做好準備;

6.易踩的坑 - skipcrccheck

  • 參數 -skipcrccheck 的意思是 “Whether to skip CRC checks between source and target paths.”,即是否跳過原路徑和目標路徑下文件的 crc 校驗(CRC:Cyclic Redundancy Check)。
  • 如果指定了該參數,會跳過crc校驗,同步作業速度會快些;
  • 但指定該參數后,由于不校驗 crc,而是通過文件名和文件大小來發現哪些文件需要進行同步,在極端情況下,可能會漏掉某些需要同步的小文件,比如某些只有少數幾條記錄的小文件,從而造成數據不一致;
  • 下圖展示的就是,某兩個 hive orc 表都只有1條記錄,對應的 HDFS 文件也比較小且都是 299 BYTE, 指定參數 skipcrccheck 執行同步操作時,就遺漏了該文件,造成了源目錄與目標目錄數據的不一致:“sudo -u hdfs hadoop distcp -update -delete -skipcrccheck -pugpb hdfs://nameservice1/user/hive/warehouse/hs_liming.db/test_single_row_scp hdfs://nameservice1/user/hive/warehouse/hs_liming.db/test_single_row_scp2“:

一篇文章徹底掌握 HDFS 跨集群跨版本數據同步工具 Hadoop Distcp

skipcrccheck 的坑-hdfs

一篇文章徹底掌握 HDFS 跨集群跨版本數據同步工具 Hadoop Distcp

skipcrccheck 的坑-hive sql

7.關于 hive 的跨集群數據同步

  • 關于 hive的跨集群數據同步,hive 社區在推動 hive replication 的方案,但因為該方案的各種前提和限制,目前該方案在業界采用的比較少;
  • 市面上采用的較多的hive的跨集群數據同步,是對hive的元數據和數據分別進行數據同步;
  • 對于 hive 數據的同步,本質上就是對于底層 hdfs 數據的同步,可以采用上述hdfs的distcp方案;
  • 對于hive元數據的同步,本質上就是對底層 metastore db,如 mysql/posggresql 等rdbms中的數據的同步,可以采用成熟的 mysqldump 和 source方案。

8.常用命令總結

  • 執行數據同步操作時,需要停止對目標目錄的其它寫操作;
  • 當沒有對原目錄的寫操作時(即停止了對源目錄的寫操作),可以使用以下命令來跨集群同步數據:hadoop distcp -delete -update -pugpb -m 10 -bandwidth 5 hdfs://xx.xx/ hdfs://yy.yy/
  • 當有對原目錄的寫操作時(即有對原目錄的并發寫操作),需要結合快照機制來同步數據:hadoop distcp -diff -update -pugpb
  • 結合快照機制來同步數據時,有以下前提要求:
    • 需要源目錄下有指定的兩個快照 from_snapshot 和 to_snapshot;
    • 需要目標目錄下有快照 from_snapshot;
    • 需要目標目錄在前期制作了 from_snapshot 快照后,沒有新的文件寫操作如 create/rename/delete (即要求目標目錄的當前狀態跟原目錄的from-snapshot一致);
    • 該命令執行完畢后,目標目錄下并不會自動創建快照 to_snapshot,如果后續還需要基于快照來做增量同步,需要手工在同步完畢后對目標目錄制作快照 to_snapshot,為后續基于快照的同步(hadoop distcp -diff -update)做好準

原文鏈接:https://mp.weixin.qq.com/s/3zbde3HASjm31awrRsYLyA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲毛片a | 日韩一二区视频 | 国产高清一 | 精品久久久久久久久久久久久久 | 久久久女女女女999久久 | 国产精品99| 日韩性精品| 久久久久国产精品 | 宅男lu666噜噜噜在线观看 | 国产二区视频 | www伊人| 亚洲一区二区三区视频 | 精品一区二区av | 每日更新亚洲 | a v黄色| 久久精品久久久 | 欧美a网 | 国产精品精品久久久 | 99re免费视频精品全部 | 成年人在线看 | 91精品国产乱码久久久久久 | 一区中文字幕 | 亚洲国产精品久久人人爱 | 精品在线一区二区三区 | 日日操天天爽 | 欧美黑人性暴力猛交喷水黑人巨大 | 国产欧美在线观看 | av免费网站在线观看 | 91偷拍精品一区二区三区 | 成人午夜 | 国产欧美精品一区二区三区 | 精品蜜桃一区二区三区 | 午夜精品视频在线观看 | 黄色av免费观看 | 精品亚洲一区二区 | 免费看一区二区三区 | 成人精品国产免费网站 | 91九色在线 | 91午夜精品 | 毛片免费观看视频 | 国产精品极品美女在线观看免费 |