2019独角兽企业重金招聘Python工程师标准>>>

动手实验: Oracle HDFS直接连接器

动手实验: Oracle HDFS直接连接器... 1

实验环境... 2

实验 1: 直接访问单个 HDFS 文件... 3

步骤1: 配置操作系统的目录和数据库的Directory对象... 3

步骤2: 创建外部表... 3

步骤3: 在Hadoop中放入示例文件... 3

步骤4: 生成“位置文件”... 3

步骤5: 检查结果... 3

步骤6: 改动HDFS文件,检查结果. 错误!未定义书签。

实验2: 直接访问多个HDFS文件... 3

步骤1: 配置目录/Directory对象,和实验1一样. 3

步骤2: 创建外部表,包含多个位置文件... 3

步骤3: 在HDFS生成一组文件. 3

步骤4: 创建指向一组文件的位置文件... 3

步骤5: 检查结果... 3

步骤6: 删除部分文件,从数据库中检查结果: 3


实验环境

软件环境:

本实验主要由以下软件搭建而成: Oracle Enterprise Linux, Oracle 11g, Java SE6pdate30, Apache Hadoop, Oracle Connector for Hadoop等.

实验用到的文件:

实验用到的文件保存在 /home/hadoop/training/ODCH 底下. 包括脚本文件以及一些示例数据文件。

环境变量:

在文件olhodchenv.sh中保存实验中需要用到的环境变量. 为了简化操作,已经在实验中的$HOME/.bash_profile引用该文件,这些环境变量会自动生效。

变量名

变量值

ORACLE_HOME

/home/oracle/app/oracle/product/11.2.0/dbhome_2

HADOOP_HOME

/opt/hadoop

DIRECTHDFS_HOME

/opt/ODCH

ORAHDFS_JAR

$DIRECTHDFS_HOME /jlib/orahdfs.jar

HDFS_BIN_PATH

$DIRECTHDFS_HOME /bin

HADOOP_CONF_DIR

${HADOOP_HOME}/conf

ORACLE_SID

orcl

一些有用的信息

下表中也列出了实验中可能需要的一些信息.

项目

虚拟机 IP

172.16.22.131

虚拟机主机名

bigdata01

Hadoop default FS

hdfs://bigdata01:9000

Hadoop Job Tracker URL

hdfs://bigdata01:9001

实验用操作系统用户密码

hadoop/oracle

实验用数据库用户密码

Scott/tiger

操作系统oracle用户密码

oracle/oracle

数据库超级用户

sys/oracle

操作系统超级用户

root/oracle

文档中‘PROMPT>’指的是操作系统SHELL的输入界面

SQL ->’指的是Oracle SQL*Plus的输入界面

用hadoop/oracle登录172.16.22.131.

检查环境变量是否正确设置.

PROMPT> env

应该能看到上面提到的环境变量.

检查hadoop是否正常.

PROMPT> hadoop dfsadmin -report

检查数据库是否正常

PROMPT> sqlplus scott/tiger

SQL> select * from tab;

配置hdfs_stream script文件


实验 4: 直接访问HDFS数据文件

Oracle的HDFS直接连接器允许从数据库中直接访问HDFS的数据文件。 支持的数据文件格式取决于ORACLE_LOADER的驱动程序。

在实验1里, 我们将会直接访问HDFS上的几个带分割符的文本文件。我们可以在数据库中用SQL来查询该文件。

步骤1: 配置hdfs_stream script文件

在使用直接连接器前,需要配置hdfs_stream 脚本. hdfs_stream 是 包含在ODCH的安装包中(ODCH_HOME/bin). 我们需要在脚本中指定HADOOP_HOME和DIRECTHDFS_HOME.

PROMPT> cd /home/hadoop/training/ODCH

PROMPT> vi ${DIRECTHDFS_HOME}/bin/hdfs_stream

export HADOOP_HOME=/opt/hadoop

export DIRECTHDFS_HOME=/opt/ODCH

另外Oracle用户需要在 {$DIRECTHDFS_LOG_DIR} 目录中创建log/bad文件. 所以要确保Oracle用户有读写权限.

PROMPT> su - oracle

PROMPT> touch /opt/ODCH/log/oracle_access_test

PROMPT> rm /opt/ODCH/log/oracle_access_test

步骤2: 配置操作系统的目录和数据库的Directory对象

在ODCH里面,需要用到3个Directory对象:

HDFS_BIN_PATH: hdfs_stream脚本所在目录.

XTAB_DATA_DIR用来存放“位置文件”(location files)的目录。“位置文件”(location files) 是一个配置文件,里面包含HDFS的文件路径/文件名以及文件编码格式。

ODCH_LOG_DIR, Oracle用来存放外部表的log/bad等文件的目录.

对于第一个目录,已经在操作系统存在。对于第二和第三个目录,我们将会在操作系统中新创建,并且授予oracle用户读写权限。

检查脚本文件并运行之:

PROMPT> cat lab4.2_setup_os_dir.sh

mkdir -p /home/hadoop/training/ODCH/logs

mkdir -p /home/hadoop/training/ODCH/extdir

chmod 777 /home/hadoop/training/ODCH/logs

chmod 777 /home/hadoop/training/ODCH/extdir

PROMPT> ./lab4.2_setup_os_dir.sh

连接到数据库,建立相应的3个Directory对象,以及相关授权。

PROMPT> sqlplus 'sys/oracle as sysdba'

检查脚本文件并运行之:

SQL> !cat lab4.2_setup_DB_dir.sql

SET ECHO ON

create or replace directory ODCH_LOG_DIR as '/home/hadoop/training/ODCH/logs';

grant read, write on directory ODCH_LOG_DIR to SCOTT;

create or replace directory ODCH_DATA_DIR as '/home/hadoop/training/ODCH/extdir';

grant read, write on directory ODCH_DATA_DIR to SCOTT;

create or replace directory HDFS_BIN_PATH as '/opt/ODCH/bin';

grant execute on directory HDFS_BIN_PATH to SCOTT;

SQL> @lab4.2_setup_DB_dir.sql

步骤3: 创建外部表

我们将会创建外部表,里面有个ODCH的关键参数--“preprocessor HDFS_BIN_PATH:hdfs_stream”。

另外,下面SQL脚本中的LOCATION对应的文件不用预先存在,我们会在步骤4中生成。

在LOCATION中使用多个文件,可以使Oracle可以多个程序并行访问HDFS。

PROMPT> sqlplus scott/tiger

检查脚本文件并运行之:

SQL> !cat lab4.3_ext_tab.sql

drop table odch_ext_table;

CREATE TABLE odch_ext_table

( ID NUMBER

,OWNER VARCHAR2(128)

,NAME VARCHAR2(128)

,MODIFIED DATE

,Val NUMBER

) ORGANIZATION EXTERNAL

(TYPE oracle_loader

DEFAULT DIRECTORY "ODCH_DATA_DIR"

ACCESS PARAMETERS

(

records delimited by newline

preprocessor HDFS_BIN_PATH:hdfs_stream

badfile ODCH_LOG_DIR:'odch_ext_table%a_%p.bad'

logfile ODCH_LOG_DIR:'odch_ext_table%a_%p.log'

fields terminated by ','

missing field values are null

(

ID DECIMAL EXTERNAL,

OWNER CHAR(200),

NAME CHAR(200),

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

Val DECIMAL EXTERNAL

)

)

LOCATION (

'odch_ext_table1.loc',

'odch_ext_table2.loc',

'odch_ext_table3.loc',

'odch_ext_table4.loc'

)

) PARALLEL REJECT LIMIT UNLIMITED;;

SQL> @lab4.3_ext_tab.sql

步骤4: 在Hadoop中放入示例文件

ODCH从Hadoop文件系统中读取数据. 所以我们先要在Hadoop中放入几个的数据文件. 下面的脚本先在Hadoop中建立一个目录,然后把odch*.dat放入该目录中.

检查脚本文件并运行之:

PROMPT> cat lab4.4_hdfs_setup.sh

${HADOOP_HOME}/bin/hadoop fs -rmr odch_data

${HADOOP_HOME}/bin/hadoop fs -mkdir odch_data

${HADOOP_HOME}/bin/hadoop fs -put odch*.dat odch_data

echo "rows in file:"

wc -l odch*.dat

PROMPT> ./lab4.4_hdfs_setup.sh

步骤5: 生成“位置文件”

我们需要让Oracle Hadoop直接连接器知道需要访问的HDFS上的文件路径。下面运行的程序将会生成包含HDFS上文件路径的“位置文件”。

检查脚本文件并运行之

PROMPT>cat lab4.5_create_loc_file.sh

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_data \

-D oracle.hadoop.hdfs.exttab.datasetRegex=odch*.dat \

-D oracle.hadoop.hdfs.exttab.connection.url="jdbc:oracle:thin:@//172.16.22.131:1521/orcl" \

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

-publish

PROMPT> ./lab4.5_create_loc_file.sh

需要输入数据库用户的密码,本实验中是 ‘tiger’.

检查位置文件内容.

PROMPT> cat /home/hadoop/training/ODCH/extdir/odch_ext_table*.loc

CompressionCodec=

hdfs://bigdata01:9000/user/hadoop/odch_data/odch.dat

这里 CompressionCodec 是默认值, HDFS 文件指向 hdfs://bigdata01:9000/user/hadoop/odch_data/odch.dat

步骤7: 检查结果

PROMPT> sqlplus scott/tiger

SQL> select count(*) from odch_ext_table;

90000

91000是符合odch.*.dat文件的总行数.

我们可以在sqlplus中设置 autotrace , 看看执行计划中是否有并行操作(“PX”)出现.

SQL> set autotrace trace exp

SQL> select count(*) from odch_ext_para_table;

Execution Plan

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

Plan hash value: 2012719727

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

| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |

| 0 | SELECT STATEMENT | | 1 | 16(0)| 00:00:01 | | | |

| 1 | SORT AGGREGATE | | 1 | | | | | |

| 2 | PX COORDINATOR | | | | | | | |

| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |

| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |

| 5 | PX BLOCK ITERATOR | | 8168 | 16 (0)| 00:00:01 | Q1,00 | PCWC | |

| 6 | EXTERNAL TABLE ACCESS FULL| ODCH_EXT_PARA_TABLE | 8168 | 16 (0)| 00:00:01 | Q1,00 | PCWP | |

当然,我们也可以进行其他的SQL语句,比如join, where,group之类的。我们也可以通过Create Table As Select方式将数据完全装载到数据库中。

步骤7: 删除部分文件,从数据库中检查结果:

PROMPT> hadoop fs -rm odch_data/odch1.dat

SQL> select count(*) from odch_ext_para_table;

41000

数据已经更新。

实验2: 直接访问多个HDFS文件

和实验1不一样,我们也可以使用多个HDFS文件作为Oracle外部表的输入。而且,在存在多个HDFS的情况下,我们可以通过指定多个位置文件,从而允许Oracle并行的访问HDFS文件.

步骤1: 配置目录/Directory对象,和实验1一样.

运行脚本文件:

PROMPT> ./lab2.1_setup_os_dir.sh

PROMPT> sqlplus sys/oracle as sysdba

SQL> @lab2.1_setup_DB_dir.sql

步骤2: 创建外部表,包含多个位置文件

多个位置文件允许Oracle并行的访问多个HDFS文件.

检查脚本文件并运行之:

PROMPT> sqlplus scott/tiger

SQL> !cat lab2.2_ext_para_tab.sql

drop table odch_ext_para_table;

CREATE TABLE odch_ext_para_table

( ID NUMBER

,OWNER VARCHAR2(128)

,NAME VARCHAR2(128)

,MODIFIED DATE

,Val NUMBER

) ORGANIZATION EXTERNAL

(TYPE oracle_loader

DEFAULT DIRECTORY "ODCH_DATA_DIR"

ACCESS PARAMETERS

(

records delimited by newline

preprocessor HDFS_BIN_PATH:hdfs_stream

badfile ODCH_LOG_DIR:'odch_ext_para_table%a_%p.bad'

logfile ODCH_LOG_DIR:'odch_ext_para_table%a_%p.log'

fields terminated by ','

missing field values are null

(

ID DECIMAL EXTERNAL,

OWNER CHAR(200),

NAME CHAR(200),

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

Val DECIMAL EXTERNAL

)

)

LOCATION (

'dch_ext_table_1.loc',

'dch_ext_table_2.loc',

'dch_ext_table_3.loc',

'dch_ext_table_4.loc'

)

) PARALLEL REJECT LIMIT UNLIMITED;

SQL>@lab2.2_ext_para_tab.sql

步骤3: 在HDFS生成一组文件.

我们将在HDFS中生成一组文件,文件名应该有一些共性,以便使用表达式.

检查脚本文件并运行之:

PROMPT> cat lab2.3_hdfs_setup_grp.sh

${HADOOP_HOME}/bin/hadoop fs -rmr odch_data

${HADOOP_HOME}/bin/hadoop fs -mkdir odch_data

${HADOOP_HOME}/bin/hadoop fs -put odch*.dat odch_data/

echo "rows in file:"

wc -l odch*.dat

PROMPT> ./lab2.3_hdfs_setup_grp.sh

步骤4: 创建指向一组文件的位置文件

检查脚本文件并运行之:

PROMPT> cat ./lab2.4_create_mul_loc_files.sh

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

-D oracle.hadoop.hdfs.exttab.tableName=odch_ext_para_table \

-D oracle.hadoop.hdfs.exttab.datasetPaths=odch_data \

-D oracle.hadoop.hdfs.exttab.datasetRegex=odch.*.dat \

-D oracle.hadoop.hdfs.exttab.connection.url="jdbc:oracle:thin:@//localhost.localdomain:1521/orcl" \

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

-publish

PROMPT> ./lab2.4_create_mul_loc_files.sh

步骤5: 检查结果

PROMPT> sqlplus scott/tiger

SQL> select count(*) from odch_ext_para_table;

91000

91000是符合odch.*.dat文件的总行数.

我们可以在sqlplus中设置 autotrace , 看看执行计划中是否有并行操作(“PX”)出现.

SQL> set autotrace trace exp

SQL> select count(*) from odch_ext_para_table;

COUNT(*)

----------

91000

Execution Plan

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

Plan hash value: 2012719727

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

| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |

| 0 | SELECT STATEMENT | | 1 | 16(0)| 00:00:01 | | | |

| 1 | SORT AGGREGATE | | 1 | | | | | |

| 2 | PX COORDINATOR | | | | | | | |

| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,00 | P->S | QC (RAND) |

| 4 | SORT AGGREGATE | | 1 | | | Q1,00 | PCWP | |

| 5 | PX BLOCK ITERATOR | | 8168 | 16 (0)| 00:00:01 | Q1,00 | PCWC | |

| 6 | EXTERNAL TABLE ACCESS FULL| ODCH_EXT_PARA_TABLE | 8168 | 16 (0)| 00:00:01 | Q1,00 | PCWP | |

步骤6: 删除部分文件,从数据库中检查结果:

PROMPT> hadoop fs -rm odch_data/odch1.dat

SQL> select count(*) from odch_ext_para_table;

41000

数据已经更新。

转载于:https://my.oschina.net/u/1462191/blog/213840

动手实验2-ODCH(11)相关推荐

  1. Windows 8 动手实验系列教程 实验8:Windows应用商店API

    动手实验 实验 8: Windows应用商店API 2012年9月 简介 编写Windows应用商店应用最令人瞩目的理由之一是您可以方便地将它们发布到Windows应用商店.考虑到世界范围内目前有超过 ...

  2. Windows 8 动手实验系列教程 实验6:设置和首选项

    动手实验 实验6:设置和首选项 2012年9月 简介 实验3介绍了合约并演示了应用程序如何轻松地与共享和搜索合约实现集成.合约同样包含设置超级按钮,它对活动的Windows应用商店应用的设置进行修改. ...

  3. BizTalk动手实验(十六)EDI-AS2解决文案开发配置

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 1 课程简介 通过本课程熟悉EDI.AS2解决文案的开发与配置,本动手实验步骤及内 ...

  4. 考前建议:好好看一下 《网络工程师考试案例动手实验营》附录A

    考前建议:好好看一下 <网络工程师考试案例动手实验营>附录A  网络工程师考试大纲 中评析的内容(P432),特别是新增知识点部分. http://product.dangdang.com ...

  5. Win2008 R2 VDI动手实验系列之二:远程桌面虚拟化主机配置

    远程桌面虚拟化主机配置 在Win2008 R2 VDI动手实验系列的上篇文章中,我们部署了一个contoso.com域,而且把六台计算机都加入了域中,拓扑如下图所示.本文中我们要对RDVH计算机进行配 ...

  6. Tech ED的课程和动手实验营讲义已经发布,需要的赶紧去下载

    Tech ED的课程和动手实验营讲义已经发布,需要的赶紧去下载. http://technet.microsoft.com/zh-CN/gg182756.aspx

  7. 准备翻译Windows 8 动手实验系列教程

    Windows 8动手实验教程(http://msdn.microsoft.com/zh-cn/windows/apps/jj674832.aspx)包含了一个系列的 8 个动手实验模块,将为您提供 ...

  8. ACT5.6 动手实验手册 如何在工作组模式下对客户端进行数据收集 如何在AD域环境下对...

    ACT5.6 动手实验手册 实验的目标 这个实验的目的是: · 了解如何部署ACT5.6 · 了解如何在工作组模式下对客户端进行数据收集 · 了解如何在AD域环境下对客户端进行数据收集 本次试验大约6 ...

  9. Win2008 R2 VDI动手实验系列之一:Active Directory搭建

    Win2008 R2 VDI动手实验系列之一:Active Directory搭建 2010-03-22 23:54:45 标签:动手实验 VDI R2 休闲 Win2008 原创作品,允许转载,转载 ...

最新文章

  1. 一篇文章搞懂JavaScript运行机制
  2. Android小項目之---ListView实现论坛管理效果(附源碼)
  3. idea 打包不出现target的原因
  4. 大数据背景下网络舆情监督机制的研究(非原创)
  5. Unity编辑器拓展(GraphView制作对话系统编辑器)
  6. BAT自动校对时间脚本,让WINDOWS系统自动校对时间
  7. php处理表单上传文件
  8. NFT交易平台2.0来了,源代码,智能合约整套
  9. iOS 支持webrtc的浏览器 bowser
  10. Seaborn的调色板(palette)
  11. 典型Π型RC滤波电路
  12. 各种电平标准的讨论(TTL,ECL,PECL,LVDS、CMOS、CML.......)
  13. 项目构建,发布平台(一)
  14. countdown软件测试死亡时间真假,countdown
  15. Part5:RPA机器人的6项能力8大优势9大特征
  16. 【Mathematica】 Mathematica 的安装
  17. 深入学习缓存一致性问题和缓存一致性协议MESI(二)
  18. 【嵌入式05】串口协议+RS-232、485标准+CH430芯片的“USB/TTL转232”
  19. 串口485接法图_终于有人把常用的三种通讯方式:RS485、RS232、RS422讲明白了
  20. 【PTA】客观题11

热门文章

  1. Ubuntu修改终端@前面的用户名
  2. 谷歌大幅削减其应用商店服务费
  3. 如何在Linux系统上部署接口测试环境
  4. 如何彻底解决pip install慢的问题
  5. 语言转4字节数据整型_R语言与RGui平台_数据类型_向量_4
  6. android程序设计期末试题b,《Android程序设计》期末试题B.doc
  7. 迁移学习之MobileNet(88层)和MobileNetV2(88层)
  8. [NOI2002] 银河英雄传说(带权并查集好题)
  9. 计算机二级c真题108套,2016年计算机二级108套程序.docx
  10. java预处理指令region_VS #region