Inceptor 数据导入导出之sqoop

  其他常见问题
内容纲要

概要说明


面对一些重要数据,很多场景下都需要将数据仓库进行复制,这可以是整个数据库的更广泛级别,也可以是较小的级别,例如表或分区。本案例将演示Export/Import 的方式导入导出 Inceptor 数据。

该方法只适用于ORC普通表的导入导出。ORC 分区表不支持,ORC事务表不支持。

详细说明


Inceptor 数据导入导出方法大致分为以下几种:

  1. Export/Import
  2. Insert Overwrite Dirctory,然后建外表的方式
  3. HDFS 的 get、put,以及Inceptor 的 Load 或者 Location
  4. 使用sqoop 将 Inceptor 数据向mysql 迁移数据

本案例介绍使用 Export/Import 的方式导入导出 Inceptor 数据,该方法只需要3步:

  1. 在 mysql 上创建同构的表
  2. 在TDH 集群上运行 sqoop 命令,将数据导入;

1、在mysql上建表

EXPORT TABLE crmdev.orc_unpart_export TO '/crmdev/orc_unpart_export/';

可以看到有个_metadata,json 格式的,保存了表的元数据信息:

$ ll orc_unpart_export/
总用量 8
drwxr-xr-x 2 root root 4096 4月   7 16:12 data
-rw-r--r-- 1 root root 3086 4月   7 16:12 _metadata

2、在TDH 集群上执行sqoop 导出

命令格式如下:

$ sqoop export --connect jdbc:mysql://172.22.22.23:3306/eastmoney?useSSL=false --username root --password 123456 --table main_rank --export-dir /inceptor1/user/hive/warehouse/source.db/tableau/orc_unpart_sql/

3、在目标集群上 Import 到Inceptor 表

在目标集群,执行 Import ,需要注意的是,import 语句只能写到当前数据库的表中,不支持database_name.table_name;

USE crmdev;
IMPORT TABLE orc_unpart_export FROM '/crmdev/orc_unpart_export/';

IMPORT如果目标表是个非分区普通ORC表,它将创建目标表。所有的表属性/参数都是EXPORT导出时生成的存档。测试是可行的。同版本跨集群是可以的,5.2.2集群向5.2.3可行,但是向6.2.0版本Import是不支持的。

但是分区表的导入会出现识别错误的情况,报错如下:

2020-04-07 16:38:39,334 ERROR inceptor.InceptorDriver: (Logging.scala:logError(75)) [HiveServer2-Handler-Pool: Thread-300(SessionHandle=9d8e86f5-f7a6-4dff-a365-97791785a14f)] - COMPILE FAILED: Semantic error: [Error 40000] Exception while processing: Error in serializing metadata
org.apache.hadoop.hive.ql.parse.SemanticException: Exception while processing: Error in serializing metadata
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
        at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.json.JSONException: JSONObject["partitions"] not a string.
        at org.json.JSONObject.getString(JSONObject.java:722)
        at org.apache.hadoop.hive.ql.parse.EximUtil.readMetaData(EximUtil.java:222)
        ... 24 more

这篇文章对您有帮助吗?

平均评分 1 / 5. 次数: 1

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。