首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive全库数据迁移方案

Hive全库数据迁移方案

原创
作者头像
岳涛
修改2021-09-26 17:19:40
4.6K2
修改2021-09-26 17:19:40
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)

背景

Hive的迁移涉及两个技术点:

1. 仅迁移元数据,可参考网易云提出的思路;

2. 元数据及Hive数据全量迁移。

考虑到多数场景是迁移整个Hive数据库,该篇文章只介绍迁移的第二种,即元数据及Hive数据全量迁移。

迁移方案一:

1. 将旧集群的hive数据导出至其hdfs中(数据导出)

设置hive启动默认数据库

在家目录中新建.hiverc文件,配置默认的数据库(即需要导出的数据库)

vim ~/.hiverc
use export_db;

在hdfs上创建导出目录

hdfs dfs -mkdir -p /tmp/export_db_export

导出旧集群的hive数据

生成导出脚本

hive -e "show tables;" | awk  '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$1,$1}' | sed "s/|/'/g" | grep -v tab_name > ~/export.hql

导出数据

hive -f ~/export.hql

2. 将导出的数据下载到本地(数据中转)

下载数据

hdfs dfs -get /tmp/export_db_export ~/export_db

3. 将本地的导出数据上传至新的集群hdfs中(数据迁移)

前提:已将导出的数据目录迁移至新集群

上传数据

hdfs dfs -put ~/export_db /tmp/export_db_export

注:这里的/tmp/export_db_export需要提前创建

4. 将新集群hdfs中的数据导入至新集群中的hive中(数据导入)

生成导入脚本

我们将之前的export.hql脚本修改下就可以当做我们的import.hql脚本

cp ~/export.sql ~/import.sql
sed -i 's/export /import /g' ~/import.sql
sed -i 's/ to / from /g' ~/import.sql

导入数据

这里也需要设置hive的默认数据库

vim ~/.hiverc
use import_db;

导入数据

hive -f ~/import.sql

至此Hive数据的迁移就完成.

迁移方案二:

在部分有安全控制的集群环境下,hive连接被禁用了。这时候需要使用beeline连接hive并进行数据迁移,下面给大家介绍下如何使用beeline来进行数据迁移

1. 使用beeline进行导出脚本的生成

beeline -u jdbc:hive2://hadoop01:10000 -e "use export_db;show tables;"| awk '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$2,$2}' | sed "s/|/'/g"|sed '1,3d'|sed '$d' > ~/export.hql

2. 执行导出脚本

sed -i '1i use export_db;' ~/export.hql
beeline -u jdbc:hive2://hadoop01:10000 -n hdfs -f ~/export.hql

3. 这里使用distcp来进行hdfs文件在新集群的上传

hadoop distcp hdfs://hadoop01:8020/tmp/export_db_export/ hdfs://hadoop02:8020/tmp/export_db_export

新的集群hdfs目录需要提前创建

4. 修改import.hql

cp ~/export.hql ~/import.hql
sed -i 's/export /import /g' ~/import.hql
sed -i 's/ to / from /g' ~/import.hql
sed -i '1d' ~/import.hql
sed -i '1i use import_db;' ~/import.hql

5. 导入数据

beeline -u jdbc:hive2://hadoop02:10000 -n hdfs -e "create database import_db;"
beeline -u jdbc:hive2://hadoop02:10000 -n hdfs -f ~/import.hql

至此数据迁移完成

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 迁移方案一:
    • 1. 将旧集群的hive数据导出至其hdfs中(数据导出)
      • 2. 将导出的数据下载到本地(数据中转)
        • 3. 将本地的导出数据上传至新的集群hdfs中(数据迁移)
          • 4. 将新集群hdfs中的数据导入至新集群中的hive中(数据导入)
            • 生成导入脚本
            • 导入数据
        • 迁移方案二:
          • 1. 使用beeline进行导出脚本的生成
            • 2. 执行导出脚本
              • 3. 这里使用distcp来进行hdfs文件在新集群的上传
                • 4. 修改import.hql
                  • 5. 导入数据
                  相关产品与服务
                  弹性 MapReduce
                  弹性 MapReduce (EMR) 是基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。提供易于部署及管理的 Hive、Spark、HBase、Flink、StarRocks、Iceberg、Alluxio 等开源大数据组件,帮助客户高效构建云端企业级数据湖技术架构。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档