0

背景 :

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

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

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

这会导致错误的分析输出。

问题:

1)。如何使这个 Sqoop 数据加载具有事务性,即要么导出所有记录,要么不导出任何记录。

2)。在 Hive 表 -> 暂存表 -> 关系表的整个过程中构建这个数据管道的最佳方法是什么。

技术细节:

Hadoop 版本 1.0.4
Hive- 0.9.0
Sqoop - 1.4.2

4

2 回答 2

1

您应该能够sqoop通过使用名为--staging-table. 它的作用基本上是充当用于暂存导出数据的辅助表。暂存数据最终在单个事务中移动到目标表。因此,通过这样做,您不应该遇到部分数据的一致性问题。

(来源:Sqoop 文档

于 2013-02-21T16:28:59.233 回答
1

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

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

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

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

其中 p_date=20131017 或 p_date=20131016

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

于 2013-10-17T18:47:19.347 回答