2016-02-16 69 views
0

我正在寻找从Oracle数据库提取一些数据并将其传输到远程HDFS文件系统。似乎有几个可能的方法来实现这一点:将数据从Oracle提取到Hadoop。 Sqoop是一个好主意

  1. 使用Sqoop。此工具将提取数据,将其复制到网络中并直接存储到HDFS中
  2. 使用SQL读取数据并存储在本地文件系统中。完成后,将数据复制(ftp?)到Hadoop系统。

我的问题是第一种方法(对我来说工作会减少)会导致Oracle锁定表的时间超过所需时间?

我担心的是,Sqoop可能会在数据库开始查询数据时取消锁定,并且在所有数据都被复制到HDFS之前,这个锁定不会被释放。由于我将提取大量数据并将其复制到远程位置(所以会出现严重的网络延迟),因此锁的使用时间将比所需的时间长。

回答

0
  • Sqoop问题通常选择查询上的Oracle batabase,所以它 相同的锁和会选择查询。由Sqoop执行没有额外的额外锁定 。

  • 数据将在几个并发任务(映射器)中传输。任何 昂贵的函数调用都会给您的数据库服务器带来显着的性能负担。高级功能可以锁定某些表, 阻止Sqoop并行传输数据。这会对传输性能产生不利影响。

  • 对于高效先进的过滤,您 数据库运行过滤查询进口,其输出保存到一个临时表和 运行Sqoop导入临时表到Hadoop的不-where参数之前。

  • Sqoop导入与网络中的数据副本无关。在一个位置 Sqoop商店和基于的 复制因子集群HDFS复制数据

+0

感谢您的信息,这是真的很有帮助。我得知,一旦查询完成,锁将被释放,但是你知道这是在数据传输到HDFS之前还是之后?这一点很重要,因为转换时间可能很长,我不希望锁持续时间超过他们需要的时间。 – Stormcloud

相关问题