元数据导出
为了保持迁移后数据的属性及权限等信息在目标集群上与源集群一致,需要将源集群的元数据信息导出,以便在完成数据迁移后进行必要的元数据恢复。
需要导出的元数据包括HDFS文件属主/组及权限信息、Hive表描述信息。
HDFS元数据导出
HDFS数据需要导出的元数据信息包括文件及文件夹的权限和属主/组信息,可通过如下HDFS客户端命令导出。
$HADOOP_HOME/bin/hdfs dfs -ls -R <migrating_path> > /tmp/hdfs_meta.txt
其中,各参数的含义如下:
- $HADOOP_HOME:源集群Hadoop客户端安装目录。
- <migrating_path>:HDFS上待迁移的数据目录。
- /tmp/hdfs_meta.txt:导出的元数据信息保存在本地的路径。
如果源集群与目标集群网络互通,且以管理员身份运行hadoop distcp命令进行数据拷贝,可以添加参数“-p”让distcp在拷贝数据的同时在目标集群上分别恢复相应文件的元数据信息,因此在这种场景下可直接跳过本步骤。
Hive元数据导出
Hive表数据存储在HDFS上,表数据及表数据的元数据由HDFS统一按数据目录进行迁移。而Hive表的元数据根据集群的不同配置,可以存储在不同类型的关系型数据库中(如MySQL、PostgreSQL、Oracle等)。
本指导中导出的Hive表元数据即存储在关系型数据库中的Hive表的描述信息。
业界主流大数据发行版均支持Sqoop的安装,如果是自建的社区版大数据集群,可下载社区版Sqoop进行安装。借助Sqoop来解耦导出的元数据与关系型数据库的强依赖,将Hive元数据导出到HDFS上,与表数据一同迁移后进行恢复。
参考步骤如下:
- 在源集群上下载并安装Sqoop工具。
- 下载相应关系型数据库的JDBC驱动放置到“${Sqoop_Home}/lib”目录。
- 执行如下命令导出所有Hive元数据表。
例如所有导出数据保存在HDFS上的“/user/<user_name>/<table_name>”目录。
$Sqoop_Home/bin/sqoop import --connect jdbc:<driver_type>://<ip>:<port>/<database> --table <table_name> --username <user> -password <passwd> -m 1
其中,各参数的含义如下:
- $Sqoop_Home:Sqoop的安装目录。
- <driver_type>:数据库驱动类型。
- <ip>:源集群数据库的IP地址。
- <port>:源集群数据库的端口号。
- <table_name>:待导出的表名称。
- <user>:用户名。
- <passwd>:用户密码。
命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。