HIVE 如何迁移已有表的hdfs路径
因有些厂家把数据存放到了公共目录,现在需要迁移出指定的目录,不知道有没有啥方法;
以下为具体问题描述
1、厂家Y建了个表A
create table a(f1 int,f2 int,……) partition(xx,yy) location '/usr/hive/warehouse/a';
需要迁移A表的数据至 '/usr/hive/warehouse/厂家Y‘ ;
2、在直接更改location (alter table a set location '/usr/hive/warehouse/厂家Y/a‘ ) 发现hdfs的路径并没有变化;
在外网上查到一些方法:
1、新建一个表B,指定location到目标路径 create table b like a location '/usr/hive/warehouse/厂家Y/B';
2、迁移A的数据至B,
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
因为表A或者其他表有大量的分区,这样设置,可以自动在表B上维护分区
insert overwrite table B partition(xx,yy) select * from A;
3、drop 原来的表A drop table a;
4、更名表B为A, alter table b rename to a;
在步骤4之前,B的数据存放目录还是在 '/usr/hive/warehouse/厂家Y/B' 下,但是执行4后,表A(原表B)数据存放目录又变回了
'/usr/hive/warehouse/a' 下,结果失败了;
请问大家有没有啥好方法,谢谢了!
相关推荐
数仓工具Sqoop详解[可运行源码]
Sqoop是一个用于在关系型数据库(如MySQL)和Hadoop生态系统(HDFS、Hive、HBase)之间高效传输数据的工具,其名称来源于SQL+Hadoop。Sqoop的核心设计思想是利用MapReduce(仅使用Map任务)来加速数据传输,因此它是一种批处理工具,不支持实时数据导入导出。使用Sqoop前需启动HDFS和YARN。文章详细介绍了Sqoop的导入(import)和导出(export)命令,包括将MySQL数据导入HDFS、Hive,以及从HDFS或Hive导出数据到MySQL的具体示例和参数说明。特别强调了使用SQL语句进行导入时需添加`and $conditions`并与`split-by`配合使用,以及处理非整型分割字段的解决方案。此外,还介绍了增量导入的概念和实现方式,通过`--check-column`、`--incremental append`和`--last-value`参数实现基于主键的增量数据同步。最后,文章讲解了Sqoop Job任务的创建、查看、删除和执行,并指出Job任务可以自动记录`last-value`,从而简化增量导入的维护工作。文中也提到了常见错误及解决方法,如jar包缺失、空指针异常等。
sqoop1-1.4.6 documentation 英文文档
sqoop1-1.4.6 documentation 英文文档
kettle 从oracle数据库导数据到hive 表
由于公司要把oracle 数据库迁移到hive ,hbase 环境,特建议使用kettle做数据迁移,调试3个小时,终于调试成功,顺手写了个配置文档。
修改hive表分区名称
hive表修改分区数据
DataX数据的迁移(MySQL、HDFS,Hive)
1.将Mysql中的数据迁移到Hdfs文件系统中,然后通过Hive加载HDFS文件系统中的数据值 2.将Hive中的数据迁移到指定Mysql数据库中 注意点: 1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者转换时需要注意,再数据迁移json模板中,"nullFormat": "\\N", 该配置信息就是解决了数据迁移是存在的Null值。 2.如果hive中没有数值DataX迁移时会出现异常 执行语句:python /opt/module/datax/bin/datax.py /opt/module/datax/job/xxx.json


数据仓库
