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检查数据完整性,必要时抽样比对源与目标数据内容。