Sql 将Oracle数据导入Hadoop

Sql 将Oracle数据导入Hadoop,sql,oracle,hadoop,sqlplus,sqoop,Sql,Oracle,Hadoop,Sqlplus,Sqoop,预警:我是数据科学/数据工程师/hadoop领域的新手;我一直在寻找将大量数据(数百万行)导入我们已经建立的Hadoop集群的解决方案。数据库是Oracle,我一直在探索运行这种工作的多种方法;最终目标是尽可能接近集群内数据的实时导入 我在这里看到的第一项工作是通过使用sqlplus的shell文件。我创建了这个sql脚本来运行并将表和日期作为工作参数,然后为我们希望每天在集群中看到的特定表运行一个shell脚本。然后,可以将此任务安排为每晚自动执行。这种方法的问题在于,它似乎走得太慢了。据我所

预警:我是数据科学/数据工程师/hadoop领域的新手;我一直在寻找将大量数据(数百万行)导入我们已经建立的Hadoop集群的解决方案。数据库是Oracle,我一直在探索运行这种工作的多种方法;最终目标是尽可能接近集群内数据的实时导入

我在这里看到的第一项工作是通过使用sqlplus的shell文件。我创建了这个sql脚本来运行并将表和日期作为工作参数,然后为我们希望每天在集群中看到的特定表运行一个shell脚本。然后,可以将此任务安排为每晚自动执行。这种方法的问题在于,它似乎走得太慢了。据我所知,UTL_文件和Pro*C同样慢

这让我发现了Sqoop,我们已经安装了它,但我不明白的是为什么它比sqlplus快得多。使用SQLPlus,我只需选择table语句并将其假脱机到文本分隔文件(比如csv)中。这是一个过程。在Sqoop中,它是如何执行多个并行调用的

对此问题的任何见解都将不胜感激

你知道“UTL_文件和Pro*C同样慢”。。。你是怎么学的?你测量了什么?我想知道为什么Pro*C的速度应该很慢?毕竟是C

当导入到hadoop HDFS的速度比导入到本地文件系统的速度快时——它们都在可比较的磁盘上——那么肯定是因为一个正在进行顺序写入(附加块),而另一个正在写入随机块


当您想要接近实时导入时,您必须保持某种更改跟踪。在Oracle中执行此操作的最佳方法是使用物化视图日志。

Sqoop通过使用rowid的概念避免读取相同的Oracle块。这样做可以确保两个并行运行的任务不会从同一个Oracle块读取数据。这降低了数据库服务器上的磁盘操作,显著提高了性能。

我是说它们很慢,因为它们类似于按顺序写入行。这不是工具的错,而是它们的使用方式的错。即使是utl_文件也能够以接近os的速度写入文件