CentOS環境下HDFS數據遷移的常見方法及實踐指南
在CentOS系統中,HDFS數據遷移需根據場景(集群內/跨集群、全量/增量、本地/遠程)選擇合適工具,以下是具體方法及操作要點:
DistCp(Distributed Copy)是Hadoop原生分布式拷貝工具,基于MapReduce實現,支持跨集群、增量同步,適用于大規模數據遷移。
核心操作步驟:
hdfs dfs -du -h /source_path
查看)、新老集群間帶寬,制定分批次遷移計劃(如按業務目錄拆分);hadoop distcp [options] source_path target_path
格式,例如將源集群/data
目錄遷移至目標集群/destination
目錄:hadoop distcp hdfs://source-namenode:8020/data hdfs://destination-namenode:8020/destination
;-p
:保留文件屬性(權限、時間戳、所有者等);-update
:僅復制源集群中修改過的文件(增量同步);-overwrite
:覆蓋目標集群中已存在的同名文件;hdfs dfs -ls
檢查目標路徑文件數量,使用hdfs fsck /target_path -files -blocks -locations
驗證數據塊完整性。Rsync是Linux系統自帶的增量同步工具,適合小規模數據或需要頻繁同步的場景,支持本地目錄間、本地與遠程主機間同步。
常用命令示例:
src/
目錄內容同步至dest/
(不包含src
本身):rsync -av src/ dest/
;src/
目錄同步至遠程主機(IP:172.16.22.12)的dest/
目錄:rsync -av src/ 172.16.22.12:/data/test/dest/
(需輸入遠程主機root密碼);-z
參數壓縮傳輸,--delete
參數刪除目標目錄中源目錄不存在的文件(保持嚴格一致):rsync -avz --delete src/ 172.16.22.12:/data/test/dest/
。針對Hive表中的結構化數據,可通過導出到本地/臨時HDFS、再導入目標集群的方式實現。
操作流程:
INSERT OVERWRITE LOCAL DIRECTORY "/tmp/hive_export" ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM table_name;
;/tmp/hive_export
目錄上傳至目標HDFS:hadoop fs -put /tmp/hive_export /target_hdfs_path/
;LOAD DATA INPATH '/target_hdfs_path/hive_export' OVERWRITE INTO TABLE table_name;
。Sqoop用于在關系型數據庫(MySQL、Oracle等)與HDFS之間遷移結構化數據,適用于從數據庫導入數據至HDFS或反向導出。
安裝與配置:
sudo yum install sqoop
安裝Sqoop;sqoop-site.xml
配置文件,添加源數據庫(如MySQL)和目標HDFS的連接信息(URL、用戶名、密碼等);db_name.table_name
表數據導入目標HDFS的/target_path
目錄:sqoop import --connect jdbc:mysql://source_host:3306/db_name --username your_username --password your_password --table table_name --target-dir hdfs:///target_path --verbose;
。HDFS自帶的fs
命令可用于日常文件上傳、下載、移動及本地備份,適合小規模數據操作。
常用命令:
hadoop fs -put local_file_path hdfs_destination_path
,例如將本地/home/user/file.txt
上傳至HDFS的/input
目錄;hadoop fs -mv hdfs_source_path hdfs_destination_path
,例如將/input/file.txt
移動至/output
目錄;hadoop fs -get hdfs_source_path local_destination_path
,例如將HDFS的/output/file.txt
下載至本地/home/user/
;tar
命令打包HDFS數據(需先下載至本地),例如:hadoop fs -get /hdfs_path /local_backup/ && tar -czvf hdfs_backup.tar.gz /local_backup/hdfs_path
。hdfs dfs -cp
復制到本地或其他存儲),避免數據丟失;-p
參數保留文件權限,或遷移后手動調整目標集群文件權限(hadoop fs -chmod
);-bandwidth
參數),減少對線上業務影響;hdfs dfs -count
核對文件數量,hdfs fsck
檢查數據完整性,必要時抽樣比對源與目標數據內容。