将数据从oracle移动到HDFS,处理并从HDFS移动到Teradata



我的要求是

  1. 将数据从Oracle移动到HDFS
  2. 在HDFS处理数据
  3. 将处理过的数据移动到Teradata。

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

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

  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。

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

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

导入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去年发布了一个用于Teradata的Sqoop连接器,如下所述,因此您应该查看一下,因为它看起来正是您想要的。你可以这样做:

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

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

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

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

说明一下,我在戴尔软件公司工作。