我的要求是
- Move data from Oracle to HDFS
- Process the data on HDFS
- Move processed data to Teradata.
还需要每15分钟进行一次整个处理.源数据的量可以接近50GB,并且处理的数据也可以是相同的.
经过互联网搜索后,我发现了
- ORAOOP to move data from Oracle to HDFS (Have the code withing the shell script and schedule it to run at the required interval).
- Do large scale processing either by Custom MapReduce or Hive or PIG.
- SQOOP – Teradata Connector to move data from HDFS to Teradata (again have a shell script with the code and then schedule it).
这是一个正确的选择,这是否适用于所需的时间段(请注意,这不是每日批次)?
我发现的其他选项如下
- STORM (for real time data processing). But i am not able to find the oracle Spout or Teradata bolt out of the Box.
- Any open source ETL tools like Talend or 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
有关更多信息:here和here.请注意,您也可以直接导入带有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的好处是处理将在您的集群中分发,因此您可以完全控制计划.