2

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

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

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

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

4

1 回答 1

1
  • Sqoop 在 Oracle 数据库上发出通常的选择查询,因此它执行与选择查询相同的锁定。Sqoop 不会执行额外的附加锁定。

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

  • 为了进行高效的高级过滤,在导入之前在您的数据库上运行过滤查询,将其输出保存到临时表中,然后运行 ​​Sqoop 将临时表导入到 Hadoop 中,而无需使用 --where 参数。

  • Sqoop 导入与跨网络的数据复制无关。Sqoop 存储在一个位置并根据集群的复制因子 HDFS 复制数据

于 2016-02-16T17:44:33.180 回答