温馨提示×

HDFS数据如何在Ubuntu上进行迁移

小樊
40
2025-11-17 05:15:21
栏目: 智能运维

在 Ubuntu 上进行 HDFS 数据迁移的常用方法

前置准备

  • 在 Ubuntu 上安装 Hadoop 客户端,并配置好环境变量(如 HADOOP_HOME、PATH),确保能执行 hdfs dfs 命令。
  • 准备好访问源/目标 NameNode 的网络与权限(Kerberos 票据或简单认证),并确认 HDFS 服务已启动
  • 迁移前先检查源路径、目标路径及可用磁盘空间,避免中途失败。

方法一 本地拷贝与合并

  • 适用场景:从 HDFS 迁移到 Ubuntu 本地磁盘,或本地到 HDFS。
  • 常用命令:
    • 从 HDFS 下载到本地目录:hdfs dfs -get /hdfs/path /local/path
    • 将本地文件上传到 HDFS:hdfs dfs -put /local/file /hdfs/path
    • 将 HDFS 目录内所有文件合并为一个本地文件:hdfs dfs -getmerge /hdfs/dir /local/merged.txt
  • 示例:
    • hdfs dfs -get /user/hadoop/data /home/ubuntu/hdfs_data
    • hdfs dfs -put /home/ubuntu/local.txt /user/hadoop/input
    • hdfs dfs -getmerge /user/hadoop/logs /home/ubuntu/merged.log
  • 说明:适合中小规模数据;大目录建议分批或使用分布式拷贝工具。

方法二 FUSE 挂载为本地文件系统

  • 适用场景:需要像操作本地磁盘一样对 HDFS 进行复制、移动、备份等。
  • 安装与挂载(Ubuntu):
    • 安装 FUSE:sudo apt-get install hadoop-hdfs-fuse
    • 非 HA:mkdir -p /mnt/hdfs;hadoop-fuse-dfs dfs://<namenode_host>:<rpc_port> /mnt/hdfs
    • HA:hadoop-fuse-dfs dfs://<nameservice_id> /mnt/hdfs
    • 开机自动挂载(/etc/fstab):hadoop-fuse-dfs#dfs://<namenode_host>:<rpc_port> /mnt/hdfs fuse allow_other,usetrash,rw 2 0
  • 使用方式:mount /mnt/hdfs 后,可用 cp、rsync、tar 等常规工具在本地与 HDFS 之间迁移数据。
  • 提示:确保 JAVA_HOME 等 Hadoop 环境变量在系统服务环境下可用;权限与网络需与集群策略一致。

方法三 跨集群迁移与导出到关系型数据库

  • 跨集群拷贝(DistCp):
    • 基本用法:hadoop distcp hdfs://src-nn:8020/src hdfs://dst-nn:8020/dst
    • 常用选项:-m 100(并发任务数)、-overwrite(覆盖)、-update(增量)、-bandwidth 100(MB/s 限速)
    • 示例:hadoop distcp -m 50 -overwrite hdfs://nn1:8020/data hdfs://nn2:8020/backup/data
  • 导出到 MySQL(Sqoop):
    • 前提:HDFS 数据为文本/列式格式(如 Text、Parquet 经 Hive 导出为文本)
    • 命令:sqoop export --connect jdbc:mysql://host:3306/db --username user --password pwd --table tgt_tbl --export-dir /hdfs/export/dir -m 1
  • 说明:DistCp 适合大规模、跨机房/跨版本迁移;Sqoop 适合落地到 MySQL/Oracle/PostgreSQL 等关系库。

方法四 Hive 表级迁移与 HBase 场景

  • Hive 表导出到 HDFS(再迁移/加载):
    • 导出到 HDFS 目录:EXPORT TABLE db.tbl TO ‘hdfs://nn:8020/export/tbl
    • 在目标集群 IMPORT:IMPORT TABLE db.tbl FROM ‘hdfs://nn:8020/export/tbl
    • 或直接用 Hive 查询结果导出到本地/其他路径:INSERT OVERWRITE LOCAL DIRECTORY ‘/local/dir’ SELECT * FROM db.tbl
  • HBase 表数据迁移(HDFS 层面搬运 + 修复元数据):
    • 从源 HDFS 导出表目录:hdfs dfs -get hdfs://src:9000/hbase/data/default/table /home/hbase/table
    • 将目录拷入目标 HDFS:hdfs dfs -put /home/hbase/table hbase/data/default/table
    • 修复:hbase hbck -fixMeta;hbase hbck -fixAssignments
  • 说明:Hive EXPORT/IMPORT 保留表结构与数据;HBase 迁移需按表目录级别搬运并修复 metaregion 分配

0