将数据从Oracle提取到Hadoop。Sqoop是个好主意吗

将数据从Oracle提取到Hadoop。Sqoop是个好主意吗,oracle,hadoop,sqoop2,sqoop,Oracle,Hadoop,Sqoop2,Sqoop,我希望从Oracle数据库中提取一些数据,并将其传输到远程HDFS文件系统。似乎有几种可能的方法可以实现这一点: 使用Sqoop。该工具将提取数据,通过网络将其复制,并将其直接存储到HDFS中 使用SQL读取数据并存储在本地文件系统中。完成后,将数据复制(ftp?)到Hadoop系统 我的问题是,第一种方法(对我来说工作较少)是否会导致Oracle锁定表的时间超过要求 我担心的是,当Sqoop开始查询数据时,它可能会在数据库上打开一个锁,在所有数据都复制到HDFS之前,这个锁不会被释放。由于我将

我希望从Oracle数据库中提取一些数据,并将其传输到远程HDFS文件系统。似乎有几种可能的方法可以实现这一点:

  • 使用Sqoop。该工具将提取数据,通过网络将其复制,并将其直接存储到HDFS中
  • 使用SQL读取数据并存储在本地文件系统中。完成后,将数据复制(ftp?)到Hadoop系统
  • 我的问题是,第一种方法(对我来说工作较少)是否会导致Oracle锁定表的时间超过要求

    我担心的是,当Sqoop开始查询数据时,它可能会在数据库上打开一个锁,在所有数据都复制到HDFS之前,这个锁不会被释放。由于我将提取大量数据并将其复制到远程位置(因此会有显著的网络延迟),因此锁定时间将比其他情况下需要的时间更长。

    • Sqoop在OracleBatabase上发出了常见的select查询,它也是这样做的 与select查询相同的锁。没有额外的锁 由Sqoop执行

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

    • 要实现高效的高级筛选,请在服务器上运行筛选查询 数据库导入之前,将其输出保存到临时表中,然后 运行Sqoop将临时表导入Hadoop,而不使用-where参数

    • Sqoop导入与跨网络访问的数据拷贝无关。 Sqoop存储在一个位置,并基于 集群HDFS复制数据


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