栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive 数据迁移与备份

Hive 数据迁移与备份

迁移类型
  1. 同时迁移表及其数据(使用import和export)
  2. 分步迁移表和数据
    1. 迁移表(show create table )
    2. 迁移数据
    3. 关联表和数据(msck repair)

迁移步骤
  1. 将表和数据从 Hive 导出到 HDFS
  2. 将表和数据从 HDFS 导出到本地服务器
  3. 将表和数据从本地服务器复制到目标服务器
  4. 将表和数据从目标服务器上传到目标 HDFS
  5. 将表和数据从目标 HDFS 上传到目标 Hive 库
  • 如果原始 HDFS 和目标 HDFS 集群连通,可使用 DiskCP 工具直接跨集群复制,而跳过2~4步

实施过程

目标集群和服务器检查
df -lh # 查看本地空间使用情况
hadoop dfsadmin -report # 查看HDFS集群使用情况
hadoop fs -find / -name warehouse # 查找Hive库位置
hadoop fs -du -h /user/hive/warehouse # 查看Hive库占用

同时迁移表及其数据(使用import和export)
  • export 工具导出时会同时导出元数据和数据
  • import 工具会根据元数据自行创建表并导入数据
  • 如果涉及事物表需要预先开启目标库的事物机制
-- 开启事务 
-- https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Configuration
SET hive.support.concurrency = true;
SET hive.enforce.bucketing = true;				
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
SET hive.compactor.initiator.on = true;
SET hive.compactor.worker.threads = 1;

迁移步骤

## 源服务器

cat < /home/ap/dip/lzy/hive_sel_tables.hql
use ;
show tables;
EOF

# 罗列要迁移的表清单
beeline -f /home/ap/dip/lzy/hive_sel_tables.HQL 
| grep -e "^|" 
| grep -v "tab_name" 
| sed "s/|//g" 
| sed "s/ //g" 
> /home/ap/dip/lzy/hive_table_list.txt

# 生成导出脚本
cat /home/ap/dip/lzy/hive_table_list.txt 
| awk '{printf "export table .%s to |/tmp//%s|;n",$1,$1}' 
| sed "s/|//g" 
| grep -v "tab_name" 
> /home/ap/dip/lzy/hive_export_table.HQL

# 生成导入脚本
cat /home/ap/dip/lzy/hive_table_list.txt 
| awk '{printf "import table .%s from |/tmp//%s|;n",$1,$1}' 
| sed "s/|//g" 
| grep -v "tab_name" 
> /home/ap/dip/lzy/hive_import_table.HQL

# 创建 HDFS 导出目录
hadoop fs -mkdir -p /tmp//

# 导出表结构到数据到 HDFS
beeline -f /home/ap/dip/lzy/hive_export_table.HQL

## HDFS 集群连通时使用 DiskCP 进行拷贝
hadoop distcp hdfs://scrNmaeNode/tmp/hdfs://targetNmaeNode/tmp

## HDFS 集群不连通
hadoop fs -get /tmp//home/ap/dip/lzy/ 
scp -r /home/ap/dip/lzy/ root@targetAP:/home/ap/dip/

## 目标服务器

# 创建 HDFS 导出目录
hadoop fs -mkdir -p /tmp//

# 上传到目标 HDFS
hadoop fs -put /home/ap/dip/lzy/ /tmp

# 导入到目标 Hive
beeline -f /home/ap/dip/lzy/hive_import_table.HQL

分步迁移表和数据

备份表

cat < /home/ap/dip/lzy/hive_sel_tables.hql
use ;
show tables;
EOF

# 罗列要迁移的表清单
beeline -f /home/ap/dip/lzy/hive_tables_sel.HQL 
| grep -e "^|" 
| grep -v "tab_name" 
| sed "s/|//g" 
| sed "s/ //g" 
> /home/ap/dip/lzy/hive_tables_rst.HQL

# 生成DDL查询语句
cat /home/ap/dip/lzy/hive_tables_rst.HQL 
| awk '{printf "show create table .%s ;n",$1}' 
| sed "s/|//g" 
| grep -v "tab_name" 
> /home/ap/dip/lzy/hive_table_ddl_sel.HQL

# 生成 DDL 查询结果
beeline -f /home/ap/dip/lzy/hive_table_ddl_sel.HQL 
> /home/ap/dip/lzy/hive_table_ddl_rst.HQL

迁移数据

通过 HDFS 复制数据

  • 这种方式无法备份外部表的数据
  • 保证迁移前后的HDFS数据目录一致
  • 数据迁移同样考虑集群连通时使用 Diskcp进行复制,不连通时先 GET 到本地,传到目标服务器侯 再 PUT 到 HDFS
/user/hive/warehouse/database.db/table_name # Hive 默认路径

# 跨HDFS集群复制
hadoop distcp hdfs://scrNmaeNode/user/hive/warehouse/database.db/ hdfs://scrNmaeNode/user/hive/warehouse/

通过 HiveQL 迁移数据

  • 需要预先构建表和分区
desc 表名;
show partitions 分区表名;
  • 这种方式适合表比较少,表结构不是很复杂的表的迁移
-- 导出数据到服务器
INSERT OVERWRITE LOCAL DIRECTORY "路径" 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
SELECt 字段1,字段2,... FROM ;

-- 导出数据到HDFS
INSERT OVERWRITE DIRECTORY "路径"
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECt 字段1,字段2,... FROM ;

-- 导入数据
LOAD DATA LOCAL INPATH '/root/my/bookstore.txt' 
OVERWRITE INTO TABLE ;

关联表和数据

  • 关联前需要在目标库预先创建表
msck repair table 

参考:

​​​​​​​​​​​​​​HIVE数据迁移

Hive中的数据迁移--迁移多库数据以及实际遇到的问题解决

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433837.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号