主流ETL工具选型

合集下载

数据仓库ETL工具选择与Workflow优化

数据仓库ETL工具选择与Workflow优化

数据仓库ETL工具选择与Workflow优化在大数据时代,数据仓库已经成为了企业管理和决策的重要基石。

而ETL工具作为数据仓库建设的关键环节,发挥着至关重要的作用。

本文将探讨数据仓库ETL工具的选择以及如何优化Workflow。

一、数据仓库ETL工具选择数据仓库ETL工具是实现数据抽取、转换和加载的关键工具。

在选择合适的ETL工具时,需考虑以下因素:1. 数据源适配性:不同企业的数据来源各异,因此ETL工具应具备对多种数据源的适配性,包括关系型数据库、文件系统、Web服务等。

2. 数据抽取和转换能力:作为ETL的核心步骤,数据抽取和转换的能力决定了ETL工具的实用性。

一个好的ETL工具应具备多样的抽取和转换功能,包括数据过滤、清洗、聚合、计算等。

3. 并行处理能力:随着数据量的增加,数据仓库的ETL过程往往需要大量的计算和处理。

因此,一个好的ETL工具应具备并行处理能力,以提高数据处理的效率。

4. 作业调度和监控:ETL工具应提供可靠的作业调度和监控功能,能够自动化执行ETL流程,并及时反馈运行情况和错误信息。

5. 扩展性和灵活性:ETL工具应具备良好的扩展性和灵活性,能够适应未来企业的数据需求变化,并支持自定义功能和插件的开发。

综上所述,选择一个适合企业需求的数据仓库ETL工具需要综合考虑以上因素,结合企业的实际情况进行评估和比较,选择最为合适的工具。

二、Workflow优化Workflow是指ETL过程中由多个任务节点组成的工作流,通过优化Workflow可以提升ETL的效率和性能。

以下是一些常见的Workflow优化技巧:1. 并行化处理:将一些可以并行执行的任务节点进行拆分,利用并行处理能力提高整体的处理速度。

2. 数据分区和分片:对于大容量的数据集,可以将其进行分区或分片处理,以减轻单个节点的压力,提高处理效率。

3. 缓存机制:针对经常使用的数据或计算结果,可以引入缓存机制,避免重复抽取和计算,提高数据处理的速度。

超详细的六款主流ETL工具介绍及功能对比

超详细的六款主流ETL工具介绍及功能对比

超详细的六款主流ETL⼯具介绍及功能对⽐概述ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或⾏业应⽤来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握⼀种etl⼯具的使⽤,必不可少。

最近⽤kettle做数据处理⽐较多,所以也就介绍下这⽅⾯内容,这⾥先对⽐下⼏款主流的ETL⼯具。

1、DataPipelineData Pipeline是⼀家为企业⽤户提供数据基础架构服务的科技公司,DataPipeline数据质量平台整合了数据质量分析、质量校验、质量监控等多⽅⾯特性,以保证数据质量的完整性、⼀致性、准确性及唯⼀性,彻底解决数据孤岛和数据定义进化的问题。

2、KettleKettle是⼀款国外开源的ETL⼯具,纯java编写,可以在Windows、Linux、Unix上运⾏,数据抽取⾼效稳定。

Kettle 中⽂名称叫⽔壶,该项⽬的主程序员MATT 希望把各种数据放到⼀个壶⾥,然后以⼀种指定的格式流出。

Kettle家族⽬前包括4个产品:Spoon、Pan、CHEF、Kitchen。

SPOON 允许你通过图形界⾯来设计ETL转换过程(Transformation)。

PAN 允许你批量运⾏由Spoon设计的ETL转换 (例如使⽤⼀个时间调度器)。

Pan是⼀个后台执⾏的程序,没有图形界⾯。

CHEF 允许你创建任务(Job)。

任务通过允许每个转换,任务,脚本等等,更有利于⾃动化更新数据仓库的复杂⼯作。

任务通过允许每个转换,任务,脚本等等。

任务将会被检查,看看是否正确地运⾏了。

KITCHEN 允许你批量使⽤由Chef设计的任务 (例如使⽤⼀个时间调度器)。

KITCHEN也是⼀个后台运⾏的程序。

3、TalendTalend,是⼀家专业的开源集成软件公司,为企业提供开源的中间件解决⽅案,从⽽让企业能够在他们的应⽤,系统以及数据库中赢取更⼤的价值。

在传统软件公司提供封闭、私有的解决⽅案的领域Talend系列软件以开源的形式进⾏开发。

国际三大主流ETL工具分析

国际三大主流ETL工具分析

国际三大主流ETL工具分析ETL(Extract, Transform, Load)是指将数据从源系统中抽取出来,进行转化(加工、清洗、整合等),然后加载到目标系统中。

在ETL工具的选择上,有许多可供选择的工具。

本文将对国际三大主流ETL工具(Informatica PowerCenter、IBM InfoSphere DataStage和Microsoft SQL Server Integration Services)进行分析。

1. Informatica PowerCenterInformatica PowerCenter是一种广泛应用的ETL工具,它提供了强大的数据集成和数据转换功能。

它具有以下特点:- 强大的数据集成能力:Informatica PowerCenter支持从各种数据源中提取数据,包括关系数据库、文件、Web服务等。

它提供了丰富的连接器和转换函数,可以方便地构建复杂的数据集成过程。

- 易于使用的用户界面:Informatica PowerCenter具有直观的用户界面,使用户可以轻松地构建、调试和管理ETL工作流程。

- 可扩展性和可靠性:Informatica PowerCenter是一个可扩展的平台,可以处理大规模数据集成任务。

它具有高度可靠的作业调度和容错机制,保证数据的准确性和一致性。

- 强大的数据转换能力:Informatica PowerCenter提供了丰富的转换操作和函数,可以进行数据清洗、规范化、分割、合并等操作。

它还支持复杂的业务逻辑和数据处理规则。

2. IBM InfoSphere DataStageIBM InfoSphere DataStage是IBM公司开发的一种ETL工具,它具有以下特点:- 广泛的数据集成能力:InfoSphere DataStage支持从多种数据源中提取数据,包括关系数据库、文件、Web服务等。

它提供了丰富的数据连接器和数据传输功能,可以轻松地完成数据集成任务。

三大主流ETL工具选型

三大主流ETL工具选型

三大主流ETL工具选型ETL(extract, transform and load) 产品乍看起来似乎并不起眼,单就此项技术本身而言,几乎也没什么特别深奥之处,但是在实际项目中,却常常在这个环节耗费太多的人力,而在后续的维护工作中,更是往往让人伤透脑筋。

之所以出现这种状况,恰恰与项目初期没有正确估计ETL工作、没有认真考虑其工具支撑有很大关系。

做ETL产品的选型,仍然需要从以前说的四点(即成本、人员经验、案例和技术支持) 来考量。

在此,主要列举三种主流ETL产品:Ascential公司的Datastage、Informatica公司的Powercenter、NCR Teradata公司的ETL Automation。

其中,ETL Automation相对其他两种有些特别之处,放在后面评述。

旗鼓相当:Datastage与Powercenter就Datastage和Powercenter而言,这两者目前占据了国内市场绝大部分的份额,在成本上看水平相当,虽然市面上还有诸如Business Objects公司的Data Integrator、Cognos公司的DecisionStream,但尚属星星之火,未成燎原之势。

谈Datastage和Powercenter,如果有人说这个就是比那个好,那听者就要小心一点了。

在这种情况下有两种可能:他或者是其中一个厂商的员工,或者就是在某个产品上有很多经验而在另一产品上经验缺乏的开发者。

为什么得出这一结论?一个很简单的事实是,从网络上大家对它们的讨论和争执来看,基本上是各有千秋,都有着相当数量的成功案例和实施高手。

确实,工具是死的,人才是活的。

在两大ETL工具技术的比对上,可以从对ETL流程的支持、对元数据的支持、对数据质量的支持、维护的方便性、定制开发功能的支持等方面考虑。

一个项目中,从数据源到最终目标表,多则上百个ETL过程,少则也有十几个。

这些过程之间的依赖关系、出错控制以及恢复的流程处理,都是工具需要重点考虑。

几款开源的ETL工具介绍

几款开源的ETL工具介绍

⼏款开源的ETL⼯具介绍ETL,是英⽂ Extract-Transform-Load 的缩写,⽤来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)⾄⽬的端的过程。

ETL 是构建数据仓库的重要⼀环,⽤户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。

我们在下⽅列出了 7 款开源的 ETL ⼯具,并讨论了从 ETL 转向“⽆ ETL”的过程,因为 ELT 正迅速成为现代数据和云环境的终极过程。

注:原⽂包含 11 项 ETL ⼯具,本⽂提取了其中开源的 7 项,另增加了⼀款使⽤普遍的 Kettle,如需对另外 4 项进⾏了解,可点击⽂末链接进⾏查看。

优秀的 ETL ⼯具1、Apache CamelApache Camel 是⼀个⾮常强⼤的基于规则的路由以及媒介引擎,该引擎提供了⼀个基于 POJO 的企业应⽤模式(Enterprise Integration Patterns)的实现,你可以采⽤其异常强⼤且⼗分易⽤的 API (可以说是⼀种 Java 的领域定义语⾔ Domain Specific Language)来配置其路由或者中介的规则。

通过这种领域定义语⾔,你可以在你的 IDE 中⽤简单的 Java Code 就可以写出⼀个类型安全并具有⼀定智能的规则描述⽂件。

2、Apache KafkaApache Kafka 是⼀个开源的消息系统,⽤ Scala 和 Java 写成。

该项⽬为处理实时数据提供了⼀个统⼀、⾼通量、低延时的平台。

有如下特性:通过 O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

⾼吞吐量:即使是⾮常普通的硬件 kafka 也可以⽀持每秒数⼗万的消息。

⽀持通过 kafka 服务器和消费机集群来分区消息。

⽀持 Hadoop 并⾏数据加载。

ETL工具选型

ETL工具选型

ETL工具选型1 简介根据以往数据仓库项目的经验,在一个数据仓库项目中,ETL设计和实施的工作量一般要占总项目工作量的50%-70%,而且数据仓库项目一般会存在二次需求的问题,客户在项目的实施过程中或者使用过程中会提出新的业务需求,而任何前端业务模型的改变都会涉及到ETL设计,因此ETL工具的选择对于整个数据仓库项目的成功是非常重要的。

2 ETL工具选型ETL工具必须提供非常简单易用的维护界面来定义和维护这种变化,同时能提供相关元数据管理,以便于将来对整个ETL过程进行维护和监控。

正确选择ETL工具,可以从ETL对平台的支持、对数据源的支持、数据转换功能、管理和调度功能、集成和开放性、对元数据管理等功能并结合成本、人员经验、案例和技术支持出发,具体如下。

2.1 支持平台随着各种应用系统数据量的飞速增长和对业务可靠性等要求的不断提高,人们对数据抽取工具的要求往往是将几十、上百个GB的数据在有限的几个小时内完成抽取转换和装载工作,这种挑战势必要求抽取工具对高性能的硬件和主机提供更多支持。

因此,我们可以从数据抽取工具支持的平台,来判断它能否胜任企业的环境,目前主流的平台包括SUN Solaris、HP-UX、IBM AIX、AS/400、OS/390、Sco UNIX、Linux、Windows等。

2.2 支持数据源对数据源支持的重要性不言而喻,因此这个指标必须仔细地考量。

首先,我们需要对项目中可能会遇到的各种数据源有一个清晰的认识;其次对各种工具提供的数据源接口类型也要有深入了解,比如,针对同一种数据库,使用通用的接口(如ODBC/JDBC)还是原厂商自己的专用接口,数据抽取效率都会有很大差别,这直接影响到我们能不能在有限的时间内完成ETL任务。

常见的数据源供参考:DB2、Informix、Oracle、Sybase、SQL Server、Teredata、OleDB、SAS、Text、Excel、SAP、Peoplesoft、IMS、VSAM、QSAM on 390、FTP、XML、MessageQueue、Weblog、Essbase等。

ETL工具——DataX,FlinkX

ETL工具——DataX,FlinkX

ETL⼯具——DataX,FlinkX⼀、DataXDataX 是阿⾥巴巴集团内被⼴泛使⽤的离线数据同步⼯具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间⾼效的数据同步功能。

DataX本⾝作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向⽬标端写⼊数据的Writer插件,理论上DataX框架可以⽀持任意数据源类型的数据同步⼯作。

同时DataX插件体系作为⼀套⽣态系统, 每接⼊⼀套新数据源该新加⼊的数据源即可实现和现有的数据源互通。

1、DataX的安装DataX不需要依赖其他服务,直接上传、解压、安装、配置环境变量即可也可以直接在windows上解压上传解压到soft⽬录下配置环境变量2、DataX使⽤1、git仓库导⼊GitHub仓库,没有外⽹建议使⽤这种⽅式查看模板有外⽹直接访问GitHub仓库2、streamTostream到datax/job⽬录下编写json⽂件然后执⾏{"job": {"content": [{"reader": {"name": "streamreader","parameter": {"sliceRecordCount": 10,"column": [{"type": "long","value": "10"},{"type": "string","value": "hello,你好,世界-DataX"}]}},"writer": {"name": "streamwriter","parameter": {"encoding": "UTF-8","print": true}}}],"setting": {"speed": {"channel": 5}}}}执⾏同步任务datax.py stream2stream.json3、mysqltomysql需要新建student2数据库,并创建student表json⽂件{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"splitPk": "age","connection": [{"table": ["student"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "mysqlwriter","parameter": {"writeMode": "insert","username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"preSql": ["truncate student2"],"connection": [{"jdbcUrl": "jdbc:mysql://master:3306/student2?useUnicode=true&characterEncoding=utf8", "table": ["student2"]}]}}}],"setting": {"speed": {"channel": 6}}}}新建表use student2;CREATE TABLE `student2` (`id` int(10) NOT NULL AUTO_INCREMENT,`name` char(5) DEFAULT NULL,`age` int(11) DEFAULT NULL,`gender` char(2) DEFAULT NULL,`clazz` char(4) DEFAULT NULL,`last_mod` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1500101002 DEFAULT CHARSET=utf8执⾏json⽂件datax.py mysqltomysql.json4、mysqltohive写hive跟hdfs时⼀样的编写配置json⽂件{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"splitPk": "age","connection": [{"table": ["student"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "hdfswriter","parameter": {"defaultFS": "hdfs://master:9000","fileType": "text","path": "/user/hive/warehouse/datax.db/students","fileName": "student","column": [{"name": "id","type": "bigint"},{"name": "name","type": "string"},{"name": "age","type": "INT"},{"name": "gender","type": "string"},{"name": "clazz","type": "string"},{"name": "last_mod","type": "string"}],"writeMode": "append","fieldDelimiter": ","}}}],"speed": {"channel": 6}}}}hive建库建表create table students(id bigint,name string,age int,gender string,clazz string,last_mod string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';执⾏datax.py mysqltohdfs.json5、mysqltohbasemysql中的score表需将cource_id改为course_id,并将student_id、course_id设为主键,并将所有字段的类型改为int hbase需先创建score表:create 'score','cf1'{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["student_id","course_id","score"],"splitPk": "course_id","connection": [{"table": ["score"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "hbase11xwriter","parameter": {"hbaseConfig": {"hbase.zookeeper.quorum": "master:2181"},"table": "score","mode": "normal","rowkeyColumn": [{"index":0,"type":"string"},{"index":-1,"type":"string","value":"_"},{"index":1,"type":"string"}],"column": ["index":2,"name": "cf1:score","type": "int"}],"encoding": "utf-8"}}}],"setting": {"speed": {"channel": 6}}}}datax.py mysqltohbase.json6、hdfstohbase将students.txt数据上传⾄HDFS的/data/student1/⽬录在HBase中创建datax表:create 'datax','cf1'{"job": {"setting": {"speed": {"channel": 3},"errorLimit": {"record": 0,"percentage": 0.02}},"content": [{"reader": {"name": "hdfsreader","parameter": {"path": "/data/student1/","defaultFS": "hdfs://master:9000","column": [{"index": 0,"type": "string"},{"index": 1,"type": "string"},{"index": 2,"type": "string"},{"index": 3,"type": "string"},{"index": 4,"type": "string"},{"index": 5,"type": "string"}],"fileType": "text","encoding": "UTF-8","fieldDelimiter": ","}},"writer": {"name": "hbase11xwriter","parameter": {"hbaseConfig": {"hbase.zookeeper.quorum": "master,node1,node2" },"table": "datax","mode": "normal","rowkeyColumn": [{"index": 0,"type": "string"},{"index": -1,"type": "string","value": "_"},{"index": 1,"type": "string"}],"column": [{"index": 2,"name": "cf1:age","type": "string"},{"index": 3,"name": "cf1:gender","type": "string"},{"index": 4,"name": "cf1:clazz","type": "string"},{"index": 5,"name": "cf1:ts","type": "string"}],"versionColumn": {"index": 5},"encoding": "utf-8"}}}]}}7、mysqltophoenix在Phoenix中创建STUDENT表CREATE TABLE IF NOT EXISTS STUDENT ( ID VARCHAR NOT NULL PRIMARY KEY,NAME VARCHAR,AGE BIGINT,GENDER VARCHAR ,CLAZZ VARCHAR);编写配置⽂件MySQLToPhoenix.json {"job": {"setting": {"speed": {"channel": 3},"errorLimit": {"record": 0,"percentage": 0.02}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","clazz"],"splitPk": "id","connection": [{"table": ["student"],"jdbcUrl": ["jdbc:mysql://master:3306/student?useSSL=false"]}]}},"writer": {"name": "hbase11xsqlwriter","parameter": {"batchSize": "256","column": ["ID","NAME","AGE","GENDER","CLAZZ"],"hbaseConfig": {"hbase.zookeeper.quorum": "master,node1,node2","zookeeper.znode.parent": "/hbase"},"nullMode": "skip","table": "STUDENT"}}}]}}执⾏datax.py xxxxx3、datax⾃定义参数Linux给⽂件替换字符串/替换内容/替换某⾏ (shell,sed)在⽂件⾥⾯替换命令修改sed 's/$$$/007/g' test.jsonjson⽂件(加⼊where筛选并加上参数){"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"splitPk": "age","where":"last_mod>'$param$'""connection": [{"table": ["student"],"jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "streamwriter","parameter": {"encoding": "UTF-8","print": true}}}],"setting": {"speed": {"channel": 5}}}}写定义参数脚本#!/bin/bashsed 's/\$param\$/20211207/g' test.json执⾏脚本获取每天时间,实现增量#!/bin/bashparam1=$(date "+%Y-%m-%d")sed -i "s/'\$param\$'/$param1/g" /usr/local/soft/datax/job/test.jsondatax.py /usr/local/soft/datax/job/test.jsonsed -i "s/$param1/'\$param\$'/g" /usr/local/soft/datax/job/test.json⼆、FlinkX1、安装1、上传解压直接Windows桌⾯拖进Linux系统上传,如果不⾏可以下载依赖包yum -y install lrzsz安装unzip:yum install unzip,并解压压缩包unzip flinkx-1.10.zip -d /usr/local/soft/2、配置环境变量,修改配置⽂件web服务端⼝,不指定的话会随机⽣成⼀个vim flinkconf/flink-conf.yamlrest.bind-port: 8888给bin/flinkx这个⽂件加上执⾏权限chmod a+x flinkx配置环境变量2、flinkx简单使⽤访问GitHub搜素flinkx有快速⼊门1、MySQLToHDFSjson⽂件{"job": {"content": [{"reader": {"parameter": {"username": "root","password": "123456","connection": [{"jdbcUrl": ["jdbc:mysql://master:3306/student?characterEncoding=utf8" ],"table": ["student"]}],"column": ["*"],"customSql": "","where": "clazz = '理科⼆班'","splitPk": "","queryTimeOut": 1000,"requestAccumulatorInterval": 2},"name": "mysqlreader"},"writer": {"name": "hdfswriter","parameter": {"path": "hdfs://master:9000/data/flinkx/student","defaultFS": "hdfs://master:9000","column": [{"name": "col1","index": 0,"type": "string"},{"name": "col2","index": 1,"type": "string"},{"name": "col3","index": 2,"type": "string"},{"name": "col4","index": 3,"type": "string"},{"name": "col5","index": 4,"type": "string"},{"name": "col6","index": 5,"type": "string"}],"fieldDelimiter": ",","fileType": "text","writeMode": "overwrite"}}}],"setting": {"restore": {"isRestore": false,"isStream": false},"errorLimit": {},"speed": {"channel": 1}}}}启动任务flinkx -mode local -job /usr/local/soft/flinkx-1.10/job/mysqlToHDFS.json -pluginRoot /usr/local/soft/flinkx-1.10/syncplugins/ -flinkconf /usr/local/soft/flinkx-1.10/flinkconf/监听⽇志flinkx 任务启动后,会在执⾏命令的⽬录下⽣成⼀个nohup.out⽂件tail -f nohup.out//实时查看tail -n 200 nohup.out //看后200⾏通过客户端查看,任务启动客户端可查看http://master:88882、MySQLToHivejson⽂件{"job": {"content": [{"reader": {"parameter": {"username": "root","password": "123456","connection": [{"jdbcUrl": ["jdbc:mysql://master:3306/student?characterEncoding=utf8"],"table": ["student"]}],"column": ["*"],"customSql": "","where": "clazz = '⽂科⼆班'","splitPk": "id","queryTimeOut": 1000,"requestAccumulatorInterval": 2},"name": "mysqlreader"},"writer": {"name": "hivewriter","parameter": {"jdbcUrl": "jdbc:hive2://master:10000/testflinkx","username": "","password": "","fileType": "text","fieldDelimiter": ",","writeMode": "overwrite","compress": "","charsetName": "UTF-8","maxFileSize": 1073741824,"tablesColumn": "{\"student\":[{\"key\":\"id\",\"type\":\"string\"},{\"key\":\"name\",\"type\":\"string\"},{\"key\":\"age\",\"type\":\"string\"}]}","defaultFS": "hdfs://master:9000"}}}],"setting": {"restore": {"isRestore": false,"isStream": false},"errorLimit": {},"speed": {"channel": 3}}}}在hive中创建testflinkx数据库,并创建student分区表create database testflinkx;use testflinkx;CREATE TABLE `student`(`id` string,`name` string,`age` string)PARTITIONED BY (`pt` string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','启动hiveserver2# 第⼀种⽅式:hiveserver2# 第⼆种⽅式:hive --service hiveserver2启动任务flinkx -mode local -job /usr/local/soft/flinkx-1.10/jsonConf/mysqlToHive.json -pluginRoot /usr/local/soft/flinkx-1.10/syncplugins/ -flinkconf /usr/local/soft/flinkx-1.10/flinkconf/ 3、MySQLToHBasejson⽂件{"job": {"content": [{"reader": {"parameter": {"username": "root","password": "123456","connection": [{"jdbcUrl": ["jdbc:mysql://master:3306/student?characterEncoding=utf8"],"table": ["score"]}],"column": ["*"],"customSql": "","splitPk": "student_id","queryTimeOut": 1000,"requestAccumulatorInterval": 2},"name": "mysqlreader"},"writer": {"name": "hbasewriter","parameter": {"hbaseConfig": {"hbase.zookeeper.property.clientPort": "2181","hbase.rootdir": "hdfs://master:9000/hbase","hbase.cluster.distributed": "true","hbase.zookeeper.quorum": "master,node1,node2","zookeeper.znode.parent": "/hbase"},"table": "testFlinkx","rowkeyColumn": "$(cf1:student_id)_$(cf1:course_id)","column": [{"name": "cf1:student_id","type": "string"},{"name": "cf1:course_id","type": "string"},{"name": "cf1:score","type": "string"}]}}}],"setting": {"restore": {"isRestore": false,"isStream": false},"errorLimit": {},"speed": {"channel": 3}}}}启动hbase 并创建testflinkx表create 'testFlinkx','cf1'启动任务flinkx -mode local -job /usr/local/soft/flinkx-1.10/jsonConf/mysqlToHBase.json -pluginRoot /usr/local/soft/flinkx-1.10/syncplugins/ -flinkconf /usr/local/soft/flinkx-1.10/flinkconf/。

一份全面的企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)

一份全面的企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)

一份全面的企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)编辑导语:在如今这个数据化时代,数据对于个人和企业来说,其重要性都不可小觑。

因此,有不少企业强化了数据工作,加强企业数据建设。

接下来,本文作者整理了一份超全面的企业数据产品的选型对比,希望对大家有所帮助。

前言:这个从上至下都在强调数字化转型的时代,越来越多公司重视数据,也越来越多的企业有数据建设的需求。

企业无论做任何数据工作,必然要有一定的信息化基础,也要有数据化建设的基础,少不了数据平台、数据应用工具,数据管理工具等。

关于企业数据建设这块,本人从事了近7年,从技术到项目管理,做过乙方也做过甲方,也有多年和各乙方厂商打交道的经验,遂来分享选型“内幕”。

涉及到的产品有:数仓、大数据平台、报表、BI、数据中台、数据治理等。

数据仓库算是一个解决方案,视企业需求有不同架构(传统数仓、数据集市、大数据平台等),架构下有很多分层和组件,比起工具更需要架构师能力,具体原理就不讲了。

关于数仓的选型主要涉及:数据存储方案、ETL、还有前端应用。

底层的数据仓库服务器通常是一个关系数据库系统,常用的方案有Oracle、db2、还有greenplum、teredata等数据仓库专业解决方案。

传统的关系型数据库有:oracle、mysql、DB2。

大规模并行处理数据库:Vertica、Teradata(商业)、Greenplum (开源)。

Teradata老江湖了,银行业使用较多,但成本也是真的贵,目前我们做项目较多的是用Greenplum,算是业界最快和最高性价比的高端数据仓库解决方案,Greenplum是基于PostgreSQL的,于2022年开源。

我知道的国内四大行有3家在用,5大物流公司有4家在用,不少公司在从Teradata迁移到GP。

大数据平台主流的是:Hadoop+Hive。

这套方案有多通用不用多说了,后面说到的大数据平台厂商也大多基于这个来设计平台产品。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主流ETL工具选型
ETL(extract, transform and load)产品乍看起来似乎并不起眼,单就此项技术本身而言,几乎也没什么特别深奥之处,但是在实际项目中,却常常在这个环节耗费太多的人力,而在后续的维护工作中,更是往往让人伤透脑筋。

之所以出现这种状况,恰恰与项目初期没有正确估计ETL工作、没有认真考虑其工具支撑有很大关系。

做ETL产品的选型,仍然需要从以前说的四点(即成本、人员经验、案例和技术支持)来考量。

在此,主要列举三种主流ETL产品:
Ascential公司的Datastage、
Informatica公司的Powercenter、
NCR Teradata公司的ETL Automation、
Oracel 公司的ODI、
国产udis睿智ETL、
其中,ETL Automation相对其他两种有些特别之处,放在后面评述。

旗鼓相当:Datastage与Powercenter:
就Datastage和Powercenter而言,这两者目前占据了国内市场绝大部分的份额,在成本上看水平相当,虽然市面上还有诸如Business Objects公司的Data Integrator、Cognos公司的DecisionStream,但尚属星星之火,未成燎原之势。

谈Datastage和Powercenter,如果有人说这个就是比那个好,那听者就要小心一点了。

在这种情况下有两种可能:他或者是其中一个厂商的员工,或者就是在某个产品上有很多经验而在另一产品上经验缺乏的开发者。

为什么得出这一结论?一个很简单的事实是,从网络上大家对它们的讨论和争执来看,基本上是各有千秋,都有着相当数量的成功案例和实施高手。

确实,工具是死的,人才是活的。

在两大ETL工具技术的比对上,可以从对ETL流程的支持、对元数据的支持、对数据质量的支持、维护的方便性、定制开发功能的支持等方面考虑。

一个项目中,从数据源到最终目标表,多则上百个ETL过程,少则也有十几个。

这些过程之间的依赖关系、出错控制以及恢复的流程处理,都是工具需要重点考虑。

在这一方面,Datastage的早期版本对流程就缺乏考虑,而在6版本则加入Job Sequence的特性,可以将Job、shell脚本用流程图的方式表示出来,依赖关系、串行或是并行都可以一目了然,就直
观多了。

Powercenter有Workflow的概念,也同样可以将Session串联起来,这和Datastage Sequence大同小异。

ETL的元数据包括数据源、目标数据的结构、转换规则以及过程的依赖关系等。

在这
方面,Datastage和Powercenter从功能上看可谓不分伯仲,只是后者的元数据更加开放,存放在关系数据库中,可以很容易被访问(Informatic把Metadata全部放在数据库中而Datastage是自己管理Metadata,不依赖任何数据库.)。

此外,这两个厂家又同时提供专门的元数据管理工具,Ascential有Metastage,而Informatica拥有Superglue。

你看,就不给你全部功能,变着法子从你口袋里面多掏点钱。

数据质量方面,两种产品都采用同样的策略——独立出ETL产品之外,另外有专门的数据质量管理产品。

例如和Datastage配套用的有ProfileStage和QualityStage,而Informatica最近也索性收购了原先OEM的数据质量管理产品FirstLogic。

而在它们的ETL
产品中,只是在Job或是Session前后留下接口,所谓前过程、后过程,虽然不是专为数据质量预留的接口,不过至少可以利用它外挂一些数据质量控制的模块。

在具体实现上看,Datastage通过Job实现一个ETL过程,运行时可以通过指定不同
参数运行多个实例。

Powercenter通过Mapping表示一个ETL过程,运行时为Session,绑定了具体的物理数据文件或表。

在修改维护上,这两个工具都是提供图形化界面。

这样的好处是直观、傻瓜式的;不好的地方就是改动还是比较费事(特别是批量化的修改)。

定制开发方面,两者都提供抽取、转换插件的定制,但笔者认为,Datastage的定制
开发性要比Powercenter要强那么一点点。

因为Datastage至少还内嵌一种类BASIC语言,可以写一段批处理程序来增加灵活性,而Powercenter似乎还缺乏这类机制。

另外从参数控制上,虽然两者的参数传递都是比较混乱的,但Datastage至少可以对每个job设定参数,并且可以job内部引用这个参数名;而Powercenter显得就有些偷懒,参数放在一个参数文件中,理论上的确可以灵活控制参数,但这个灵活性需要你自己更新文件中的参数值(例如日期更新)。

另外,Powercenter还不能在mapping或session中引用参数名,这一点就让人恼火。

总起来看,Datastage和Powercenter可谓旗鼓相当,在国内也都有足够的支持能力,Datastage在2005年被IBM收购之后,可以说后劲十足。

而Informatica则朝着BI全解决方案提供商方向发展,Powercenter显然还将是它的核心产品。

ODI
ODI提出了知识模块的概念,把这些场景的详细的实现步骤作为一个一个的知识模块
并使用Jython脚本语言结合数据库的SQL语句录制成一步一步的步骤忠实地记录下来,这样就形成了ODI里的100多个知识模块,基本上包含了所有普通应用所涉及到的所有场景。

更方便的是,用户既可以直接使用ODI的知识模块完成数据的获取工作,也可以直接在知识模块上面做各种定制,比如某一个业务场景可能并不需要知识模块里的某一个特定的步骤,那就可以直接把该步骤删除掉从而提供更好的性能。

当然用户也可以完全自己来开发这些知识模块。

ODI的知识模块主要分为几个大类(RKM,CKM,LKM,IKM,SKM),其中最重要的是LKM (load KM)和IKM(Integration KM)RKM。

RKM:完成从源系统和目标系统的数据结构的反向工程来形成数据模型的功能。

CKM:CKM完成数据质量检查。

LKM:LKM完成从源数据库数据加载到临时表。

IKM:IKM完成从临时表的数据加载到目标表。

SKM:SKM完成ODI和WEB服务接口的功能。

ODI的性能不是很好,Powercenter > Datastage > ODI
独树一帜:Teradata的ETL Automation
继续要说的第三种产品是Teradata的ETL Automation。

之所以拿它单独来说是因为它和前面两种产品的体系架构都不太一样。

与其说它是ETL工具,不如说是提供了一套ETL框架。

它没有将注意力放在如何处理“转换”这个环节上,而是利用Teradata数据库本身的并行处理能力,用SQL语句来做数据转换的工作,其重点是提供对ETL流程的支持,包括前后依赖、执行和监控等。

这样的设计和Datastage、Powercenter风格迥异,后两者给人的印象是具有灵活的图形化界面,开发者可以傻瓜式处理ETL工作,它们一般都拥有非常多的“转换”组件,例如聚集汇总、缓慢变化维的转换。

而对于Teradata的ETL Automation,有人说它其实应该叫做ELT,即装载是在转换之前的。

的确,如果依赖数据库的能力去处理转换,恐怕只能是ELT,因为转换只能在数据库内部进行。

从这个角度看,Automation对数据库的依赖不小,似乎是一种不灵活的设计。

也正是这个原因,考虑它的成本就不单单是ETL产品的成本了。

其实,在购买现成的工具之外,还有自己从头开发ETL程序的。

ETL工作看起来并不复杂,特别是在数据量小、没有什么转换逻辑的时候,自己开发似乎非常节省成本。

的确,主流的ETL工具价格不菲,动辄几十万;而从头开发无非就是费点人力而已,可以控制。

至于性能,人大多是相信自己的,认为自己开发出来的东西知根知底,至少这些程序可以完全由自己控制。

就目前自主开发的ETL程序而言,有人用c语言编写,有人用存储过程,还有人用各种语言混杂开发,程序之间各自独立。

这很危险,虽然能够让开发者过足编码的瘾,却根本不存在架构。

有位银行的朋友,他们几年前上的数据仓库系统,就是集成商自己用c语言专门为他们的项目开发的。

单从性能上看似乎还不赖,然而一两年下来,项目组成员风雨飘零,早已物是人非,只有那套程序还在那里;而且,按照国内目前的软件工程惯例,程序注释和文档是不全或者是不一致的,这样的程序已经对日常业务造成很大阻碍。

最近,他们已经开始考虑使用ETL工具重新改造了。

国产ETL软件—udis睿智ETL :
再来看国产的, 采用SOA架构体系,具有更好的方便性和灵活性.缺点是配置复杂,缺少对元数据的管理。

相关文档
最新文档