动手实验2ODCHbjWord文档格式.docx
《动手实验2ODCHbjWord文档格式.docx》由会员分享,可在线阅读,更多相关《动手实验2ODCHbjWord文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
软件环境:
本实验主要由以下软件搭建而成:
OracleEnterpriseLinux,Oracle11g,JavaSE6pdate30,ApacheHadoop,OracleConnectorforHadoop等.
实验用到的文件:
实验用到的文件保存在/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
HadoopdefaultFS
hdfs:
//bigdata01:
9000
HadoopJobTrackerURL
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是否正常.
hadoopdfsadmin-report
检查数据库是否正常
sqlplusscott/tiger
SQL>
select*fromtab;
配置hdfs_streamscript文件
实验4:
直接访问HDFS数据文件
Oracle的HDFS直接连接器允许从数据库中直接访问HDFS的数据文件。
支持的数据文件格式取决于ORACLE_LOADER的驱动程序。
在实验1里,我们将会直接访问HDFS上的几个带分割符的文本文件。
我们可以在数据库中用SQL来查询该文件。
配置hdfs_streamscript文件
在使用直接连接器前,需要配置hdfs_stream脚本.hdfs_stream是包含在ODCH的安装包中(ODCH_HOME/bin).我们需要在脚本中指定HADOOP_HOME和DIRECTHDFS_HOME.
cd/home/hadoop/training/ODCH
vi${DIRECTHDFS_HOME}/bin/hdfs_stream
…
exportHADOOP_HOME=/opt/hadoop
…
exportDIRECTHDFS_HOME=/opt/ODCH
另外Oracle用户需要在{$DIRECTHDFS_LOG_DIR}目录中创建log/bad文件.所以要确保Oracle用户有读写权限.
su-oracle
touch/opt/ODCH/log/oracle_access_test
rm/opt/ODCH/log/oracle_access_test
配置操作系统的目录和数据库的Directory对象
在ODCH里面,需要用到3个Directory对象:
HDFS_BIN_PATH:
hdfs_stream脚本所在目录.
XTAB_DATA_DIR:
用来存放“位置文件”(locationfiles)的目录。
“位置文件”(locationfiles)是一个配置文件,里面包含HDFS的文件路径/文件名以及文件编码格式。
ODCH_LOG_DIR,Oracle用来存放外部表的log/bad等文件的目录.
对于第一个目录,已经在操作系统存在。
对于第二和第三个目录,我们将会在操作系统中新创建,并且授予oracle用户读写权限。
检查脚本文件并运行之:
catlab4.2_setup_os_dir.sh
mkdir-p/home/hadoop/training/ODCH/logs
mkdir-p/home/hadoop/training/ODCH/extdir
chmod777/home/hadoop/training/ODCH/logs
chmod777/home/hadoop/training/ODCH/extdir
./lab4.2_setup_os_dir.sh
连接到数据库,建立相应的3个Directory对象,以及相关授权。
sqlplus'
sys/oracleassysdba'
!
catlab4.2_setup_DB_dir.sql
SETECHOON
createorreplacedirectoryODCH_LOG_DIRas'
/home/hadoop/training/ODCH/logs'
;
grantread,writeondirectoryODCH_LOG_DIRtoSCOTT;
createorreplacedirectoryODCH_DATA_DIRas'
/home/hadoop/training/ODCH/extdir'
grantread,writeondirectoryODCH_DATA_DIRtoSCOTT;
createorreplacedirectoryHDFS_BIN_PATHas'
/opt/ODCH/bin'
grantexecuteondirectoryHDFS_BIN_PATHtoSCOTT;
@lab4.2_setup_DB_dir.sql
创建外部表
我们将会创建外部表,里面有个ODCH的关键参数--“preprocessorHDFS_BIN_PATH:
hdfs_stream”。
另外,下面SQL脚本中的LOCATION对应的文件不用预先存在,我们会在步骤4中生成。
在LOCATION中使用多个文件,可以使Oracle可以多个程序并行访问HDFS。
catlab4.3_ext_tab.sql
droptableodch_ext_table;
CREATETABLEodch_ext_table
(IDNUMBER
OWNERVARCHAR2(128)
NAMEVARCHAR2(128)
MODIFIEDDATE
ValNUMBER
)ORGANIZATIONEXTERNAL
(TYPEoracle_loader
DEFAULTDIRECTORY"
ODCH_DATA_DIR"
ACCESSPARAMETERS
(
recordsdelimitedbynewline
preprocessorHDFS_BIN_PATH:
hdfs_stream
badfileODCH_LOG_DIR:
'
odch_ext_table%a_%p.bad'
logfileODCH_LOG_DIR:
odch_ext_table%a_%p.log'
fieldsterminatedby'
'
missingfieldvaluesarenull
IDDECIMALEXTERNAL,
OWNERCHAR(200),
NAMECHAR(200),
MODIFIEDCHARDATE_FORMATDATEMASK"
YYYY-MM-DDHH24:
MI:
SS"
ValDECIMALEXTERNAL
)
LOCATION(
odch_ext_table1.loc'
,
odch_ext_table2.loc'
odch_ext_table3.loc'
odch_ext_table4.loc'
)
)PARALLELREJECTLIMITUNLIMITED;
@lab4.3_ext_tab.sql
在Hadoop中放入示例文件
ODCH从Hadoop文件系统中读取数据.所以我们先要在Hadoop中放入几个的数据文件.下面的脚本先在Hadoop中建立一个目录,然后把odch*.dat放入该目录中.
catlab4.4_hdfs_setup.sh
${HADOOP_HOME}/bin/hadoopfs-rmrodch_data
${HADOOP_HOME}/bin/hadoopfs-mkdirodch_data
${HADOOP_HOME}/bin/hadoopfs-putodch*.datodch_data
echo"
rowsinfile:
"
wc-lodch*.dat
./lab4.4_hdfs_setup.sh
生成“位置文件”
我们需要让OracleHadoop直接连接器知道需要访问的HDFS上的文件路径。
下面运行的程序将会生成包含HDFS上文件路径的“位置文件”。
检查脚本文件并运行之
catlab4.5_create_loc_file.sh
hadoopjar\
${ORAHDFS_JAR}oracle.hadoop.hdfs.exttab.ExternalTable\
-Doracle.hadoop.hdfs.exttab.tableName=odch_ext_table\
-Doracle.hadoop.hdfs.exttab.datasetPaths=odch_data\
-Doracle.hadoop.hdfs.exttab.datasetRegex=odch*.dat\
-Doracle.hadoop.hdfs.exttab.connection.url="
jdbc:
oracle:
thin:
@//172.16.22.131:
1521/orcl"
\
-Doracle.hadoop.hdfs.exttab.connection.user=SCOTT\
-publish
./lab4.5_create_loc_file.sh
需要输入数据库用户的密码,本实验中是‘tiger’.
检查位置文件内容.
cat/home/hadoop/training/ODCH/extdir/odch_ext_table*.loc
CompressionCodec=
9000/user/hadoop/odch_data/odch.dat
这里CompressionCodec是默认值,HDFS文件指向hdfs:
步骤7:
检查结果
selectcount(*)fromodch_ext_table;
90000
91000是符合odch.*.dat的文件的总行数.
我们可以在sqlplus中设置autotrace,看看执行计划中是否有并行操作(“PX”)出现.
setautotracetraceexp
selectcount(*)fromodch_ext_para_table;
ExecutionPlan
----------------------------------------------------------
Planhashvalue:
2012719727
----------------------------------------------------------------------------------------------------------------------------
|Id|Operation|Name|Rows|Cost(%CPU)|Time|TQ|IN-OUT|PQDistrib|
|0|SELECTSTATEMENT||1|16(0)|00:
00:
01||||
|1|SORTAGGREGATE||1||||||
|2|PXCOORDINATOR||||||||
|3|PXSENDQC(RANDOM)|:
TQ10000|1|||Q1,00|P->
S|QC(RAND)|
|4|SORTAGGREGATE||1|||Q1,00|PCWP||
|5|PXBLOCKITERATOR||8168|16(0)|00:
01|Q1,00|PCWC||
|6|EXTERNALTABLEACCESSFULL|ODCH_EXT_PARA_TABLE|8168|16(0)|00:
01|Q1,00|PCWP||
当然,我们也可以进行其他的SQL语句,比如join,where,group之类的。
我们也可以通过CreateTableAsSelect方式将数据完全装载到数据库中。
hadoopfs-rmodch_data/odch1.dat
41000
数据已经更新。
直接访问多个HDFS文件
和实验1不一样,我们也可以使用多个HDFS文件作为Oracle外部表的输入。
而且,在存在多个HDFS的情况下,我们可以通过指定多个位置文件,从而允许Oracle并行的访问HDFS文件.
配置目录/Directory对象,和实验1一样.
运行脚本文件:
./lab2.1_setup_os_dir.sh
sqlplussys/oracleassysdba
@lab2.1_setup_DB_dir.sql
创建外部表,包含多个位置文件
多个位置文件允许Oracle并行的访问多个HDFS文件.
catlab2.2_ext_para_tab.sql
droptableodch_ext_para_table;
CREATETABLEodch_ext_para_table
odch_ext_para_table%a_%p.bad'
odch_ext_para_table%a_%p.log'
'
dch_ext_table_1.loc'
dch_ext_table_2.loc'
dch_ext_table_3.loc'
dch_ext_table_4.loc'
SQL>
@lab2.2_ext_para_tab.sql
在HDFS生成一组文件.
我们将在HDFS中生成一组文件,文件名应该有一些共性,以便使用表达式.
catlab2.3_hdfs_setup_grp.sh
${HADOOP_HOME}/bin/hadoopfs-putodch*.datodch_data/
./lab2.3_hdfs_setup_grp.sh
创建指向一组文件的位置文件
cat./lab2.4_create_mul_loc_files.sh
hadoopjar${ORAHDFS_JAR}oracle.hadoop.hdfs.exttab.ExternalTable\
-Doracle.hadoop.hdfs.exttab.tableName=odch_ext_para_table\
-Doracle.hadoop.hdfs.exttab.datasetRegex=odch.*.dat\
@//localhost.localdomain:
./lab2.4_create_mul_loc_files.sh
91000
COUNT(*)
----------
91000
hadoopfs-