更新时间:2022-02-22 GMT+08:00
将Oracle数据库中的数据导入HDFS时各连接器的区别
问题
使用Loader将Oracle数据库中的数据导入到HDFS中时,可选择的连接器有generic-jdbc-connector、oracle-connector、oracle-partition-connector三种,要怎么选?有什么区别?
答案
- generic-jdbc-connector
使用JDBC方式从Oracle数据库读取数据,适用于支持JDBC的数据库。
在这种方式下,Loader加载数据的性能受限于分区列的数据分布是否均匀。当分区列的数据偏斜(数据集中在一个或者几个值)时,个别Map需要处理绝大部分数据,进而导致索引失效,造成SQL查询性能急剧下降。
generic-jdbc-connector支持视图的导入导出,而oracle-partition-connector和oracle-connector暂不支持,因此导入视图只能选择该连接器。
- oracle-partition-connector和oracle-connector
这两种连接器都支持按照Oracle的ROWID进行分区(oracle-partition-connector是自研,oracle-connector是社区开源版本),二者的性能较为接近。
oracle-connector需要的系统表权限较多,下面是各自需要的系统表,需要赋予读权限。
- oracle-connector:dba_tab_partitions、dba_constraints、dba_tables、dba_segments、v$version、dba_objects、v$instance、SYS_CONTEXT函数、dba_extents、dba_tab_subpartitions。
- oracle-partition-connector:DBA_OBJECTS、DBA_EXTENTS。
相比于generic-jdbc-connector,oracle-partition-connector和oracle-connector具有以下优点:
- 负载均匀,数据分片的个数和范围与源表的数据无关,而是由源表的存储结构(数据块)确定,颗粒度可以达到“每个数据块一个分区”。
- 性能稳定,完全消除“数据偏斜”和“绑定变量窥探”导致的“索引失效”。
- 查询速度快,数据分片的查询速度比用索引快。
- 水平扩展性好,如果数据量越大,产生的分片就越多,所以只要增加任务的并发数,就可以获得较理想的性能;反之,减少任务并发数,就可以节省资源。
- 简化数据分片逻辑,不需要考虑“精度丢失”、“类型兼容”和“绑定变量”等问题。
- 易用性得到增强,用户不需要专门为Loader创建分区列、分区表。
父主题: Loader常见问题