1 前言
????
????企业在建设数据平台过程中,凭借大数据解决方案,企业能够收集处理大量低结构化的原始数据(如 ?Web ?日志、社交媒体数据、电子邮件、传感器数据和位置数据),它们可以为业务应用程序提供丰富的实用信息。同时,在企业中关系数据库(大多数商业应用所采用的平台)中包含一些关键数据。在实施全数据分析的过程中,通常需要结合关系数据库中的数据和Hadoop数据池数据,从而获取更深入的洞察。
????然而,Hadoop 上的数据必须经过一系列技术和工具(即“连接器”)的处理后才可由数据库进行分析。本文主要描述了如何实现快速加载Hadoop上的海量数据导入到Oracle关系数据库中,以帮助企业实现真正的全数据分析。
2??Oracle Big Data Connector介绍
2.1?Oracle Big Data Connectors介绍
??? ?Oracle Big Data Connectors 是Oracle开发的一个用于集成 Apache Hadoop 发行版与 Oracle ?数据库的软件套件。它赋予了使用 Hadoop 处理和分析大量数据,同时结合使用Oracle数据库数据以获得新的关键业务洞察的能力。?
Oracle ?Big Data Connectors 将 Hadoop 与 Oracle 数据库连接在一起,并针对 Hadoop 和 Oracle ?数据库进行了优化,为大数据解决方案提供了必要的基础架构。它包括将数据从 Hadoop 快速加载到 Oracle 数据库的工具、在 Hadoop 与 ?Oracle 数据库之间进行数据访问的工具,以及在 Hadoop 中执行 R 和 XML ?分析的工具,以支持信息发现、深度分析,以及企业中所有数据的快速集成。
这个软件套件包含以下组件:
Oracle Loader for Hadoop
Oracle SQL Connector for Hadoop Distributed File System (HDFS)
Oracle Data source for Apache Hadoop
Oracle Advanced Analytics for Hadoop
Oracle XQuery for Hadoop
?
Oracle Big Data Connectors 同时支持企业私有部署和云部署,为大数据应用程序提供了丰富的特性、安全性和高速连通性。
?
?
本文主要介绍了其中的OracleLoader for Hadoop(OLH)这个组件,实现了将Hadoop数据快速导入到Oracle数据库的数据集成能力。
2.2?Oracle Loader For Hadoop介绍
Oracle ?Loader for Hadoop(OLH) 是一个可将数据从 Hadoop 快速导入Oracle 数据库的高性能加载工具。Oracle ?Loader for Hadoop实现原理是在Hadoop 上利用Hadoop ?计算资源对数据进行分类、分区、数据类型转换,然后再加载到数据库中。首先,OLH将数据转换为Oracle 类型减少了加载过程中对数据库 CPU ?的使用,从而极大地减少了对数据库应用程序的影响。其次,OLH采用了创新的采样技术,可智能地将数据采集分布到各个Hadoop节点,同时以并行方式加载数据。第三,OLH ?它本身可以支持多种来源加载数据:文本文件、Hive 表、日志文件(解析并加载)、Oracle NoSQL Database ?等。此外,Oracle Loader for Hadoop 还可以通过用户提供的自定义输入格式实现来读取专有的数据格式。
其中OLH具备以下一些特点:
OLH 加载选项描述:
Oracle ?Loaderfor Hadoop 提供了联机和脱机加载选项。使用联机加载选项时,预处理数据和将数据加载到数据库都是 OracleLoader ?for Hadoop 作业的必要环节。每项化简任务都会与 Oracle 数据库建立一个连接,从而并行地将数据加载到数据库。数据库必须在 ?Oracle Loader for Hadoop 执行处理期间维持可用性。
使用脱机加载选项时,每个化简任务都会创建一个写入到 HDFS 的 Oracle 数据泵文件。在此期间,数据库可以处于脱机状态。随后,用户可以使用 Oracle Direct Connector for HDFS 将数据加载到数据库中。
本文主要介绍了联机加载选项。
3?? Oracle Load For Hadoop(OLH)安装配置
3.1?部署结构图
OLH ?作为一个Java ?Application,通过运行Mapreduce作业,利用大数据平台的分布式计算能力,完成对Hadoop上的文件进行数据读取,类型识别和转换工作,采用数据流的方式,将数据从Hadoop上采集后通过数据库OCI接口写入Oracle数据库中,从而实现Oracle数据表加载来自Hadoop大数据平台HDFS、Hive等的数据。
因此,OLH的部署可以采用单独环境部署,在Hadoop任意节点部署,在Oracle任意数据库节点部署的方式。
?
3.2? 安装准备
Hadoop平台版本:HDP 3.1.4.0-315
Oracle 版本:Oracle 19.8
Oracle Loader forHadoop Release 5.1.1安装介质下载:
https://download.oracle测试数据/otn/other/bigdata/oraloader-5.1.1.x86_64.zip
?
IP
名称
描述
10.0.0.2
Master
Hadoop Namenode
10.0.0.3
Datanode1
Hadoop Datanode
10.0.0.4
Datanode2
Hadoop Datanode
10.0.0.5
Datanode3
Hadoop Datanode
10.0.0.6
bigdata-db-1
Oracle数据库和OLH运行环境
?
3.3? 配置Hadoop和Hive客户端
在OLH 运行环境进行操作,配置Hadoop和Hive客户端。
?
1.把HDP 1号节点的mapreduce.tar.gz文件上传到OLH 运行环境端的/u01/bdc目录:
scp?/usr/hdp/current/hadoop-client/mapreduce.tar.gz?root@10.0.0.6:/u01/bdc
在OLH 运行环境解压到/u01/bdc目录
?
2.把HDP 1号节点/usr/hdp/current/hive-client/hive.tar.gz文件上传到OLH 运行环境的/u01/bdc目录
scp?/usr/hdp/current/hive-client/hive.tar.gz?root@10.0.0.6:/u01/bdc
在OLH 运行环境解压到/u01/bdc目录
?
3.进入HDP 1号节点,把/usr/hdp/3.1.4.0-315目录下的所有包生成tar包.
tar?-czvf/usr/hdp/3.1.4.0-315.tar.gz?/usr/hdp/3.1.4.0-315/*
并把3.1.4.0-315.tar.gz文件传到OLH 运行环境的/u01/bdc目录
scp?/usr/hdp/3.1.4.0-315.tar.gz?root@10.0.0.6:/u01/bdc
?在OLH 运行环境解压到/usr/hdp目录,解压之后的路径如下:
4.在Ambari中下载hdfs和hive的客户端配置文件,并把配置文件放到OLH 运行环境的/u01/bdc目录中
解压之后目录结构如下:
?
5. 配置环境变量~/.bash_profile
使用oracle用户登陆操作系统,增加如下环境变量:
export HADOOP_HOME=/u01/bdc/hadoop export HADOOP_CONF_DIR=/u01/bdc/hadoop-conf export HIVE_HOME=/u01/bdc/hive export HIVE_CONF_DIR=/u01/bdc/hive-conf export JAVA_HOME=/usr/local/jdk1.8.0_261 export PATH=$HADOOP_HOME/bin:$HIVE_HOME/bin:$OSCH_HOME/bin:$PATH export?HADOOP_CLASSPATH=:$HIVE_HOME/lib/*:$HADOOP_CLASSPATH
6. 验证,执行hdfs dfs –ls / 能查看到hdfs中的目录,说明配置成功。
3.4?安装配置Oracle数据库客户端
在OLH运行环境中,安装配置Oracle数据库客户端。
?
3.5?配置OLH运行环境
1.?把下载的olh包上传到安装节点的/u01/bdc目录,并解压,解压之后的目录如下:
2. 配置环境变量,增加如下环境变量。
export?OLH_HOME=/u01/bdc/orahdfs-5.0.0export?PATH=$HADOOP_HOME/bin:$HIVE_HOME/bin:$OLH_HOME/bin:$PATHexport?HADOOP_CLASSPATH=$OLH_HOME/jlib/*:$HADOOP_HOME/lib/*:$HIVE_HOME/lib/*:$HADOOP_CLASSPATH
配置之后的环境变量如下:
3.6? DB端创建数据导入用户
在Oracle数据库中创建bdcdemo用户,并赋予相应的权限,用于数据导入操作。
sqlplus?/?as?sysdba;create?user?bdcdemo?identified?by?welcome1;grant?connect?to?bdcdemo;grant?resource?to?bdcdemo;grant?dba?to?bdcdemo;grant?CREATE?TABLE,CREATE?VIEW,CREATE?SESSION,ALTER?SESSION?to?bdcdemo;GRANT?EXECUTE?ON?sys.utl_file?TO?bdcdemo;
4??Oracle Load For Hadoop 测试
4.1? 准备测试数据
测试数据为Text格式的文本文件part-r-00000。
测试数据如下:
把数据上传到hdfs中的/user/oracle/bdws/olh/data目录:
hdfs?dfs?-mkdir?/user/oracle/bdws/olh/datahdfs?dfs?-put?/u01/bdc/bdws/olh/data/*/user/oracle/bdws/olh/data
?
4.2? HDFS TEXTFILE文件测试
1. 使用sqlplus创建Oracle 表作为导入目标表。
sqlplus bdcdemo/welcome1@10.0.0.6:1521/orcl DROP TABLE OLH_DEMO_OCI; CREATE TABLE OLH_DEMO_OCI ( "SESSION_ID" NUMBER, "TIME_ID" DATE, "CUST_ID" ? ? ? ? ? ? NUMBER, "DURATION_SESSION" ? ?NUMBER, "NUM_RATED" ? ? ? ? ? NUMBER, "DURATION_RATED" ? ? ?NUMBER, "NUM_COMPLETED" ? ? ? NUMBER, "DURATION_COMPLETED" ?NUMBER, "TIME_TO_FIRST_START" NUMBER, "NUM_STARTED" ? ? ? ? NUMBER, "NUM_BROWSED" ? ? ? ? NUMBER, "DURATION_BROWSED" ? ?NUMBER, "NUM_LISTED" ? ? ? ? ?NUMBER, "DURATION_LISTED" ? ? NUMBER, "NUM_INCOMPLETE" ? ? ?NUMBER, "NUM_SEARCHED" ? ? ? ?NUMBER ) PARTITION BY HASH(CUST_ID);
2. 创建导入配置xml文件,olh_demo_oci.xml,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!-- ? ? ? ? ? ? ?Input settings ? ? ? ? ? ? ? ? ? ? --> <property> <name>mapreduce.inputformat.class</name> <value>oracle.hadoop.loader.lib.input.DelimitedTextInputFormat</value> </property> <property> <name>mapred.input.dir</name> <value>/user/oracle/bdws/olh/data</value> </property> <property> <name>oracle.hadoop.loader.input.fieldTerminator</name> <value>\u0009</value> </property> <!-- ? ? ? ? ? ?Output settings ? ? ? ? ? ? ? ? ? ? --> <property> <name>mapreduce.outputformat.class</name> <value>oracle.hadoop.loader.lib.output.OCIOutputFormat</value> </property> <property> <name>mapred.output.dir</name> <value>temp_out_session</value> </property> <!-- ? ? ? ?Table information ? ? ? ? ? --> <property> <name>oracle.hadoop.loader.loaderMap.targetTable</name> <value>olh_demo_oci</value> </property> <property> <name>oracle.hadoop.loader.input.fieldNames</name> <value>SESSION_ID,TIME_ID,CUST_ID,DURATION_SESSION,NUM_RATED,DURATION_RATED,NUM_COMPLETED,DURATION_COMPLETED,TIME_TO_FIRST_START,NUM_STARTED,NUM_BROWSED,DURATION_BROWSED,NUM_LISTED,DURATION_LISTED,NUM_INCOMPLETE,NUM_SEARCHED</value> </property> <property> <name>oracle.hadoop.loader.defaultDateFormat</name> <value>yyyy-MM-dd:HH:mm:ss</value> </property> <!-- ? ? ? ?Connection information ? ? ? ? ? ? --> <property> <name>oracle.hadoop.loader.connection.url</name> <value>jdbc:oracle:thin:@${HOST}:${TCPPORT}/${SERVICE_NAME}</value> </property> <property> <name>TCPPORT</name> <value>1521</value> </property> <property> <name>HOST</name> <value>localhost</value> </property> <property> <name>SERVICE_NAME</name> <value>orcl</value> </property> <property> <name>oracle.hadoop.loader.connection.user</name> <value>bdcdemo</value> </property> <property> <name>oracle.hadoop.loader.connection.password</name> <value>welcome1</value> <description> Having password in cleartext is NOT RECOMMENDED - use Oracle Wallet instead </description> </property> <property> <name>oracle.hadoop.loader.logBadRecords</name> <value>true</value> </property> </configuration>
3. 创建导入脚本olh_demo_oci.sh,脚本内容如下:
export HADOOP_CLASSPATH="$OLH_HOME/jlib/*:$HIVE_HOME/lib/*:/etc/hive/conf:$HADOOP_CLASSPATH" hdfs dfs -rm -r -f /user/oracle/temp_out_session hadoop jar ${OLH_HOME}/jlib/oraloader.jar \ ? ? ? oracle.hadoop.loader.OraLoader \ ? ? ? -conf /u01/bdc/bdws/olh/olh_demo_oci.xml \ ???????-D?mapred.reduce.tasks=2
4. 也可以不使用xml配置文件,直接创建脚本进行执行,例如:
$ cat olh_hdfs_txt.sh #!/bin/bash export HADOOP_CLASSPATH="${OLH_HOME}/jlib/*:${HIVE_HOME}/lib/*:/etc/hive/conf:$HADOOP_CLASSPATH" export OUTPUT_DIR=/user/hive/temp_out_text hdfs dfs -rm -r -f $OUTPUT_DIR hdfs dfs -rm -r -f $OUTPUT_DIR hadoop jar ${OLH_HOME}/jlib/oraloader.jar \ ? oracle.hadoop.loader.OraLoader \ ?-D mapred.reduce.tasks=2 \ ?-D mapreduce.inputformat.class=oracle.hadoop.loader.lib.input.DelimitedTextInputFormat \ ?-D mapred.input.dir='/user/oracle/bdws/olh/data' \ ?-D oracle.hadoop.loader.input.fieldTerminator='\u0009' \ ?-D mapreduce.outputformat.class=oracle.hadoop.loader.lib.output.OCIOutputFormat \ ?-D oracle.hadoop.loader.connection.url='jdbc:oracle:thin:@${HOST}:${TCPPORT}/${SERVICE_NAME}' \ ?-D TCPPORT=1521 \ ?-D HOST=10.0.0.3 \ ?-D SERVICE_NAME=orcl \ ?-D oracle.hadoop.loader.connection.user=bdcdemo \ ?-D oracle.hadoop.loader.connection.password=welcome1 \ ?-D oracle.hadoop.loader.loaderMap.targetTable=olh_demo_oci \ ?-D oracle.hadoop.loader.input.fieldNames=SESSION_ID,TIME_ID,CUST_ID,DURATION_SESSION,NUM_RATED,DURATION_RATED,NUM_COMPLETED,DURATION_COMPLETED,TIME_TO_FIRST_START,NUM_STARTED,NUM_BROWSED,DURATION_BROWSED,NUM_LISTED,DURATION_LISTED,NUM_INCOMPLETE,NUM_SEARCHED \ ?-D oracle.hadoop.loader.defaultDateFormat='yyyy-MM-dd:HH:mm:ss' \ ?-D oracle.hadoop.loader.logBadRecords=true \ ??-D?mapred.output.dir=$OUTPUT_DIR
5. 执行数据装载操作
用oracle用户进入 /u01/bdc/bdws/olh目录,执行olh_demo_oci.sh 脚本:
6. 验证数据,执行如下脚本 :
sqlplus?bdcdemo/welcome1@10.0.0.3:1521/orclset?linesize?200;set?pages?200;select?count(1)?from?olh_demo_oci;select?SESSION_ID,?CUST_ID?from?olh_demo_oci?where?rownum<=10;
执行结果如下 :
?
4.3? Hive表数据同步测试
1. 准备数据集,在Hive中执行如下脚本:
use bdws; drop table EXT_OLH_DEMO_OCI; CREATE EXTERNAL TABLE EXT_OLH_DEMO_OCI ( SESSION_ID String, TIME_ID String, CUST_ID ? ? ? ? ? ? String, DURATION_SESSION ? ?String, NUM_RATED ? ? ? ? ? String, DURATION_RATED ? ? ?String, NUM_COMPLETED ? ? ? String, DURATION_COMPLETED ?String, TIME_TO_FIRST_START String, NUM_STARTED ? ? ? ? String, NUM_BROWSED ? ? ? ? String, DURATION_BROWSED ? ?String, NUM_LISTED ? ? ? ? ?String, DURATION_LISTED ? ? String, NUM_INCOMPLETE ? ? ?String, NUM_SEARCHED ? ? ? ?String )STORED AS ORC LOCATION '/user/oracle/bdws/olh/data'; #Txt file, hive managed table create table OLH_DEMO_TXT stored as textfile as select * from EXT_OLH_DEMO_OCI; #orc file, hive managed table create table OLH_DEMO_ORC stored as orc as select * from EXT_OLH_DEMO_OCI; #Parquet file, hive managed table create?table?OLH_DEMO_parquet?stored?as?parquet?as?select?*?from?EXT_OLH_DEMO_OCI;
2. 查询Hive 表数据
select?SESSION_ID,time_id,cust_id?from?OLH_DEMO_ORC?limit?10;select?count(1)?from?OLH_DEMO_TXT;select?count(1)?from?OLH_DEMO_ORC;select?count(1)?from?OLH_DEMO_parquet;
数据存放的位置如下:
Hive 外部表, Txt file: /user/oracle/bdws/olh/data
Hive 管理表, Txt file: /warehouse/tablespace/managed/hive/bdws.db/olh_demo_txt
Hive 管理表,Orc file:
Hive 管理表,Parquet file:
3. 创建Oracle目标数据表
使用sqlplus登录到DB节点执行创建Oracle数据库表,用于数据装载。
sqlplus bdcdemo/welcome1@10.0.0.6:1521/orcl DROP TABLE OLH_DEMO_ORC; CREATE TABLE OLH_DEMO_ORC ( "SESSION_ID" VARCHAR2(100), "TIME_ID" VARCHAR2(100), "CUST_ID" ? ? ? ? ? ? VARCHAR2(100), "DURATION_SESSION" ? ?VARCHAR2(100), "NUM_RATED" ? ? ? ? ? VARCHAR2(100), "DURATION_RATED" ? ? ?VARCHAR2(100), "NUM_COMPLETED" ? ? ? VARCHAR2(100), "DURATION_COMPLETED" ?VARCHAR2(100), "TIME_TO_FIRST_START" VARCHAR2(100), "NUM_STARTED" ? ? ? ? VARCHAR2(100), "NUM_BROWSED" ? ? ? ? VARCHAR2(100), "DURATION_BROWSED" ? ?VARCHAR2(100), "NUM_LISTED" ? ? ? ? ?VARCHAR2(100), "DURATION_LISTED" ? ? VARCHAR2(100), "NUM_INCOMPLETE" ? ? ?VARCHAR2(100), "NUM_SEARCHED" ? ? ? ?VARCHAR2(100) ) PARTITION BY HASH(CUST_ID);
4. 创建导入配置的xml文件,olh_demo_orc.xml,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!-- ? ? ? Input settings ? ? ? ? ? ?--> <property> <name>mapreduce.inputformat.class</name> <value>oracle.hadoop.loader.lib.input.HiveToAvroInputFormat</value> </property> <property> <name>oracle.hadoop.loader.input.hive.databaseName</name> <value>bdws</value> </property> <property> <name>oracle.hadoop.loader.input.hive.tableName</name> <value>olh_demo_orc</value> </property> <!-- ? ? ? ?Output settings ? ? ? ? ? ? ?--> <property> <name>mapreduce.outputformat.class</name> <value>oracle.hadoop.loader.lib.output.OCIOutputFormat</value> </property> <!--property> ? <name>mapred.output.dir</name> ? <value>temp_out_session</value> </property--> <!-- ? ? ? ? ? Table information ? ? ? ? ? ? ? ? ?--> <property> <name>oracle.hadoop.loader.loaderMap.targetTable</name> <value>olh_demo_oci</value> </property> <property> <name>oracle.hadoop.loader.defaultDateFormat</name> <value>yyyy-MM-dd:HH:mm:ss</value> </property> <!-- ? ? ? ? ? Connection information ? ? ? ? ? ?--> <property> <name>oracle.hadoop.loader.connection.url</name> <value>jdbc:oracle:thin:@${HOST}:${TCPPORT}/${SERVICE_NAME}</value> </property> <property> <name>TCPPORT</name> <value>1521</value> </property> <property> <name>HOST</name> <value>localhost</value> </property> <property> <name>SERVICE_NAME</name> <value>orcl</value> </property> <property> <name>oracle.hadoop.loader.connection.user</name> <value>bdcdemo</value> </property> <property> <name>oracle.hadoop.loader.connection.password</name> <value>welcome1</value> <description> Having password in cleartext is NOT RECOMMENDED - use Oracle Wallet instead </description> </property> <property> <name>oracle.hadoop.loader.logBadRecords</name> <value>true</value> </property> </configuration>
5. 创建导入脚本olh_demo_orc.sh,脚本内容如下:
export HADOOP_CLASSPATH="$OLH_HOME/jlib/*:$HIVE_HOME/lib/*:/etc/hive/conf:$HADOOP_CLASSPATH" export OUTPUT_DIR=/user/oracle/temp_out_text1 hdfs dfs -rm -r -f $OUTPUT_DIR hadoop jar ${OLH_HOME}/jlib/oraloader.jar \ ? ? ? oracle.hadoop.loader.OraLoader \ ? ? ? -conf /u01/bdc/bdws/olh/olh_demo_orc.xml \ ? ? ? ?-D mapred.output.dir=$OUTPUT_DIR \ ? ? ? -D mapred.reduce.tasks=1 \ ? ? ? -D hive.transactional.table.scan=true \ ? ? ? -D 'hive.txn.valid.txns=9223372036854775807:9223372036854775807::' \ ? ? ? -D 'schema.evolution.columns=${columns}' \ ???????-D?'schema.evolution.columns.types=${columns.types}'
6. 也可以不使用xml配置文件,直接创建脚本进行执行,例如:
[oracle@bigdata-db-1 olh]$ cat olh_hive_orc.sh #!/bin/bash export HADOOP_CLASSPATH="${OLH_HOME}/jlib/*:${HIVE_HOME}/lib/*:$HADOOP_CLASSPATH" export OUTPUT_DIR=/user/hive/temp_out_text hdfs dfs -rm -r -f $OUTPUT_DIR hadoop jar ${OLH_HOME}/jlib/oraloader.jar \ ? oracle.hadoop.loader.OraLoader \ ?-D mapred.reduce.tasks=2 \ ?-D oracle.hadoop.loader.targetTable=olh_demo_orc \ ?-D oracle.hadoop.loader.input.hive.databaseName=bdws \ ?-D oracle.hadoop.loader.input.hive.tableName=OLH_DEMO_orc \ ?-D oracle.hadoop.loader.connection.url=jdbc:oracle:thin:@10.0.0.3:1521/orcl \ ?-D oracle.hadoop.loader.connection.user=bdcdemo\ ?-D oracle.hadoop.loader.connection.password=welcome1 \ ?-D mapreduce.inputformat.class=oracle.hadoop.loader.lib.input.HiveToAvroInputFormat \ ?-D mapreduce.outputformat.class=oracle.hadoop.loader.lib.output.OCIOutputFormat \ ?-D hive.transactional.table.scan=true \ ?-D 'hive.txn.valid.txns=9223372036854775809:9223372036854775809::' \ ?-D 'schema.evolution.columns=${columns}' \ ?-D 'schema.evolution.columns.types=${columns.types}' \ ??-D?mapred.output.dir=$OUTPUT_DIR
7.?执行数据导入操作
?
8. 验证导入数据?:
sqlplus?bdcdemo/welcome1@10.0.0.3:1521/orclset?linesize?200;set?pages?200;select?count(1)?from?olh_demo_orc;select?SESSION_ID,?CUST_ID?from?olh_demo_orc?where?rownum<=10;
结果如下 :
?
5??常见问题
1、是否支持中文数据导入?
OLH导入HDFS文本文件方式下,OLH支持导入UTF8格式文件,其中Oracle数据库使用AL32UTF8编码。
OLH 导入Hive 表数据,Oracle数据库使用AL32UTF8编码,可以支持中文数据导入。
?
2、OLH是否支持文本文件中字段分割符为多字节。
OLH不支持文本中字段分割符为多字节,另外一个Oracle SQL connector for Hadoop可以支持。
?
3、OLH 是否支持文件中第一行为表头。
??? 支持,数据装载过程中,数据文件内容会根据目标表的定义字段类型进行数据内容的检查,如果不合法,该行数据会被skip掉,其他数据正常加载。文件头信息也是这样处理的。加载数据日志中会统计成功写入多少行,skip多少行。
?
4、OLH导入日志与异常处理
??? OLH采用java开发,使用java运行环境,导入使用MapReduce过程,运行日志记录了导入数据行,数据量,skip数据行等信息。在使用ETL调用过程中,可以判断java运行返回结果来判断是否运行成功。
6??参考材料
https://HdhCmsTestoracle测试数据/database/technologies/bdc/hadoop-loader.html
https://HdhCmsTestoracle测试数据/technetwork/database/database-technologies/bdc/big-data-connectors/overview/bigdata-connectors-datasheet-1883359.pdf?ssSourceSiteId=otncn
https://docs.oracle测试数据/en/bigdata/big-data-connectors/5.1/user/start.html
编辑:萧宇
查看更多关于使用 Oracle Load For Hadoop(OLH)实现数据湖到Oracle数据库数据集成的详细内容...