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

时间:2013-06-03 04:34:20

标签: oracle hadoop teradata apache-storm

我的要求是

  
      
  1. 将数据从Oracle移至HDFS
  2.   
  3. 处理HDFS上的数据
  4.   
  5. 将处理后的数据移至Teradata。
  6.   

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

在网上搜索了很多,我找到了

  
      
  1. ORAOOP将数据从Oracle移动到HDFS(使用shell脚本编写代码并安排它以所需的时间间隔运行)。
  2.   
  3. 通过Custom MapReduce或Hive或PIG进行大规模处理。
  4.   
  5. SQOOP - 用于将数据从HDFS移动到Teradata的Teradata Connector(再次使用带有代码的shell脚本然后安排它)。
  6.   

首先这是正确的选择,这是否适用于所需的时间段(请注意,这不是每日批次)?

我找到的其他选项如下

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

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

2 个答案:

答案 0 :(得分: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

有关详细信息:herehere。请注意,您也可以直接导入带有Sqoop的Hive表,这样可以方便地进行分析。

处理

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

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

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

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

导出到TeraData

Cloudera去年发布了Teradata for Sqoop连接器,如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的好处是处理将在您的集群中分发,因此您可以完全控制计划。

答案 1 :(得分:1)

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

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

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