Ubuntu环境下Hadoop数据迁移的常用方法及实践指南
在Ubuntu系统中,Hadoop数据迁移需根据场景(同版本/跨版本、集群内/跨集群、结构化数据)选择合适工具,以下是具体方法及关键步骤:
DistCp是Hadoop自带的分布式拷贝工具,基于MapReduce实现,支持大规模数据高效迁移,适用于同版本或跨版本Hadoop集群。
若新老集群Hadoop版本一致(如同为3.3.x),可直接使用HDFS协议同步数据,命令格式如下:
 hadoop distcp hdfs://源集群namenode地址:rpc端口/源路径 hdfs://目标集群namenode地址:rpc端口/目标路径
 示例:将源集群/user/data目录迁移至目标集群同名目录:
 hadoop distcp hdfs://hadoop1:9000/user/data hdfs://hadoop2:9000/user/data
若版本差异较大(如1.x→3.x),需使用兼容协议(如hftp或webhdfs),命令格式如下:
 hadoop distcp hftp://源集群namenode地址:http端口/源路径 hdfs://目标集群namenode地址:rpc端口/目标路径
 示例:从1.x集群迁移至3.x集群:
 hadoop distcp hftp://hadoop-old:50070/user/data hdfs://hadoop-new:9000/user/data
-m参数设置Map任务数量(默认20),根据集群资源和带宽调整(如-m 50提升并发);-bandwidth参数限制单任务带宽(单位:MB/s),避免占用过多网络资源(如-bandwidth 10限制为10MB/s);-p参数保留文件属性(用户、组、权限、时间戳等);-update参数更新目标集群已存在的文件,-append参数追加文件内容(避免覆盖);-i参数忽略失败文件(继续迁移其他文件),任务失败后可删除目标集群脏数据重新执行。DistCp默认启用CRC校验,确保数据完整性。若需跳过校验(提升性能),可添加-skipcrccheck参数,但建议保留校验。
Sqoop是连接关系型数据库(如MySQL、Oracle)与Hadoop的桥梁,适用于将结构化数据导入HDFS或Hive。
SQOOP_HOME、PATH);mysql-connector-java-5.1.40.jar)复制到Sqoop的lib目录;sqoop-env.sh,指定Hadoop、Hive等组件路径(如export HADOOP_COMMON_HOME=/usr/local/hadoop)。MySQL表数据导入HDFS:
 sqoop import --connect jdbc:mysql://源数据库地址/数据库名 --username 用户名 --password 密码 --table 表名 --target-dir HDFS目标路径 --verbose
 示例:将MySQL的employees表导入HDFS的/data/employees目录:
 sqoop import --connect jdbc:mysql://localhost:3306/company --username root --password 123456 --table employees --target-dir /data/employees --verbose
MySQL表数据导入Hive:
 sqoop import --connect jdbc:mysql://源数据库地址/数据库名 --username 用户名 --password 密码 --table 表名 --hive-import --hive-table Hive表名 --create-hive-table
 示例:将MySQL的products表导入Hive的default.products表:
 sqoop import --connect jdbc:mysql://localhost:3306/company --username root --password 123456 --table products --hive-import --hive-table default.products --create-hive-table
--append参数追加数据,或--overwrite参数覆盖;--fields-terminated-by指定分隔符(如--fields-terminated-by '\t');--split-by参数指定分片字段(如--split-by id),提升导入效率。Hive/Impala导出:若数据存储在Hive表中,可通过INSERT OVERWRITE DIRECTORY语句导出为文件,再迁移至目标集群:
 INSERT OVERWRITE DIRECTORY '/tmp/export_data' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM source_table;
 导出的文件可通过hadoop distcp迁移至目标集群。
MapReduce自定义程序:针对复杂迁移需求(如数据转换、过滤),可编写MapReduce程序,读取源HDFS数据并写入目标HDFS,适用于定制化场景。
第三方工具:如Cloudera Data Migration Service(CDMS)、Apache Ambari Data Collector,提供可视化界面和高级功能(如增量同步、数据校验),但需额外部署。
hdfs dfs -du -h /命令查看各目录数据量,按业务划分分批迁移;hadoop fs -ls /target/path),确保与源集群一致;hadoop fs -rm -r /target/path),重新执行命令;