1.如何更改 datax 以支持hive 的编译 DECIMAL 数据类型?
2.如何评价datax的应用?
3.工具Datax的基本概念(初识ETL工具)
4.大数据技术之Datax
5.数据资产管理平台体系拆解(4):元数据管理
6.DataX任务容器
如何更改 datax 以支持hive 的 DECIMAL 数据类型?
在处理数据时,我们经常需要将数据从一种数据类型转换为另一种数据类型。源源码在数据迁移任务中,分析如果涉及到使用datax进行数据迁移,编译且源数据或目标数据中出现了Hive的源源码DECIMAL数据类型,那么如何确保数据迁移的分析易经源码解析准确性和完整性就成为了一个关键问题。本文将详细介绍如何更改datax以支持Hive的编译DECIMAL数据类型。
在JAVA中,源源码主要使用float/double和BigDecimal来存储小数。分析其中,编译float和double在不需要完全精确的源源码计算结果的场景下,可以提供较高的分析运算效率,但当涉及到金融等场景需要精确计算时,编译必须使用BigDecimal。源源码
Hive支持多种数字类型数据,分析如FLOAT、DOUBLE、DECIMAL和NUMERIC。DECIMAL数据类型是后加入的,允许设置精度和标度,适用于需要高度精确计算的场景。
若要使datax支持Hive的DECIMAL数据类型,关键在于修改datax源码,增强其对DECIMAL数据的读取和写入能力。主要通过以下几个步骤:
1. **修改HDFS Reader**:在处理Hive ORC文件时,需要修改HDFS Reader插件中的相关类和方法,如DFSUtil#transportOneRecord。通过该步骤,确保能正确读取到ORC文件中的DECIMAL字段。datax的Double类型可以通过其内部的rawData字段存储数据的原始内容,支持Java.math.BigDecimal和Java.lang.Double,因此可以实现不修改HDFS Reader代码,直接读取并处理DECIMAL数据的目标。配置作业时,将Hive的DECIMAL字段指定为datax的Double类型,HDFS Reader在底层调用Hive相关API读取ORC文件中的DECIMAL字段,将其隐式转换为Double类型。datax的Double类型支持Java.math.BigDecimal和Java.lang.Double,确保后续写入操作的精度。
2. **修改HDFS Writer**:为了支持写入数据到Hive ORC文件中的DECIMAL字段,同样需要在HDFS Writer插件中进行相应的代码修改。修改后的代码确保能够将datax的Double字段正确写入到Hive ORC文件中的DECIMAL字段。使用方法com.alibaba.datax.common.element.DoubleColumn#asBigDecimal,vs源码切换基于DoubleColumn底层rawData存储的原始数据内容,将字段值转换为合适的外部数据类型。这一过程不会损失数据精度。
综上所述,通过修改datax的HDFS Reader和Writer插件,实现对Hive DECIMAL数据类型的读取和写入支持,确保数据迁移过程的准确性和完整性,从而满足复杂数据迁移场景的需求。
如何评价datax的应用?
为了改进datax任务进度信息展示方式,我们计划对源码进行改造,将实时任务进度信息结构化存储在redis服务器中,让前端通过轮询实时从redis中获取进度信息,从而提供给用户更友好的体验。
在分析datax任务进度信息的打印逻辑时,我们发现这些信息首先被task group汇总收集,然后由job进一步汇总收集。因此,job能够收集并汇总所有任务的进度信息。
进一步探究,我们了解到JobContainer依赖的Scheduler会周期性打印job收集汇总的进度信息。具体实现可见于源码中的com.alibaba.datax.core.job.scheduler.AbstractScheduler#schedule函数,以及com.alibaba.datax.core.statistics.container.communicator.job.StandAloneJobContainerCommunicator#report函数。
了解了datax的hook机制后,我们能够设计实现从datax实时获取并持久化进度信息至redis的功能。关键在于,我们可以在打印进度信息的时机触发invokeHook方法,通过配置信息和进度信息作为参数,调用自定义实现的Hook类的invoke方法。具体地,我们设计了一个名为RedisReportHook的自定义Hook类,用于将进度信息持久化至redis。
工具Datax的基本概念(初识ETL工具)
ETL技术的实质是将数据经过抽取、清洗转换之后加载到数据仓库的过程。DataX是由阿里巴巴研发并开源的异构数据源离线同步工具,能实现不同数据源之间的数据同步,包括关系型数据库、NoSQL数据存储、无结构化数据存储、时间序列数据库以及阿里的云数仓数据存储。DataX是阿里云DataWorks数据集成的开源版本,用于在阿里巴巴集团内广泛使用的离线数据同步工具/平台,支持包括MySQL、linux login 源码Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS等各种异构数据源之间的高效数据同步。
DataX采用Framework + plugin的架构,数据同步步骤将数据的读取、写入操作抽象为由Reader/Writer插件处理,纳入整个同步框架。其核心组件包括Job、Task、Channel以及Transformer。
Job代表数据同步任务;Task代表运行一个单独的同步线程,该线程使用一个Channel作为Reader与Writer的数据传输媒介;数据流转方向为Reader—>Channel—>Writer。
Transformer模式提供强大的数据转换功能,DataX内置丰富数据转换实现类,用户可根据自身需求扩展数据转换。
DataX的安装部署可选择直接下载工具包或下载源码自主编译。下载后解压至本地目录即可运行同步作业。自检脚本为:python { YOUR_DATAX_HOME}/bin/datax.py { YOUR_DATAX_HOME}/job/job.json。
若数据源同步遇到格式不匹配问题,可以修改相应的reader与writer代码,然后maven编译,后续会提供具体源码修改示例。
DataX的源码可在gitee上找到,以解决github地址在国内可能存在的连接问题。参考网址提供了更多关于ETL工具-Datax的资源。
大数据技术之Datax
分享大数据技术之Datax的使用与特性,旨在解决大数据生产环境中的数据同步需求。Datax是阿里巴巴开源的异构数据源离线同步工具,支持多种数据源之间的数据同步,包括关系型数据库、HDFS、Hive、ODPS、源码商城yuanmajiaHBase、FTP等。
Datax的核心设计思路是将复杂的同步链路转变为星型数据链路,作为中间传输载体实现数据同步。采用Framework + plugin架构,将数据源读取和写入抽象为Reader/Writer插件,使得框架负责内部的序列化传输、缓冲、并发、转换等,而数据采集和落地核心操作则由插件执行。
Datax拥有全面的插件体系,支持主流数据库、NoSQL、大数据计算系统等,提供丰富的数据源参考指南。单个数据同步作业由Job模块管理,启动进程完成整个同步过程。Job模块负责数据清理、子任务切分、TaskGroup管理等,将单一作业拆分为多个Task并行执行。每个Task由TaskGroup启动,执行Reader-Channel-Writer线程完成同步任务。
Datax快速入门指南提供下载地址和源码地址,需满足前置要求并完成安装。类图展示了Datax的启动流程,包括解析配置、设置参数、启动Engine、初始化reader和writer插件、切分任务、执行任务等步骤。Datax-web是基于Datax开发的分布式数据同步工具,提供用户界面,简化任务配置,支持多种数据源,提供同步进度、日志查看及终止功能,并集成时间、增量同步功能。
Datax-web的表单 ab 源码搭建教程可在官网找到,如遇疑问可直接联系作者。Datax与Datax-web结合使用,能够实现大数据采集模块的自动化和高效同步,减少开发成本。
以上内容仅为Datax技术概览,更多深入细节和实践案例将在后续文章中分享。希望读者在大数据领域取得成就,收获满满。我是脚丫先生,期待与您下期再见。
数据资产管理平台体系拆解(4):元数据管理
阅读本文需要分钟,以数据之名,践资产之行。
1、以数据之名 简介
2、元数据的基本概念
2.1 抽象概念
元数据,简单来说就是描述数据的数据。元数据无处不在,换言之有数据存在,就有其对应元数据。完整、准确的元数据存在,有助于更好地理解数据本体,充分挖掘数据的价值。
单存的从概念来讲,确实比较抽象,我们对元数据的理解还是很模糊。那么让我们先看一段简历达人"张三"的个人简历。
这份简历中的"电话"、"工作经验"、"年龄"、"邮箱"、"教育背景"等对于张三本人的关键描述信息,就是元数据,因为它们是用来描述具体数据/信息的数据/信息。这样引用论证的方式,是不是让我们对元数据的概念一瞬间立体起来啦。
2.2 具体概念
对于企业应用的具体概念,元数据是企业所使用的物理数据、业务流程、数据结构等有关的信息,描述了数据(如数据库、数据模型)、概念(如业务流程、应用系统、技术架构)以及它们之间的关系。
元数据管理是对数据采集、存储、加工和展现等数据全生命周期的描述信息,帮助用户理解数据关系和相关属性。
3、元数据的价值
通过元数据管理,形成整个系统信息数据资产的精准视图,通过元数据的统一视图,缩短数据清理周期、提高数据质量以便能系统性地管理数据中心项目中来自各业务系统的海量数据,梳理业务元数据之间的关系,建立信息数据标准完善对这些数据的解释、定义,形成企业范围内一致、统一的数据定义,并可以对这些数据来源、运作情况、变迁等进行跟踪分析。
元数据是企业数据资产的基础应用字典和操作指南,元数据管理有利于统一数据口径、标明数据方位、分析数据关系、管理数据变更,为企业级的数据治理提供支持,是企业实现数据自服务、推动企业数据化运营的可行路线。
4、元数据分类
4.1 业务元数据
4.2 管理元数据
4.3 技术元数据
描述对象存储的元数据,也是通常"狭义"上的元数据,包括几大类:
描述离线或实时ETL任务数据计算过程的元数据。
描述数据质量的一类元数据。
描述数据是如何进行使用的一类元数据。
描述系统运维层面的元数据,通常包括以下几类。
描述数据存储及计算成本的元数据。
描述数据标准化内容的元数据。
描述数据安全内容的元数据。
描述数据是如何共享的部分,通常使用以下几种方式:
5、元数据管理办法
5.1 关键活动
5.2 管理流程
我们可以采用角色与组织联动,制定一套标准化元数据管理流程体系,贯穿于整个数据采集、管理分析与数据服务端到端的实施过程,来完善整体的元数据管理体系。
6、元数据管理功能
6.1 元数据采集
元数据管理平台通过不同的数据采集适配器,能支持从不同的数据源中采集从生产业务系统、数据中转系统、数据应用系统等端到端应用链路的数据流转过程的全量元数据,包括过程中的数据实体(系统、库、表、字段的描述)以及数据实体加工处理过程中的逻辑元数据。同时还能制定采集任务定时采集,减少人工操作的IT成本。
6.2 元数据访问
元数据访问服务是元数据管理软件提供的元数据访问的接口服务,一般支持Http、文件、接口库等对接形式。通过元数据访问服务支持企业元数据的共享,是企业数据治理的基础。
6.3 元数据管理
实现元数据的模型定义并存储,在功能层包装成各类元数据功能,最终对外提供应用及展现;提供元数据分类和建模、血缘关系和影响分析,方便数据的跟踪和回溯。
6.4 元数据分析
元数据的应用一般包括数据地图、数据血缘分析、关联性分析、影响分析、全链分析等,分析出元数据的来龙去脉,快速识别元数据的价值,掌握元数据变更可能造成的影响,以便更有效的评估变化带来的风险,从而帮助用户高效准确的对数据资产进行清理、维护与使用。
7、元数据管理功能架构
备注:权限管理中心,走平台统一鉴权SSO
8、元数据血缘解析
8.1 血缘解析引擎构建
基于数据资产开发平台作为开发统一入口的前提,构建元数据血缘引擎服务体系。引擎体系:SQL、Kettle 、Xml、Excel、Interface、Service、Workflow 、Datax等任务体系:DMP(Datax任务、SQL任务、Shell任务、报表任务、监控任务)、KMP(Kettle任务)、DMS(接口和服务)、BMP(工作流和调度器)等目标方向:基于血缘解析引擎解析落地元数据,提供可视化的标准ETL任务元数据血缘查询服务,以及KMP/DMP/BMP三大平台任务关联性和影响性分析服务。
8.2 血缘解析引擎机制
基于DMP数据管理开发平台,快速实施个性化报表开发的端到端流程图,其中任务开发、血缘查询和血缘确认环节为开发人员手动实施流程,其余环节为平台系统自动化实施流程,具体如下图所示:
9、元数据功能预览
9.1 血缘分析
9.2 影响分析
9.3 全链分析
9.4 关联度分析
9.5 元数据全文检索
、数据平台文章集锦
数据资产管理平台体系拆解(1):“平台概述”
数据资产管理平台体系拆解(2):“系统分解”
数据资产管理平台体系拆解(3):“数据模型”
MySQL死磕到底系列第一篇“围城之困”
MySQL死磕到底系列第二篇“破冰之旅”
MySQL死磕到底系列第三篇“踏浪之途”
MySQL死磕到底系列第四篇“刨根之程”
MyCAT来生续缘第三篇
无Hive,不数仓
基于Hive+HBase双引擎完善数据仓库更新机制
基于TiDB构建高性能综合数据服务平台
基于Kettle快速构建基础数据仓库平台
金融数据仓库之分层命名规范
一入数据深似海,集市仓库湖中台
湖不湖实战系列之Hudi构建湖仓一体架构
湖不湖实战系列之Hudi源码编译
湖不湖实战系列之Spark2部署升级
湖不湖实战系列之Spark2构建HDFS到Hudi通路
湖不湖实战系列之Spark2构建Hive到Hudi通路
BI选型哪家强,以数据之名挑大梁
数仓小白快速成长为技术专家视频资料集合
小编心声 虽小编一己之力微弱,但读者众星之光璀璨。小编敞开心扉之门,还望倾囊赐教原创之文,期待之心满于胸怀,感激之情溢于言表。一句话,欢迎联系小编投稿您的原创文章! 让我们携手成为技术专家
参考资料
[1] 元数据分类参考1: baijiahao.baidu.com/s?...
[2] 元数据分类参考2: baijiahao.baidu.com/s?...
[3] 数据资产白皮书5.0:中国信通院
[4] Markdown模板: product.mdnice.com/arti...
DataX任务容器
DataX任务容器涉及的源码分析如下:
在DataX中,判断容器是否为job或taskGroup类型,这一步骤是通过容器执行源码实现的。DataX提供两种容器类:taskGroupContainer和jobContainer,它们都是抽象类AbstractContainer的实现。
抽象类AbstractContainer中定义了一个抽象方法start,这个方法在容器启动时被调用。
任务容器的执行流程如下:当任务容器被启动后,它会按照任务生命周期的每个阶段进行执行。这是单个数据任务的调度过程,通常依赖数据任务调度DAG实现。尽管开源的DataX调度功能较为基础。
DataX安装部署
DataX安装部署涉及文档查阅、工具包下载、解压目录选择、编译源码、创建配置文件、启动DataX等步骤。首先,访问DataX的用户指南文档,获取安装部署的具体信息。文档地址位于 DataX/userGuid.md at master · alibaba/DataX。部署前需满足相关需求。
选择合适的下载地址获取DataX工具包,直接下载后解压至本地,进入bin目录即可运行同步作业。或下载源码并自行编译。编译步骤包括下载源码、使用maven进行打包。打包成功后,日志会显示DataX包位于指定路径,通常位于 { DataX_source_code_home}/target/datax/,并呈现特定目录结构。
配置文件创建是关键步骤,文件应采用json格式。使用命令查看配置模板,根据模板内容,手工或借助工具生成所需的json配置文件,确保内容完整、准确。
启动DataX前,确保所有依赖环境已经准备就绪。启动DataX后,系统将按照配置文件执行同步作业,同步过程的详细日志记录在控制台输出中。注意查看日志,及时发现并解决问题,以确保数据同步过程顺利无误。
在实际部署过程中,可能会遇到各种问题,如依赖缺失、配置文件错误、权限问题等。解决问题时,建议仔细检查文档、日志和配置文件,确保每一步操作准确无误。此外,定期更新DataX版本,以获得最新的功能和修复已知问题,提高数据同步的稳定性与效率。
Datax二次开发支持增量更新
Datax的二次开发支持增量更新功能,这对于处理Oracle和Mysql之间的数据同步特别重要。原版的OracleWriter和MysqlWriter并不支持writeMode配置,这在某些场景下可能会有所限制。 经过博主们的实践和探索,我们找到了一种有效的解决方法。首先,需要对Datax的源码进行定制,具体步骤如下:修改OracleWriter.java文件,移除原有的限制条件。
接着,对WriterUtil.java进行增强,添加Oracle数据插入时的类型转换处理,以确保数据的正确性。
另外,关注CommonRdbmsWriter部分,这里的配置实际上底层实现了Oracle的MERGE语句,这个特性使得增量更新得以实现。
通过这样的定制,Datax现在能够支持Oracle的数据增量更新,为数据同步任务提供了更大的灵活性和效率。