如何创建从hive表到关系数据库的数据管道

时间:2013-02-21 10:45:27

标签: hadoop hive pipeline sqoop oozie

背景:

我有一个包含日志信息的Hive Table“log”。该表每小时加载一次新的日志数据。我想在过去的两天内对日志进行一些快速分析,所以我想将最后48小时的数据提取到我的关系数据库中。

为了解决上述问题,我创建了一个由HIVE SQL查询加载的临时配置单元表。将新数据加载到临时表后,我使用sqoop Query将新日志加载到关系数据库中。

问题是sqoop正在将数据加载到BATCH中的关系数据库中。因此,在任何特定时间,我只有特定小时的部分日志。

这导致错误的分析输出。

问题:

1)。如何使这个Sqoop数据加载事务,即导出所有记录或导出所有记录。

2)。什么是构建此数据管道的最佳方法,其中Hive Table的整个过程 - >临时表 - >关系表。

技术细节:

Hadoop版本1.0.4
Hive- 0.9.0
Sqoop - 1.4.2

2 个答案:

答案 0 :(得分:1)

您应该可以使用名为sqoop的选项使用--staging-table执行此操作。这样做基本上充当用于暂存导出数据的辅助表。分阶段数据最终在单个事务中移动到目标表。因此,通过这样做,您不应该对部分数据存在一致性问题。

(来源:Sqoop documentation

答案 1 :(得分:1)

Hive和Hadoop是如此出色的技术,可以让您的分析在MapReduce任务中运行,通过利用多个节点非常快速地执行分析。

将此用于您的利益。首先对Hive表进行分区。 我想你将所有日志存储在一个Hive表中。因此,当您运行查询并且有

SQL .... WHERE LOG_DATA> '17 / 10/2013 00:00:00'

然后,您可以有效地查询到目前为止收集的所有数据。 相反,如果您使用分区 - 假设您可以在查询中定义每天一个

WHERE p_date = 20131017或p_date = 20131016

Hive已分区,现在知道只读取这两个文件 因此,假设您每天获得10 GB的日志 - 那么HIVE QUERY应该会在几秒钟内在一个体面的Hadoop集群中成功