轻松实现Oracle数据提取:SQOOP操作详解 (sqoop抽取oracle数据库)


在现代大数据分析的时代,数据提取和处理是至关重要的一步。其中,如何从Oracle数据库中提取数据并将其转移到其他基于Hadoop的分布式计算系统中已成为数据工程师必备的技能之一。为了更好地满足这一需求,SQOOP成为了一款备受欢迎的数据提取工具。

什么是SQOOP

SQOOP是一款开源软件,是Apache Hadoop生态系统中的重要组成部分,其全称为“一款针对关系型数据库提供数据传递的工具”(The tool for transferring bulk data between Apache Hadoop and structured datastores such as relational databases.)。SQOOP使用Java编写,广泛应用于将数据库中的数据转移到Hadoop分布式计算系统中。

SQOOP支持MySQL、PostgreSQL、Oracle、SQL Server等不同类型的数据库,并能够将提取的数据转存到Hadoop分布式文件系统、HBase、Hive等。

SQOOP的工作原理

SQOOP工作的基本原理是将关系型数据库中的数据以文本(或二进制)文件的形式输出到Hadoop分布式文件系统中,并将其转换为Hadoop数据结构(例如Avro)或Hive数据格式(例如ORC)。换句话说,SQOOP的原理是从关系型数据库中提取数据,并将其转移到Hadoop生态系统中,最终与其他数据进行融合,以实现更好的数据处理和分析。

使用SQOOP提取Oracle数据库的数据

在使用SQOOP提取Oracle数据库数据时,需要进行如下几个步骤:

1. 准备工作:你需要使用一个JDBC驱动程序用于连接Oracle数据库,虽然Apache提供了一些默认的JDBC驱动程序,但是并不支持Oracle数据库。如果需要使用Oracle数据库,需要首先安装Oracle JDBC驱动程序。请注意版本的兼容性。另外,你还需要安装并配置Hadoop分布式计算系统并创建一个HDFS路径。

2. 使用Sqoop进行Oracle数据库数据提取:

以下是使用Sqoop提取Oracle数据库的示例代码:

sqoop import

–connect jdbc:oracle:thin:username/password@host:port/sid

–table table_name

–target-dir /user/hadoop/oracle_table_name

–verbose

–num-mapper 4

-username username

-password password

其中,connect参数用于指定数据库和用户名和密码,table参数用于指定要导入的表,target-dir参数用于指定存储这些数据的HDFS路径,verbose参数用于将详细信息输出到终端,num-mapper参数用于指定使用的mapper数量。

3. 检查数据是否导入:

你可以使用以下命令来检查数据是否成功导入:

hadoop fs -cat /user/hadoop/oracle_table_name/Part-m-00000

其中,oracle_table_name是之前指定的目标文件夹。

使用SQOOP将Oracle数据库数据导入Hive表

SQOOP不仅可以将Oracle数据导入到Hadoop分布式文件系统中,还可以将其导入到Hive表中。使用以下命令可以将Oracle数据库数据导入到Hive表:

sqoop import

–connect jdbc:oracle:thin:username/password@host:port/sid

–table table_name

–create-hive-table

–hive-table hive_table_name

–fields-terminated-by ‘\t’

–lines-terminated-by ‘\n’

–null-string ‘\\N’

–null-non-string ‘\\N’

其中,create-hive-table用于指定在Hive中创建一个新的表,hive-table参数用于指定在Hive中创建的表的名称,fields-terminated-by参数用于指定字段的分隔符,lines-terminated-by参数用于指定行的终止符,null-string和null-non-string参数用于指定在数据中表示‘null’值的字符串。

通过使用SQOOP,你可以轻松地将Oracle数据库中的数据移植到Hadoop生态系统中,为数据处理和分析奠定基础。转移数据的详细过程需要注意一些细节。但是,一旦了解了SQOOP的使用方法,你会发现它极大地简化了数据提取、转换和加载的复杂任务,使得从Oracle数据库到Hadoop环境中的数据流转如此之简单。

相关问题拓展阅读:

  • 将oracle库的千万级数据导到postgres中,怎样配置dataX的参数才能达到更高效率?
  • 现在Oracle中有一张表,要使用sqoop实时增量导入,没有自增id,也没有对应时间,怎么办?

将oracle库的千万级数据导到postgres中,怎样配置dataX的参数才能达到更高效率?

在企业级大数据平台的建设中,从传统关系型数据库(如Oracle)向Hadoop平台汇聚数据是一个重要的课题。目前主流的工具有Sqoop、DataX、Oracle GoldenGate for Big Data等几种。Sqoop使用sql语句获取关系型数据库让漏中的数据后,通过hadoop的MapReduce把数据从关系型数据库中导入数据到HDFS,其通过指定递增列或者根据时间戳达到增量导入的目的,从原理上来说是一种离线批量导入技术;DataX 直接在运行DataX的机器上进行数据的抽取及加载,其主要原理为:通过Reader插大坦件读取源数据,Writer插件写入数据到目标 ,使用Job来控制同步作业,也是一种离线批量导入技术;Oracle Goldengate for Big Data抽取在线日志中的数据变化,转换为GGS自定义的数据格式存放在本地队列或远端队列中,并利用TCP/IP传输数据变化,集成数据压缩,提供理论可达到9:1压缩比的数据压缩特性,它简化了向常用大数据解决方案的实时数据交付,可以在不影响源系统性能的情况下将交易数据坦仿烂实时传入大数据系统。对比以上工具及方法,结合数据处理的准确性及实时性要求,我们评估Oracle Goldengate for Big Data基本可以满足当前大数据平台数据抽取的需求。

现在Oracle中有一张表,要使用sqoop实时增量导入,没有自增id,也没有对应时间,怎么办?

sqoop使用hsql来存储job信息,开启metastor service将job信息共享,所有node上的sqoop都可以运行同一个job

一、sqoop的码谈配置文件在sqoop.site.xml中:

1、sqoop.metastore.server.location

本地存储路径,默认在tmp下,改为其他路径

2、sqoop.metastore.server.port

metastore service端口号

3、sqoop.metastore.client.autoconnect.url

sqoop自动连接的metastore地址,默认是本地饥丛的metastore地址

4、sqoop.metastore.client.enable.autoconnect

开启自动连接。sqoop默认连接本地metastore。注释这个配置会开启自动连接。

二、开启metastore service

sqoop下,nohup bin/sqoop metastore

三、创建job

sqoop支持两种增量导入模式,

一种是 append,即通过指定一个递增的列,比如:

–incremental append –check-column num_iid –last-value 0

varchar类型的check字段也可以通过这种方式增量导入(ID为varchar类型的递增数字):

–incremental append –check-column ID –last-value 8

另种是可以根据时间戳,比如:

–incremental lastmodified –check-column created –last-value ‘:0:00’

就是只导入created 比’:0:00’更大的数据。

bin/sqoop job –meta-connect jdbc:hsqldb: –create job_zyztest13 — import –connect jdbc:oracle:thin:@10.106.1.236:1521:orcl –username SQOOP –password sqoop –table LXC_TEST_HBASE_TO_ORACLE –columns NAME,SEX,AGE,CSRQ -m 1 –hbase-table SQOOP_IMPORT_TEST3 –column-family info –hbase-row-key NAME –split-by NAME –incremental lastmodified –check-column CSRQ –last-value ‘:0:00’ –verbose

nohup /opt/hadoopcluster/sqoop-1.4.2.bin__hadoop-2.0.0-alpha/bin/sqoop job –exec job_zyztest13 > job_zyztest13.out 2>&1 &

此时,在10.106.1.234上创建了job_zyztest13这个job,通过bin/sqoop job –meta-connect jdbc:hsqldb: –list可以查看所有job

四、定时执行

使用linux定时器:烂模樱crontab -e

编辑定时器,添加*/4 * * * * /opt/hadoopcluster/sqoop-1.4.2.bin__hadoop-2.0.0-alpha/bin/sqoop job –meta-connect jdbc:hsqldb: –exec job_zyztest13 > job_zyztest13.out 2>&1 & 任务将会每四分钟执行一次

关于sqoop抽取oracle数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。