7

我的要求是

  1. 将数据从 Oracle 移动到 HDFS
  2. 处理 HDFS 上的数据
  3. 将处理后的数据移至 Teradata。

还需要每 15 分钟进行一次整个处理。源数据量可能接近 50 GB,处理后的数据也可能相同。

在网上搜索了很多之后,我发现

  1. ORAOOP 将数据从 Oracle 移动到 HDFS(让代码带有 shell 脚本并安排它以所需的时间间隔运行)。
  2. 通过自定义 MapReduce 或 Hive 或 PIG 进行大规模处理。
  3. SQOOP - Teradata 连接器将数据从 HDFS 移动到 Teradata(同样有一个带有代码的 shell 脚本,然后安排它)。

这首先是正确的选择吗?这在所需的时间段内是否可行(请注意,这不是每天的批次)?

我发现的其他选项如下

  1. STORM(用于实时数据处理)。但我找不到开箱即用的 oracle Spout 或 Teradata bolt。
  2. 任何开源 ETL 工具,例如 Talend 或 Pentaho。

请分享您对这些选项以及任何其他可能性的想法。

4

2 回答 2

5

看起来你有几个问题,所以让我们试着分解一下。

在 HDFS 中导入

看来您正在寻找Sqoop。Sqoop 是一个工具,可以让您轻松地将数据传入/传出 HDFS,并且可以连接到包括 Oracle 在内的各种数据库。Sqoop 与 Oracle JDBC 瘦驱动程序兼容。以下是从 Oracle 传输到 HDFS 的方法:

sqoop import --connect jdbc:oracle:thin@myhost:1521/db --username xxx --password yyy --table tbl --target-dir /path/to/dir

欲了解更多信息:这里这里。请注意,您也可以使用 Sqoop 直接导入 Hive 表,这可以方便您进行分析。

加工

正如您所指出的,由于您的数据最初是关系型的,因此使用 Hive 进行分析是一个好主意,因为您可能更熟悉类似 SQL 的语法。Pig 是更纯粹的关系代数,语法不像 SQL,它更像是一个偏好问题,但两种方法都应该可以正常工作。

由于您可以使用 Sqoop 直接将数据导入 Hive,因此您的数据应该在导入后直接准备好进行处理。

在 Hive 中,您可以运行查询并告诉它在 HDFS 中写入结果:

hive -e "insert overwrite directory '/path/to/output' select * from mytable ..."

导出到 TeraData

Cloudera 去年发布了一个用于 Sqoop 的 Teradata 连接器,如此处所述因此您应该查看一下,因为这看起来正是您想要的。以下是您的操作方法:

sqoop export --connect jdbc:teradata://localhost/DATABASE=MY_BASE --username sqooptest --password xxxxx --table MY_DATA --export-dir /path/to/hive/output

整个事情在您想要的任何时间段内都是绝对可行的,最终重要的是您的集群的大小,如果您想要它快速然后根据需要扩展您的集群。Hive 和 Sqoop 的好处是处理将分布在您的集群中,因此您可以完全控制计划。

于 2013-06-03T07:23:04.220 回答
1

如果您担心将数据从 Oracle 移动到 HDFS 的开销或延迟,一个可能的商业解决方案可能是 Dell Software 的 SharePlex。他们最近发布了一个 Hadoop 连接器,允许您将表数据从 Oracle 复制到 Hadoop。更多信息在这里

我不确定您是否需要每次重新处理整个数据集,或者可能只使用增量。SharePlex 还支持将更改数据复制到 JMS 队列。有可能创建一个从该队列读取的 Spout。您可能还可以构建自己的基于触发器的解决方案,但这需要一些工作。

作为披露,我为戴尔软件工作。

于 2013-08-23T15:44:56.130 回答