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

lea*_*man 7 oracle hadoop teradata apache-storm

我的要求是

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

还需要每15分钟进行一次整个处理.源数据的量可以接近50GB,并且处理的数据也可以是相同的.

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

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

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

我发现的其他选项如下

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

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

Cha*_*guy 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
Run Code Online (Sandbox Code Playgroud)

有关更多信息:此处此处.请注意,您也可以直接导入带有Sqoop的Hive表,这样可以方便地进行分析.

处理

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

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

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

hive -e "insert overwrite directory '/path/to/output' select * from mytable ..."
Run Code Online (Sandbox Code Playgroud)

导出到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
Run Code Online (Sandbox Code Playgroud)

整个过程绝对可以在你想要的任何时间段内完成,最终重要的是群集的大小,如果你想快速,那么根据需要扩展你的群集.Hive和Sqoop的好处是处理将在您的集群中分发,因此您可以完全控制计划.