当前位置: 首页 > news >正文

Hive 数据迁移与备份

迁移类型

同时迁移表及其数据(使用import和export)

迁移步骤

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

在这里插入图片描述
一、Export、Import

Export导出,将Hive表中的数据,导出到外部
Import导入,将外部数据导入Hive表中

二、Export

1、语法

EXPORT TABLE tablename TO "export_target_path";

2、用法

#把tshang表导出到hdfs上
hive (default)> EXPORT TABLE lijia.tshang TO "/tmp/hive_data/lijia";
hive (default)> exit
[root@ /opt/PE/hive_data]# hadoop fs -ls /tmp/hive_data/lijia/tshang
Found 2 items
-rw-r--r--   3 hive hdfs       1262 2024-03-18 17:35 /tmp/hive_data/lijia/tshang/_metadata
drwxr-xr-x   - hive hdfs          0 2024-03-18 17:35  /tmp/hive_data/lijia/tshang/data

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

HDFS 集群不连通
hadoop fs -get /tmp/hive_data
scp -r hive_data root@targetAP:/tmp/
上传到目标 HDFS
hadoop fs -put /tmp/hive_data /tmp/

三、Import

1、语法

IMPORT TABLE tablename FROM "source_path";

2、用法

#先创建lijia库导入数据
hive (default)> create database lijia;
OK
Time taken: 0.012 seconds#导入
hive (db_hive)> import table lijia.tshang from "/tmp/hive_data/lijia";hive (db_hive)> select * from lijia.tshang;
OK
emp.empno    emp.ename    emp.job    emp.mgr    emp.hiredate    emp.sal    emp.comm    emp.deptno
7369    SMITH    CLERK    7902    1980-12-17    800.0    NULL    20
7499    ALLEN    SALESMAN    7698    1981-2-20    1600.0    300.0    30
7521    WARD    SALESMAN    7698    1981-2-22    1250.0    500.0    30
7566    JONES    MANAGER    7839    1981-4-2    2975.0    NULL    20
7654    MARTIN    SALESMAN    7698    1981-9-28    1250.0    1400.0    30
7698    BLAKE    MANAGER    7839    1981-5-1    2850.0    NULL    30
7782    CLARK    MANAGER    7839    1981-6-9    2450.0    NULL    10
7788    SCOTT    ANALYST    7566    1987-4-19    3000.0    NULL    20
7839    KING    PRESIDENT    NULL    1981-11-17    5000.0    NULL    10
7844    TURNER    SALESMAN    7698    1981-9-8    1500.0    0.0    30
7876    ADAMS    CLERK    7788    1987-5-23    1100.0    NULL    20
7900    JAMES    CLERK    7698    1981-12-3    950.0    NULL    30
7902    FORD    ANALYST    7566    1981-12-3    3000.0    NULL    20
7934    MILLER    CLERK    7782    1982-1-23    1300.0    NULL    10
Time taken: 0.029 seconds, Fetched: 14 row(s)

实施过程,迁移数据库,不在是一个表

目标集群和服务器检查

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;

迁移步骤

#输入需要迁移的数据库default
执行
cat <<EOF > /opt/lijia/hive_sel_tables.HQL
use default;
show tables;
EOF# 罗列要迁移的表清单 
执行
beeline -u jdbc:hive2://172.24.3.183:10000 -nhive -f  /opt/lijia/hive_sel_tables.HQL \
| grep -e "^|" \
| grep -v "tab_name" \
| sed "s/|//g" \
| sed "s/ //g" \
> /opt/lijia/hive_table_list.txt# 生成导出脚本
cat /opt/lijia/hive_table_list.txt \
| awk '{printf "export table <db_name>.%s to |\"/tmp/lijia/<db_name>/%s\"|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /opt/lijia/hive_export_table.HQL执行
cat /opt/lijia/hive_table_list.txt \
| awk '{printf "export table default.%s to |\"/tmp/lijia/default/%s\"|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /opt/lijia/hive_export_table.HQL# 生成导入脚本
cat /opt/lijia/hive_table_list.txt \
| awk '{printf "import table <db_name>.%s from |\"/tmp/lijia/<db_name>/%s\"|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /opt/lijia/hive_import_table.HQL执行
cat /opt/lijia/hive_table_list.txt \
| awk '{printf "import table default.%s from |\"/tmp/lijia/default/%s\"|;\n",$1,$1}' \
| sed "s/|//g" \
| grep -v "tab_name" \
> /opt/lijia/hive_import_table.HQL# 创建 HDFS 导出目录
hadoop fs -mkdir -p /tmp/lijia/<db_name>/
hadoop fs -mkdir -p /tmp/lijia/default/# 导出表结构到数据到 HDFS
beeline -u jdbc:hive2://172.24.3.183:10000 -nhive -f /opt/lijia/hive_export_table.HQL## HDFS 集群连通时使用 DiskCP 进行拷贝
hadoop distcp hdfs://scrNmaeNode/tmp/<db_name> hdfs://targetNmaeNode/tmp## HDFS 集群不连通
hadoop fs -get /tmp/lijia/default/
scp -r /tmp/lijia/default/ root@targetAP:/tmp/lijia/## 目标服务器# 创建 HDFS 导出目录
hadoop fs -mkdir -p /tmp/lijia/# 上传到目标 HDFS
hadoop fs -put /tmp/lijia/default /tmp/lijia/# 导入到目标 Hive
beeline -u jdbc:hive2://172.24.3.183:10000 -nhive -f /opt/lijia/hive_import_table.HQL
http://www.lryc.cn/news/324168.html

相关文章:

  • FFMpeg 获取音频音量、提高音量
  • 【java数据结构】基于java提供的ArrayList实现的扑克牌游戏-(附源码~)
  • R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class
  • 王道c语言-二叉树前序、中序、后序、层次遍历
  • <REAL-TIME TRAFFIC OBJECT DETCTION FOR AUTONOMOUS DRIVING>论文阅读
  • 优化 - 排序算法
  • Python实战:深拷贝与浅拷贝
  • rollup打包起手式
  • 【笔记】语言实例比较 3. 无重复字符的最长子串 C++ Rust Java Python
  • int的大小你知道时4个字节,那么类的大小你知道怎么计算吗?
  • OpenCV学习笔记(十一)——利用Sobel算子计算梯度
  • 扩展一下BenchmarkSQL,新增支持ASE/HANA/DB2/SQLServer,可以随便用了
  • Android 静默安装成功后自启动
  • 计算机二级真题讲解每日一题:《format格式化》
  • RabbitMQ问题
  • flutter->Scaffold左侧/右侧侧边栏和UserAccountsDrawerHeader的使用
  • vulnhub prime1通关
  • JVM快速入门(1)JVM体系结构、运行时数据区、类加载器、线程共享和独享、分区、Java对象实例化
  • CSS3新属性(学习笔记)
  • 41-Vue-webpack基础
  • 数据仓库的分层理论
  • MySQL 8.0-索引- 不可见索引(invisible indexes)
  • Uibot6.0 (RPA财务机器人师资培训第3天 )财务招聘信息抓取机器人案例实战
  • Eureka和Nacos的关系
  • 极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案
  • 5G智能网关助力工业铸造设备监测升级
  • 奇舞周刊第523期:来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处...
  • 《边缘计算:连接未来的智慧之桥》
  • php 各种魔术函数的触发条件
  • Linux的学习之路:2、基础指令(1)