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。
该软件包可以到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.数据被读取出来了,竣工。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL推出Applier,可实时复制数据到Hadoop
http://labs.mysql.com MySQL复制操作可以将数据从一个MySQL服务器(主)复制到其他的一个或多个MySQL服务器(从)。试想一下,如果从服务器不再局限为一个MySQL服务器,而是其他任何数据库服务器或平台,并且复制事件要求实时进行,是否可以实现呢? MySQL团队最新推出的 MySQL Applier for Hadoop (以下简称Hadoop Applier)旨在解决这一问题。 用途 例如,复制事件中的从服务器可能是一个数据仓库系统,如 Apache Hive ,它使用Hadoop分布式文件系统( HDFS )作为数据存储区。如果你有一个与HDFS相关的Hive元存储,Hadoop Applier就可以实时填充Hive数据表。数据是从MySQL中以文本文件形式导出到HDFS,然后再填充到Hive。 操作很简单,只需在Hive运行HiveQL语句'CREATE TABLE',定义表的结构与MySQL相似,然后运行Hadoop Applier即可开始实时复制数据。 优势 在Hadoop Applier之前,还没有任何工具可以执行实时传输。之前的解决方案是通...
- 下一篇
hadoop下mahout bayes(贝叶斯)算法研究(1)
http://blog.csdn.net/zc55803903/article/details/7933126 1.算法简介 朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。 这二十个新闻组数据集合是收集大约20,000新闻组文档,均匀的分布在20个不同的集合。这20个新闻组集合采集最近流行的数据集合到文本程序中作为实验,根据机器学习技术。例如文本分类,文本聚集。我们将使用Mahout的Bayes Classifier创造一个模型,它将一个新文档分类到这20个新闻组集合范例演示 2.环境要求 hadoop已经开启 mahout已经安装 3.数据的准备 下载20news-bydate.tar.gz数据包并解压缩 http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz 例如:我已经把数据包放在/root/bayes下了,所以以下的命令都是...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程