ORACLE连接HADOOP(2) - HDFS专用SQL连接器ODCH

简介: http://www.5ienet.com/note/html/hadoop/oracle_direct_connector_for_hdfs.shtml 2、HDFS专用SQL连接器 使用ORACLE连接HDFS有个专项的解决方案[O]racle [D]irect [C]onnector for [H]adoop Distributed Files System,简称ODCH。

http://www.5ienet.com/note/html/hadoop/oracle_direct_connector_for_hdfs.shtml

2、HDFS专用SQL连接器

使用ORACLE连接HDFS有个专项的解决方案[O]racle [D]irect [C]onnector for [H]adoop Distributed Files System,简称ODCH。

该软件包可以到Oracle官网下载:http://www.oracle.com/technetwork/bdc/big-data-connectors/downloads/index.html

选择第一项:Oracle SQL Connector for Hadoop Distributed File System Release 2.1.0

我们这里使用2.1版本,下载到安装包后,解压即可:

  • [root@ora11g ~]# unzip oraosch-2.1.0.zip

变态呀,压缩包里还有压缩包:

[root@ora11g ~]# unzip orahdfs-2.1.0.zip -d /usr/local/

[root@ora11g ~]# chown -R oracle:oinstall /usr/local/orahdfs-2.1.0

在解压缩文件的bin中,hdfs_stream有两个环境变量需要手动指定,编辑该文件:

  • [root@ora11g ~]# vi /usr/local/orahdfs-2.1.0/bin/hdfs_stream

增加两行环境变量:

OSCH_HOME=/usr/local/orahdfs-2.1.0

HADOOP_HOME=/usr/local/hadoop-0.20.2

再次编辑grid用户环境变量:

  • [root@ora11g ~]$ vi /home/grid/.bash_profile

增加下列内容:

export DIRECTHDFS_HOME=/usr/local/orahdfs-2.1.0

export OSCH_HOME=${DIRECTHDFS_HOME}

export ORAHDFS_JAR=${DIRECTHDFS_HOME}/jlib/orahdfs.jar

export HDFS_BIN_PATH=${DIRECTHDFS_HOME}/bin

以oracle用户身份登录,创建两个目录,分别用于保存ODCH的操作日志和位置文件(location files):

[oracle@ora11g ~]$ mkdir /data/ora11g/ODCH/{logs,extdir} -p

[oracle@ora11g ~]$ chmod -R 777 /data/ora11g/ODCH/

而后以sysdba身份登录到ORACLE,创建3个directory对象:

SQL> create or replace directory ODCH_LOG_DIR as ¨/data/ora11g/ODCH/logs¨;

grant read, write on directory ODCH_LOG_DIR to SCOTT;

create or replace directory ODCH_DATA_DIR as ¨/data/ora11g/ODCH/extdir¨;

grant read, write on directory ODCH_DATA_DIR to SCOTT;

create or replace directory HDFS_BIN_PATH as ¨/usr/local/orahdfs-2.1.0/bin¨;

grant read,write,execute on directory HDFS_BIN_PATH to SCOTT;

Directory created.

SQL> 

Grant succeeded.

SQL> 

Directory created.

SQL> 

Grant succeeded.

SQL> 

Directory created.

SQL> 

Grant succeeded.
  • HDFS_BIN_PATH: hdfs_stream脚本所在目录.
  • XTAB_DATA_DIR:用来存放“位置文件”(location files)的目录。“位置文件”(location files) 是一个配置文件,里面包含HDFS的文件路径/文件名以及文件编码格式。 
  • ODCH_LOG_DIR, Oracle用来存放外部表的log/bad等文件的目录.

创建外部表,注意location目前是随便写的,随后还要再修改:

SQL> conn scott/tiger

Connected.

SQL> CREATE TABLE odch_ext_table

  2  (  ID NUMBER

  3    ,OWNER VARCHAR2(128)

  4    ,NAME VARCHAR2(128)

  5    ,MODIFIED DATE

  6    ,Val NUMBER

  7  ) ORGANIZATION EXTERNAL

  8  (TYPE oracle_loader

  9   DEFAULT DIRECTORY "ODCH_DATA_DIR"

 10   ACCESS PARAMETERS

 11   (

 12       records delimited by newline

 13       preprocessor HDFS_BIN_PATH:hdfs_stream

 14       badfile ODCH_LOG_DIR:¨odch_ext_table%a_%p.bad¨

 15       logfile ODCH_LOG_DIR:¨odch_ext_table%a_%p.log¨

 16       fields terminated by ¨,¨ OPTIONALLY ENCLOSED BY ¨"¨

 17       missing field values are null

 18       (

 19         ID DECIMAL EXTERNAL,

 20         OWNER CHAR(200),

 21         NAME CHAR(200),

 22         MODIFIED CHAR DATE_FORMAT DATE MASK "YYYY-MM-DD HH24:MI:SS",

 23         Val DECIMAL EXTERNAL

 24       )

 25    )

 26   LOCATION (¨odch/tmpdata.csv¨)

 27  ) PARALLEL REJECT LIMIT UNLIMITED;

Table created..

切换至grid用户,创建hdfs中的目录并上传文件到hdfs:

[grid@ora11g ~]$ hadoop dfs -mkdir odch

[grid@ora11g ~]$ hadoop dfs -put tmpdata.csv odch/

Tmpdata.csv文件是我们通过all_objects生成的,SQL脚本为:select rownum,owner,object_name,created,data_object_id from all_objects

然后,通过ODCH的jar包,生成位置文件:

[grid@ora11g ~]$ hadoop jar \

>    ${ORAHDFS_JAR} oracle.hadoop.hdfs.exttab.ExternalTable  \

>    -D oracle.hadoop.hdfs.exttab.tableName=odch_ext_table \

>    -D oracle.hadoop.hdfs.exttab.datasetPaths=odch \

>    -D oracle.hadoop.hdfs.exttab.datasetRegex=tmpdata.csv \

>    -D oracle.hadoop.hdfs.exttab.connection.url="jdbc:oracle:thin:@//192.168.30.244:1521/jssdb" \

>    -D oracle.hadoop.hdfs.exttab.connection.user=SCOTT \

>    -publish

DEPRECATED: The class oracle.hadoop.hdfs.exttab.ExternalTable is deprecated.

It is replaced by oracle.hadoop.exttab.ExternalTable.

Oracle SQL Connector for HDFS Release 2.1.0 - Production

Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.

[Enter Database Password:]

The publish command succeeded.

ALTER TABLE "SCOTT"."ODCH_EXT_TABLE" 

LOCATION

(

  ¨osch-20130516031513-6000-1¨

);

The following location files were created.

osch-20130516031513-6000-1 contains 1 URI, 4685141 bytes

     4685141 hdfs://hdnode1:9000/user/grid/odch/tmpdata.csv

The following location files were deleted.

odch/tmpdata.csv not deleted. It was not created by OSCH.

其中,-D:指定相关参数

  • tableName:外部表名字
  • datasetPaths:源数据存放路径(HDFS)
  • datasetRegex:数据文件名
  • connection.url:oracle数据库连接串
  • connection.user:数据库用户名scott

这个生成的osch-20130516031513-6000-1就是所谓的位置文件,真正指明我们的目标数据文件,在HDFS保存的位置,查看下文件内容就明白了:

[root@ora11g ~]# more /data/ora11g/ODCH/extdir/osch-20130516031513-6000-1 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<locationFile>

    <header>

        <version>1.0</version>

        <fileName>osch-20130516031513-6000-1</fileName>

        <createDate>2013-05-16T13:54:02</createDate>

        <publishDate>2013-05-16T03:15:13</publishDate>

        <productName>Oracle SQL Connector for HDFS Release 2.1.0 - Production</productName>

        <productVersion>2.1.0</productVersion>

    </header>

    <uri_list>

        <uri_list_item size="4685141" compressionCodec="">hdfs://hdnode1:9000/user/grid/odch/tmpdata.csv</uri_list_item>

    </uri_list>

</locationFile>

根据提示修改odch_ext_table外部表读取的文件:

SQL> ALTER TABLE "SCOTT"."ODCH_EXT_TABLE" 

  2     LOCATION

  3     (

  4       ¨osch-20130516031513-6000-1¨

  5  );

Table altered.

SQL> set line 150 pages 1000;

SQL> col owner for a10

SQL> col name for a20

SQL> select * from odch_ext_table where rownum<10;

        ID OWNER      NAME                 MODIFIED            VAL

---------- ---------- -------------------- ------------ ----------

         1 SYS        ICOL$                15-MAY-13             2

         2 SYS        I_USER1              15-MAY-13            46

         3 SYS        CON$                 15-MAY-13            28

         4 SYS        UNDO$                15-MAY-13            15

         5 SYS        C_COBJ#              15-MAY-13            29

         6 SYS        I_OBJ#               15-MAY-13             3

         7 SYS        PROXY_ROLE_DATA$     15-MAY-13            25

         8 SYS        I_IND1               15-MAY-13            41

         9 SYS        I_CDEF2              15-MAY-13            54

9 rows selected.

数据被读取出来了,竣工。

目录
相关文章
|
5天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
2月前
|
Java 关系型数据库 分布式数据库
Flink报错问题之flink-sql写hdfs报错如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
89 0
|
5天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
5天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
5天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
5天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。
|
1月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
|
1月前
|
SQL Oracle 关系型数据库
Oracle系列十一:PL/SQL
Oracle系列十一:PL/SQL

热门文章

最新文章

推荐镜像

更多