动手实验2OLHbj.docx

上传人:b****9 文档编号:25161469 上传时间:2023-06-05 格式:DOCX 页数:22 大小:22.25KB
下载 相关 举报
动手实验2OLHbj.docx_第1页
第1页 / 共22页
动手实验2OLHbj.docx_第2页
第2页 / 共22页
动手实验2OLHbj.docx_第3页
第3页 / 共22页
动手实验2OLHbj.docx_第4页
第4页 / 共22页
动手实验2OLHbj.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

动手实验2OLHbj.docx

《动手实验2OLHbj.docx》由会员分享,可在线阅读,更多相关《动手实验2OLHbj.docx(22页珍藏版)》请在冰豆网上搜索。

动手实验2OLHbj.docx

动手实验2OLHbj

动手实验:

OracleHadoop装载程序

实验环境2

实验1:

装载Hadoop文件到数据库3

步骤1:

创建目标表3

步骤2:

在Hadoop中放入示例文件3

步骤3:

运行OracleHadoop装载程序3

步骤4:

验证结果4

实验2:

装载Hadoo文件到DataPump格式文件5

步骤1:

创建目标表5

步骤2:

在Hadoop中放入示例文件5

步骤3:

运行OracleHadoop装载程序5

步骤4:

把生成的文件取回到本地6

步骤5:

将文件以外部表附加到数据库6

步骤6:

检查结果7

步骤7:

导入数据7

步骤8:

再次检查结果7

实验3:

装载Hadoo文件到预分区的DataPump格式文件8

步骤1:

创建目标表8

步骤2:

在Hadoop中放入示例文件8

步骤3:

运行OracleHadoop装载程序9

步骤4:

把生成的文件取回到本地9

步骤5:

将部分文件以外部表附加到数据库10

步骤6:

检查结果11

步骤7:

把其他分区附加到数据库11

步骤8:

再次检查结果11

实验4:

装载多个Hadoop文件12

步骤1:

创建目标表12

步骤2:

在Hadoop中放入示例文件12

步骤3:

运行OracleHadoop装载程序,使用文件名通配符12

步骤4:

检查结果13

步骤5:

运行OracleHadoop装载程序,使用文件名列表13

步骤6:

再次检查结果14

实验环境

软件环境:

本实验主要由以下软件搭建而成:

OracleEnterpriseLinux,Oracle11g,JavaSE6update30,ApacheHadoop,OracleConnectorforHadoop等.

实验用到的文件:

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

环境变量:

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

变量名

变量值

ORACLE_HOME

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

HADOOP_HOME

/opt/hadoop

OLH_HOME

/opt/OLH

OLH_JAR

OLH_HOME/jlib/oraloader.jar

HADOOP_CONF_DIR

${HADOOP_HOME}/conf

ORACLE_SID

orcl

一些有用的信息

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

项目

虚拟机IP

172.16.22.131

虚拟机主机名

bigdata01

HadoopdefaultFS

hdfs:

//bigdata01:

9000

HadoopJobTrackerURL

hdfs:

//bigdata01:

9001

实验用操作系统用户密码

hadoop/oracle

实验用数据库用户密码

Scott/tiger

操作系统oracle用户密码

oracle/oracle

数据库超级用户

sys/oracle

操作系统超级用户

root/oracle

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

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

用hadoop/oracle登录172.16.22.131.

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

PROMPT>env

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

检查hadoop是否正常.

PROMPT>hadoopdfsadmin-report

检查数据库是否正常

PROMPT>sqlplusscott/tiger

SQL>select*fromtab;

实验1:

装载Hadoop文件到数据库

在实验1里,我们将会把一个Hadoop文件系统上的文件装载到数据库中(使用JDBC连接)。

这是OLH的最基本功能。

步骤1:

创建目标表

首先,我们在数据库中新建一个表,我们的数据将会装载到这个表里.

检查脚本文件并运行之:

PROMPT>cd/home/hadoop/training/OLH

PROMPT>sqlplusscott/tiger

SQL>!

catlab1.1_target_tab.sql

--Droptableiftableexists

droptableolh_tablepurge;

--createtableolh_table(col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date);

createtableolh_table(

col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date);

SQL>@lab1.1_target_tab.sql;

步骤2:

在Hadoop中放入示例文件

因为OLH需要从Hadoop文件系统中读取数据,所以我们先要在Hadoop中放入一个的数据文件。

下面的脚本先在Hadoop中建立一个目录,然后把data.dat放入该目录中.

检查脚本文件并运行之:

PROMPT>cat./lab1.2_init_hadoop_files.sh

#Setupinputdirectory

hadoopfs-rmrolh_lab_in

hadoopfs-mkdirolh_lab_in

hadoopfs-putolh_lab.datolh_lab_in/data.dat

PROMPT>./lab1.2_init_hadoop_files.sh

步骤3:

运行OracleHadoop装载程序

我们现在就可以开始装载程序了.

检查脚本文件:

PROMPT>cat./lab1.3_run_loader.sh

hadoopfs-rmrolh_lab_out

hadoopjar$OLH_JARoracle.hadoop.loader.OraLoader-confMyConf.xml

在装载程序中,需要建立一个在Hadoop中新建一个目录,用来存放”_SUCCESS”和”_logs”文件;在使用离线装载选项时,还有可能需要存放一些离线装载的文件。

所以,我们先要确保没有该目录,以免创建失败。

装载程序需要读取一些配置信息,在这个例子中,我们使用配置文件:

MyConf.xml.仔细检查MyConf.xml.文件里包含里一些运行OLH所需的主要参数,如下表所示:

表:

OLH的主要参数

mapreduce.inputformat.class

指定输入文件的格式。

除了文本文件,还支持hive格式文件。

也可以是自定义的文件格式。

mapred.input.dir

Hadoop里输入的数据文件(含路径)

mapreduce.outputformat.class

指定装载的输出方式

在线装载:

OCIOutputFormat(*),JDBCOutputFormat

离线装载:

DataPumptOutputFormat,DelimitedTextOutputFormat

mapred.output.dir

输出目录(同时也是LOG所在目录)

oracle.hadoop.loader.loaderMapFile

文件与表的对应关系,包括表名,栏位对应等

oracle.hadoop.loader.connection.url/user/pass

目标数据库的连接信息,包括url,用户名,密码

(注:

OCIOutputFormat只支持64位的Linux)

对于实验1,最关键参数是mapreduce.outputformat.class,确保它的值是JDBCOutputFormat.

运行脚本文件.

PROMPT>./lab1.3_run_loader.sh

除了使用-conf=配置文件,我们也可以用“-D参数=值”的方式来传递参数,而且,-D方式会覆盖-conf设定的值.

比如:

hadoopjar${OLH_JAR}oracle.hadoop.loader.OraLoader-Dmapred.input.dirolh_lab_in-Dmapreduce.inputformat.classoracle.hadoop.loader.lib.input.DelimitedTextInputFormat

….

步骤4:

验证结果

登录到数据库,检查数据是否已经成功进入到数据库

PROMPT>sqlplusscott/tiger

SQL>selectcount(*)fromolh_table;

10000

返回10000,表示我们已经成功装载了10000行记录到数据库里面了.

实验2:

装载Hadoop文件到DataPump格式文件

我们也可以不直接把数据装载到数据库,而是装载成为datapump格式文件.再根据需要使用该文件。

步骤1:

创建目标表

首先,我们在数据库中新建一个表,我们的datapump的格式定义根据这个表产生.

检查脚本文件并运行之:

PROMPT>cd/home/hadoop/training/OLH

PROMPT>sqlplusscott/tiger

SQL>!

catlab2.1_target_tab.sql

--Droptableiftableexists

droptableolh_tablepurge;

--createtableolh_table(col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date);

createtableolh_table(

col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date);

SQL>@lab2.1_target_tab.sql;

步骤2:

在Hadoop中放入示例文件

和实验1一样,在HDFS中创建新的数据文件.

检查脚本文件并运行之:

PROMPT>cat./lab2.2_init_hadoop_files.sh

#Setupinputdirectory

hadoopfs-rmrolh_lab_in

hadoopfs-mkdirolh_lab_in

hadoopfs-putolh_lab.datolh_lab_in/data.dat

PROMPT>./lab2.2_init_hadoop_files.sh

步骤3:

运行OracleHadoop装载程序

开始运行装载程序之前,需要编辑文件MyConf.xml。

把参数mapreduce.outputformat.class的值修改成oracle.hadoop.loader.lib.output.DataPumpOutputFormat。

当然,也可以直接在命令行中指定该参数.

(vi简单操作提示:

按i或者a进入编辑模式,按esc退出编辑模式,输入:

wq保存并退出,输入:

q!

退出但不保存)

PROMPT>viMyConf.xml

mapreduce.outputformat.class

oracle.hadoop.loader.lib.output.DataPumpOutputFormat

检查脚本文件并运行之:

PROMPT>cat./lab2.3_run_loader.sh

hadoopfs-rmrolh_lab_out

hadoopjar$OLH_JARoracle.hadoop.loader.OraLoader-confMyConf.xml\

-Dmapreduce.outputformat.class=oracle.hadoop.loader.lib.output.DataPumpOutputFormat

PROMPT>./lab2.3_run_loader.sh

步骤4:

把生成的文件取回到本地

通过离线装载选项,OLH已经生成了一个Oracle可以直接访问的文件.我们需要把这个文件先拷贝到本地文件系统.由于在后面的操作中,Oracle需要使用文件所在目录,所以我们直接拷贝整个out目录,并授予oracle用户读写权限。

检查脚本文件并运行之:

PROMPT>catlab2.4_get_datapump_files.sh

rm-rfdatapumpfiles

hadoopfs-getolh_lab_outdatapumpfiles

chmod777datapumpfiles

PROMPT>./lab2.4_get_datapump_files.sh

步骤5:

将文件以外部表附加到数据库

OLH在生成离线文件同时,也生成了一个用来创建外部表的脚本<输出目录>/oraloader-dp.sql.我们可以通过编辑文件,来创建外部表.首先,把脚本中的目录改为实际目录(/home/hadoop/training/OLH/datapumpfiles),然后,去掉“CREATEORREPLACEDIRECTORY”前面的注释标记,即可运行.

CREATEORREPLACEDIRECTORYOLH_EXTTAB_DIRAS'/home/hadoop/training/OLH/datapumpfiles';

step5_load_dpfile_as_ext_tab.sql是已经修改好的文件。

检查脚本文件并运行之:

PROMPT>sqlplusscott/tiger

SQL>!

catstep5_load_dpfile_as_ext_tab.sql

--OracleLoaderforHadoopRelease1.1.0.0.1-Production

--

--Copyright(c)2011,Oracleand/oritsaffiliates.Allrightsreserved.

--

--GeneratedbyDataPumpOutputFormat

--

CREATEORREPLACEDIRECTORYOLH_EXTTAB_DIRAS

'/home/hadoop/training/OLH/datapumpfiles';

--GRANTREAD,WRITEONDIRECTORYOLH_EXTTAB_DIRTOSCOTT;

--

--ALTERSESSIONENABLEPARALLELDML;

--INSERTINTO"SCOTT"."OLH_TABLE"SELECT*FROM"SCOTT"."EXT_OLH_TABLE";

--

droptable"SCOTT"."EXT_OLH_TABLE";

CREATETABLE"SCOTT"."EXT_OLH_TABLE"

"COL1"NUMBER,

"COL2"VARCHAR2(30),

"COL3"VARCHAR2(128),

"COL4"DATE

ORGANIZATIONEXTERNAL

(TYPEORACLE_DATAPUMP

DEFAULTDIRECTORYOLH_EXTTAB_DIR

LOCATION('oraloader-00000-dp-0.dat')

);

SQL>@lab2.5_load_dpfile_as_ext_tab.sql

步骤6:

检查结果

SQL>selectcount(*)fromEXT_OLH_TABLE;

10000

结果显示,我们已经成功的以外部表形式访问到数据。

步骤7:

导入数据

我们也可以通过insert/select语句把数据真正导入到数据库中。

检查脚本文件并运行之:

SQL>!

catlab2.7_load_to_heap_table.sql

--Droptableiftableexists

droptableolh_tablepurge;

--createtableolh_table(col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date);

createtableolh_table(

col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date

);

INSERTINTO"SCOTT"."OLH_TABLE"SELECT*FROM"SCOTT"."EXT_OLH_TABLE";

SQL>@lab2.7_load_to_heap_table.sql

步骤8:

再次检查结果

SQL>selectcount(*)fromolh_table;

10000

结果显示,数据成功导入到数据库。

实验3:

装载Hadoop文件到预分区的DataPump格式文件

OLH支持把Hadoop文件根据数据库内定义的分区条件,在Hadoop中把数据文件装载成预分区的DataPump文件,每个文件对应一个分区。

步骤1:

创建目标表

首先,我们在数据库中新建一个分区表,以第一个栏位为分区条件(value=0/1/2),我们的datapump输出文件将这个表的分区条件自动生成多个文件.

检查脚本文件并运行之:

PROMPT>cd/home/hadoop/training/OLH

PROMPT>sqlplusscott/tiger

SQL>!

catlab3.1_target_tab.sql

--Droptableiftableexists

droptableolh_parted_tablepurge;

--createtableolh_parted_table(part_keynumber,col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date)partition..;

createtableolh_parted_table(

part_keynumber,col1NUMBER,col2VARCHAR2(30),col3VARCHAR2(128),col4date

partitionbylist(part_key)

partitionp0values(0),

partitionp1values

(1),

partitionp2values

(2),

partitionpnvalues(default)

;

SQL>@lab3.1_target_tab.sql;

步骤2:

在Hadoop中放入示例文件

和实验1一样,在HDFS中创建新的数据文件。

为了更为直观,文件中第一栏等于0的数据会比1/2的数据稍多.我们可以通过脚本简单计算一下:

PROMPT>awk-F,'{a[$1]++}END{for(iina)print"KEY="i":

",a[i],"rows"}'olh_lab_with_part_key.dat

PART_KEY=0:

4010rows

PART_KEY=1:

2990rows

PART_KEY=2:

3000rows

检查脚本文件并运行之:

PROMPT>cat./lab3.2_init_hadoop_files.sh

#Setupinputdirectory

hadoopfs-rmrolh_lab_in

hadoopfs-mkdirolh_lab_in

hadoopfs-putolh_lab_with_part_key.datolh_lab_in/data.dat

PROMPT>./lab3.2_init_hadoop_files.sh

步骤3:

运行OracleHadoop装载程序

开始运行装载程序之前,由于表结构和文件结构有所变化,需要把oracle.hadoop.loader.loaderMapFile参数指向一个新的Mapping文件。

编辑MyConf.xml,设置oracle.hadoop.loader.loaderMapFile=file:

///home/hadoop/training/OLH/loaderMap_lab_part_tab.xml

当然,这个参数也可以直接在命令行中指定。

PROMPT>viMyConf.xml

mapreduce.outputformat.class

oracle.hadoop.loader.lib.output.DataPumpOutputFormat

oracle.hadoop.loader.loaderMapFile

file:

///home/hadoop/training/OLH/loaderMap_lab_part_tab.xml

同时看一下loaderMap_lab_part_tab.xml文件,了解一下新的mapping关系:

PROMPT>catloaderMap_lab_part_tab.xml

xmlversion="1.0"encoding="UTF-8"?

>

SCOTT

OLH_PARTED_TABLE

PART_KEY

COL1

COL2

COL3

mm:

ss">COL4

检查脚本文件并运行之:

PROMPT>cat./lab3.3_run_loader.sh

hadoopfs-rmrolh_lab_out

hadoopjar$OLH_JARoracle.hadoop.loader.OraLoader-conf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1