我想从oracle数据库中提取一些数据并将其传输到远程hdfs文件系统。实现这一点似乎有两种可能的方法:
使用sqoop。这个工具将提取数据,通过网络将其复制并直接存储到hdfs中
使用sql读取数据并存储在本地文件系统中。完成后,将数据复制(ftp?)到hadoop系统。
我的问题是,第一种方法(对我来说工作较少)是否会导致oracle锁定表的时间超过要求?
我担心的是,当sqoop开始查询数据时,它可能会在数据库上设置一个锁,在所有数据都被复制到hdfs之前,这个锁不会被释放。由于我将提取大量数据并将其复制到远程位置(因此将存在显著的网络延迟),因此锁的保留时间将比其他情况下所需的时间长。
1条答案
按热度按时间dm7nw8vv1#
sqoop在oraclebatabase上发出通常的select查询,因此它执行与select查询相同的锁。sqoop不执行额外的锁定。
数据将在多个并发任务(Map器)中传输。任何昂贵的函数调用都会给数据库服务器带来巨大的性能负担。高级函数可以锁定某些表,防止sqoop并行传输数据。这将对传输性能产生不利影响。
为了实现高效的高级过滤,请在导入之前对数据库运行过滤查询,将其输出保存到临时表中,然后运行sqoop将临时表导入到hadoop中,而不使用-where参数。
sqoop导入与跨网络的数据拷贝无关。sqoop存储在一个位置,并根据集群的复制因子hdfs复制数据