【问题标题】:Move data from oracle to HDFS, process and move to Teradata from HDFS将数据从 oracle 移动到 HDFS,处理并从 HDFS 移动到 Teradata
【发布时间】:2013-05-29 05:01:18
【问题描述】:

我的要求是

  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。

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

【问题讨论】:

  • 对不起,这是错字。它实际上是 50 GB。
  • Storm 可以解决这个问题,但正如您已经发现的那样,没有预建的 spout 和 bolts 来满足您的需要,因此您必须自己创建它们。也就是说,如果您发现您的解决方案无法以足够快的速度移动,您可能需要考虑使用 Storm 来处理数据,因为它在启动并运行后比使用 hadoop 具有更低的开销。

标签: oracle hadoop teradata apache-storm


【解决方案1】:

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

在 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

欲了解更多信息:herehere。请注意,您还可以使用 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 连接器,如 here 所述,因此您应该看看,因为这看起来正是您想要的。以下是你的做法:

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

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

【讨论】:

  • 谢谢查尔斯。关于处理的另一个问题,如果处理有复杂的转换和流程怎么办?在这里安装 Talend 或 Pentaho 有意义吗?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 2012-07-17
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多