技术实践|Hive数据迁移干货分享
导语
Hive是基于Hadoop构建的一套数据仓库分析系统,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能。它的优点是可以通过类SQL语句快速实现简单的MapReduce统计,不用再开发专门的MapReduce应用程序,从而降低学习成本,十分适合对数据仓库进行统计分析。
近几年,随着行业内数据体量的不断增大,再加上国产化的趋势下,很多企业都开始着手对自己已有的大数据平台进行扩容、升级、产品更换等一系列操作,以期可以赶上潮流。因此,就会有很多项目需要进行数据库迁移,本文主要总结了一些在项目上遇到Hive迁移时,可以使用的方式方法,供大家参考借鉴。
目录
● 1. Hive迁移类型
● 2. Hive迁移步骤
● 3. Hive迁移实施步骤
● 4. 结语
1. Hive迁移类型
■ 表和数据整体迁移
一般在企业进行大数据平台产品的升级更换(如国产化)、机房搬迁、物理机转向云平台等情况下,会进行整库迁移,那么此时Hive迁移建议使用表和数据整体迁移的方式进行迁移。
■ 表和数据分步迁移
一般在企业进行数据库改造、历史数据库区域创建、业务条线改造等,或是数据库出现瓶颈的情况下,会进行部分数据迁移,那么此时Hive迁移建议使用表和数据分步迁移的方式进行迁移。
2. Hive迁移步骤
(1)将表和数据从老集群Hive导出到老集群HDFS
(2)将表和数据从老集群HDFS导出到老集群本地磁盘或共享磁盘
(3)将表和数据从老集群本地磁盘复制到新集群本地磁盘(如共享磁盘此步骤省略)
(4)将表和数据从新集群本地磁盘或共享磁盘上传到新集群HDFS
(5)修复新集群Hive数据库元数据
如果老集群HDFS和新集群HDFS连通,可使用DistCp工具跨集群复制,跳过中间步骤,直接执行第5步。

3. Hive迁移实施步骤
■ 新集群和服务器检查
#查看本地空间使用情况是否足够
df -h
#查看HDFS集群使用情况是否满足
hadoop dfsadmin -report
#查找Hive库存储位置
hadoop fs -find / -name warehouse
#查看Hive库占用情况
hadoop fs -du -h /user/hive/warehouse
■ 表和数据整体迁移
一般Hive整体迁移时使用HDFS文件迁移,然后再进行数据表与数据文件关联即可,新老集群Hive版本即使不一致的情况下也支持该步骤,详细操作步骤如下:
老集群备份
# 罗列迁移表清单
cat <<EOF > /home/data/backup/hive_sel_tables.hql
use <db_name>;
show tables;
EOF
# 清洗迁移表清单
beeline -f /home/data/backup/hive_sel_tables.hql \
| grep -e "^|" \
| grep -v "tab_name" \
| sed "s/|//g" \
| sed "s/ //g" \
> /home/data/backup/hive_table_list.txt
# 拼接建表语句命令及清洗无用字符
cat /home/data/backup/hive_table_list.txt \
| awk '{printf "show create table <db_name>.%s;\n",$1,$1}' \
| sed "s/|//g" \
| sed "s/+/'/g" \
| grep -v "tab_name" \
> /home/data/backup/hive_show_create_table.hql
# 导出建表语句
beeline -e /home/data/backup/hive_show_create_table.hql>/home/data/backup/hive_table_ddl.sql
# 清洗建表语句
sed -i 's/^|//g' /home/data/backup/hive_table_ddl.sql
sed -i 's/|$//g' /home/data/backup/hive_table_ddl.sql
sed -i 's/-//g' /home/data/backup/hive_table_ddl.sql
sed -i 's/+//g' /home/data/backup/hive_table_ddl.sql
sed -i 's/createtab_stmt//g' /home/data/backup/hive_table_ddl.sql
sed -i 's/.*0: jdbc:hive2:.*/;/' /home/data/backup/hive_table_ddl.sql
sed -i '/^$/d' /home/data/backup/hive_table_ddl.sql
# 拼接修复Hive元数据语句
cat /home/data/backup/hive_table_list.txt \
| awk '{printf "msck repair table archive.%s;\n",$1,$1}' \
| sed "s/|//g" \
| sed "s/+/'/g" \
| grep -v "tab_name" \
> /home/data/backup/hive_repair_table.hql
# 将Hive在HDFS中的文件导出到HDFS临时目录
hadoop fs -get /user/hive/warehouse/<db_name> /tmp
# HDFS集群连通时使用DistCp进行拷贝
hadoop distcp hdfs://scrNameNode/tmp/<db_name> hdfs://user/hive/warehouse/<db_name>
# HDFS集群不连通,导出HDFS文件到本地磁盘或者共享NAS
hadoop fs -get /tmp/<db_name> /home/data/backup/
# 如果是共享磁盘忽略此步
scp -r /home/data/backup/ root@targetAP:/home/data/backup/
新集群恢复
# 登录生产环境Hive并创建表
beeline -f /home/data/backup/hive_table_ddl.sql>>/home/data/backup/hive_table_ddl.log
# 检查新集群数据库新表是否创建成功
beeline
use <db_name>
show tables;
# 将数据文件上传到HDFS的Hive存储路径下
hadoop fs -put /home/data/backup/<db_name> /user/hive/warehouse/<db_name>
# 关联Hive表和数据
beeline -f /home/data/backup/hive_repair_table.hql
# 查看HDFS所有目录检查是否都导入成功
hadoop fs -lsr /home
# 查看所有表大小,验证新旧表大小是否一致
hadoop fs -du -h /user/hive/warehouse/<db_name>
■ 表和数据分步迁移
一般Hive分步迁移时使用Import和Export,新老集群Hive版本不一致的情况下也支持该步骤。
Export工具导出时会同时导出元数据和数据;
Import工具会根据元数据自行创建表并导入数据。
老集群备份
# 罗列迁移表清单
cat <<EOF > /home/data/backup/hive_sel_tables.hql
use <db_name>;
show tables;
EOF
# 罗列要迁移的表清单
beeline -f /home/data/backup/hive_sel_tables.hql\
| grep -e "^|" \
| grep -v "tab_name" \
| sed "s/|//g" \
| sed "s/ //g" \
> /home/data/backup/hive_table_list.txt
# 生成导出脚本
cat /home/data/backup/hive_table_list.txt \
| awk '{printf "export table <db_name>.%s to |/tmp/<db_name>/%s|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /home/data/backup/hive_export_table.hql
# 生成导入脚本
cat /home/data/backup/hive_table_list.txt \
| awk '{printf "import table <db_name>.%s from |/tmp/<db_name>/%s|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /home/data/backup/hive_import_table.hql
# 创建HDFS导出目录
hadoop fs -mkdir -p /tmp/<db_name>/
# 导出表结构到数据到HDFS
beeline -f /home/data/backup/hive_export_table.hql
#HDFS集群连通时使用DistCp进行拷贝
hadoop distcp hdfs://scrNmaeNode/tmp/<db_name> hdfs://targetNmaeNode/tmp
# HDFS集群不连通,导出HDFS文件到本地磁盘或者共享NAS
hadoop fs -get /tmp/<db_name> /home/data/backup/
# 如果是共享磁盘忽略此步
scp -r /home/data/backup/ root@targetAP:/home/data/backup/
新集群恢复
# 创建HDFS导出目录
hadoop fs -mkdir -p /tmp/<db_name>/
#上传到目标HDFS
hadoop fs -put /home/data/backup/<db_name> /tmp
# 导入到目标Hive
beeline -f /home/data/backup/hive_import_table.hql
# 查看HDFS所有目录检查是否都导入成功
hadoop fs -lsr /home
# 查看所有表大小,验证新旧表大小是否一致
hadoop fs -du -h /user/hive/warehouse/<db_name>
4. 总结
Hive的数据迁移其实有多种方式,根据需求不同采用的迁移方式也不尽相同,每种迁移的优势也是不同的,其中数据量是影响迁移的重要因素之一。
在数据量不大的情况下,Hive迁移一般常用的方式是使用Export、Import进行数据和元数据的导出导入,Export会将数据和元数据写到一起,并且元数据在恢复时是直接关联数据的,不需要再做其他的操作。同时还直接关联分区,不需要再使用MSCK进行分区修复。需要注意的一点的是,Import和Export在进行数据恢复的时候,只会关注到表层的文件夹,不用和旧集群的文件路径一摸一样。
在数据量比较大的情况下,建议使用整体迁移的方式,这样Hive迁移的速度较快,但是注意要保证新旧集群数据目录的一致性。
技术实践|Hive数据迁移干货分享的更多相关文章
- 大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录
一.背景介绍 最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云ODPS平台上的任务.而申请的这个ODPS平台是属于政务内网的,因考虑到安全问题当前的大数据平台与阿里云ODPS的网络是不通的 ...
- 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践
本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...
- Hive数据如何同步到MaxCompute之实践讲解
摘要:本次分享主要介绍 Hive数据如何迁移到MaxCompute.MMA(MaxCompute Migration Assist)是一款MaxCompute数据迁移工具,本文将为大家介绍MMA工具的 ...
- 微信团队分享:iOS版微信的高性能通用key-value组件技术实践
本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...
- Hive及HBase数据迁移
一. Hive数据迁移 场景:两个Hadoop平台集群之间Hive表迁移. 基本思路:Hive表元数据和文件数据export到HDFS文件,通过Distcp将HDFS迁移到另一个集群的HDFS文件,再 ...
- IPv6技术详解:基本概念、应用现状、技术实践(下篇)
本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...
- IPv6技术详解:基本概念、应用现状、技术实践(上篇)
本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...
- Hadoop 数据迁移用法详解
数据迁移使用场景 冷热集群数据分类存储,详见上述描述. 集群数据整体搬迁.当公司的业务迅速的发展,导致当前的服务器数量资源出现临时紧张的时候,为了更高效的利用资源,会将原A机房数据整体迁移到B机房的, ...
- kafka数据迁移实践
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:mikealzhou 本文重点介绍kafka的两类常见数据迁移方式:1.broker内部不同数据盘之间的分区数据迁移:2.不同broker ...
- 让互联网更快:新一代QUIC协议在腾讯的技术实践分享
本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...
随机推荐
- 利用 Page Visibility API 优化网页性能与用户体验
在现代 Web 开发中,用户可能会频繁切换标签页,或让网页处于后台运行.为了避免不必要的资源浪费并提升用户体验,合理利用 Page Visibility API 可以在页面不可见时暂停或减少资源的消耗 ...
- duxui:基于Taro,兼容React Native、小程序、H5的多端UI库
duxui是duxapp官方开发的一款兼容多端的UI组件库,兼容小程序.H5.React Native,库中提供了60+的组件,覆盖大部分使用场景 它能帮助你通过统一的组件样式,快速完成多端应用的开发 ...
- Nuxt.js 应用中的 page:finish 钩子详解
title: Nuxt.js 应用中的 page:finish 钩子详解 date: 2024/10/9 updated: 2024/10/9 author: cmdragon excerpt: pa ...
- seaborn.lmplot详解
官方文档 首先我们要知道,lmplot是用来绘制回归图的. 让我们来看看他的API: seaborn.lmplot(x, y, data, hue=None, col=None, row=None, ...
- iOS字符串大小写转换使用小结
iOS开发中字符串用的比较多,追加,拆分,截取,替换,比较,大小写转换使用的频率还挺高.今天看oc技术书的时候看到关于大小写转换的地方,有一个说的是所有字母首字母大写,还是第一次看到,记录一下,以备后 ...
- docker发布ASPNETCore项目 yum
docker手动发布ASP.NET Core7 一.环境准备环节 1.准备Linux系统 Linux系统-CentOS7---基于虚拟机来安装 IP:192.168.1.97 2.安装docker环境 ...
- Vue 的最大优势是???
Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代 ...
- Linux查看显卡 GPU信息
1.Linux查看显卡信息: 1.1查询显卡信息 lspci | grep -i vga 前边的序号 "04:00.0″是显卡的代号 ASPEED Technology, Inc. ASPE ...
- synchronized的四种锁状态
Java 多线程的锁都是基于对象的,Java 中的每一个对象都可以作为一个锁. 类锁,其实就是 Class 对象的锁. Class 对象是一种特殊的 Java 对象,代表了程序中的类和接口.Java ...
- 2024强网杯pwn short wp
这时2024强网杯的pwn部分的short的WP 分析以下程序的基本安全措施 *] '/home/ysly/solve/tmp/short' Arch: i386-32-little RELRO: P ...