预警:我是数据科学/数据工程师/hadoop领域的新手;我一直在寻找将大量数据(数百万行)导入我们已经建立的hadoop集群的解决方案。数据库是oracle,我一直在探索许多方法来运行这样的工作;最终目标是尽可能接近集群内数据的实时导入。
我在这里看到的第一项工作是使用sqlplus的shell文件。我创建了这个sql脚本来运行并将表和日期作为工作参数,然后为我们希望每天在集群中看到的特定表运行shell脚本。然后,可以将此任务安排为每晚自动执行。这种方法的问题是,它似乎走得太慢了。据我所知,utl\u文件和pro*c同样很慢。
这使我发现了sqoop,我们确实安装了它,但我不明白的是为什么它比sqlplus快得多。使用sqlplus,我只需选择table语句并将其假脱机到一个文本分隔文件(比如csv)中。这是一个过程。在sqoop中,它是如何处理多个并行调用的?
对这个问题的任何见解都将不胜感激!
2条答案
按热度按时间tnkciper1#
sqoop利用rowid的概念避免了读取相同的oracle块。这样做可以确保没有两个并行运行的任务从同一个oracle块读取数据。这降低了数据库服务器上的磁盘操作,显著提高了性能。
fumotvh32#
你知道“utl\u文件和proc同样慢”。。。你是怎么学会的?你测量了什么?我在想为什么proc要慢?毕竟是c。
当导入到hadoop hdfs的速度比导入到本地文件系统的速度快时—而且它们都在可比较的磁盘上—那么肯定是因为一个在进行顺序写入(附加块),而另一个在写入随机块。。。
当您想要接近实时导入时,您必须保持某种更改跟踪。在oracle中,最好的方法是使用物化视图日志。