1.有哪些优秀的Java开源项目最值得阅读?
2.Datax二次开发支持增量更新
3.Datax3.0的安装和基本使用
4.datax集群安装部署
5.DataX报错
6.如何更改 datax 以支持hive 的 DECIMAL 数据类型?
有哪些优秀的Java开源项目最值得阅读?
探索Java世界中的璀璨开源宝藏!在这个充满创新与知识的海洋里,我们精心挑选了一系列顶级Java开源项目,它们不仅为学习者提供了宝贵的资源,更是工程师们提升技能、解决实际问题的友还源码得力助手。以下是其中的精华推荐,涵盖了从基础到进阶,再到实战应用的全方位内容:JavaGuide: 游刃有余地探索Java的每一个角落,无论是学习指南还是面试必备知识,这里一应俱全。
CS-Notes: 精确到细节的编程基石,包含LeetCode、Java等基础知识,助你构建扎实的技术基础。
advanced-java: 专为互联网工程师打造的进阶技术,涵盖并发、分布式等领域,让你在技术栈上更进一步。
architect-awesome: 架构设计的灵感源泉,探索后端架构的最佳实践和趋势。
ToBeTopJavaer: 详尽的Java成长路线图,带你从新手到专家的每一步。
tutorials: Spring Framework的深度解析,以及核心Java技术的实战教程,让你掌握最热门框架。
JCSprout, JavaFamily, JGrowing: 不断增长的学习资源库,为你的Java学习之路提供更多选择。
Data structures & algorithms: LeetCode的动作源码可视化教程,让数据结构和算法学习不再枯燥。
SpringBootSpringAll, springboot-learning-example: 易于上手的Spring Boot实例,深入理解微服务架构的关键技术。
SpringCloud: 微服务、Spring Security等的实战应用,带你领略云计算的力量。
BigData-Notes: 探索大数据世界,Flink的入门与进阶教程不可错过。
flink-learning: Apache Flink的全面教程,解锁实时流处理的魅力。
Design patterns, Spring Boot framework, Apache Flink: 设计模式与框架实战,提升代码质量与性能。
别忘了,为这些项目的贡献者点赞和分享你的发现,让更多人受益。让我们一起在这些开源项目中寻找创新灵感和提升自己的机会:Flink: 以内存速度进行有状态计算,适应各种集群环境。
Sentinel: 轻量级流量控制,确保服务的可靠性和监控。
Dubbo: 高性能Java RPC框架,简化服务间通信。
Spring-cloud-kubernetes: Spring Cloud与Kubernetes的无缝集成,扩展部署能力。
Seata: 分布式事务解决方案,解决复杂场景中的数据一致性问题。
Skywalking: 分布式应用性能监控,助力微服务监控与优化。
Elasticsearch: 高效的kafkamanager源码分布式搜索引擎,满足大数据搜索需求。
Zipkin: 分布式追踪系统,追踪服务间的通信链路。
Apollo: 微服务配置中心,简化配置管理。
Canal: 数据同步利器,实现数据库变更实时推送。
DataX: 高效的数据迁移工具,连接多个数据源。
CAT: 美团点评的全方位服务监控,监控性能瓶颈。
WildFire IM: 实时通讯解决方案,连接人与设备。
EasyScheduler: 分布式工作流管理,简化任务调度。
Halo: 优质Java博客平台,汇集行业知识与见解。
Mall, Mall-Swarm: 实战电商系统,展示Spring Boot与微服务的力量。
Litemall: 轻量级商城,前端与移动端一体化开发。
VHR, FEBS-Shiro: 人力资源管理与权限管理系统,实现高效办公。
Guava: Alibaba的实用工具集合,提升开发效率。
P3C, Arthas: 阿里巴巴编码规范与诊断工具,保障代码质量。
Hutool: 丰富且实用的postgrelsql源码Java工具包,简化开发过程。
Thingsboard: 全方位的物联网平台,连接物理世界与数字世界。
这些开源项目是Java开发者们的宝藏,它们不仅提供了丰富的学习资源,还展示了业界最佳实践。持续关注,不断探索,让它们成为你提升编程技能的有力伙伴。Datax二次开发支持增量更新
Datax的二次开发支持增量更新功能,这对于处理Oracle和Mysql之间的数据同步特别重要。原版的OracleWriter和MysqlWriter并不支持writeMode配置,这在某些场景下可能会有所限制。 经过博主们的实践和探索,我们找到了一种有效的解决方法。首先,需要对Datax的源码进行定制,具体步骤如下:修改OracleWriter.java文件,移除原有的限制条件。
接着,对WriterUtil.java进行增强,添加Oracle数据插入时的类型转换处理,以确保数据的正确性。
另外,关注CommonRdbmsWriter部分,这里的配置实际上底层实现了Oracle的MERGE语句,这个特性使得增量更新得以实现。
通过这样的yeclipse源码定制,Datax现在能够支持Oracle的数据增量更新,为数据同步任务提供了更大的灵活性和效率。Datax3.0的安装和基本使用
数据X(DataX)是阿里巴巴集团内部广泛应用的离线数据同步工具,能够实现包括MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、OTS、ODPS等不同数据源之间的高效数据同步。DataX以数据同步框架的形式存在,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件和向目标端写入数据的Writer插件,理论上支持任意数据源类型的数据同步工作。DataX插件体系作为一套生态系统,每接入一套新数据源,即可实现与现有数据源的互通。
数据转移的直观实现,即从一个数据库快速转移到另一个数据库中,并且是离线操作。安装DataX步骤如下:首先,从DataX下载地址获取最新版本并解压到服务器中。接着,通过chmod -R ./datax命令给文件夹增加读、写、执行的最高权限。最后,使用python datax.py ../job/job.json测试安装是否成功。
编写脚本进行测试,通常遵循模板:python datax.py -r { 读的name} -w { 写的name},并根据提示进行适当的修改。DataX脚本示例包括但不限于name(表示数据库的读或写)、column(需要读取或写的字段)、connection(连接的URL,注意reader中的URL为数组,writer中的URL为String类型)、table(表名)、username(数据库名称)、password(数据库密码)。重要提示:确保数据库名称和密码的正确性,避免写反。
在处理数据源版本时,请注意DataX默认使用的驱动为mysql-connector-java-5.1..jar。如果使用的是8.0版本的数据库,需要添加相应的8.0驱动,路径为:/test/datax/plugin/writer/mysqlwriter/libs(根据实际情况调整路径)。可以通过查询版本(如执行select version())来确认数据库版本。
最后一步是运行脚本:python datax.py ./mysql2mysql.json(请根据实际情况修改路径和脚本名称),如果输出与之前测试成功时相似的结果,则表示DataX安装和配置成功。
datax集群安装部署
一、环境准备 1、基础软件安装MySQL5.7或更高版本
JDK (1.8.0_xxx)
DataX
Python (2.x) 或根据Python3需要修改替换datax/bin下面的三个python文件(替换文件在doc/datax-web/datax-python3下),用于启动DataX底层脚本,默认以Java子进程方式执行,用户可选择以Python方式自定义改造。
2、硬件环境三台主机:datax-, datax-, datax-
二、Datax 安装下载
解压 & 测试
执行测试脚本
三、Datax-web 安装下载&上传:下载完成后上传到 /data/soft目录下。
安装
配置:修改./modules/datax-executor/bin/env.properties,内容为datax解压目录下的datax.py位置。
启动
访问
四、部署集群新添加的Executor需安装datax、datax-web(可选只安装datax-executor)
指定datax.py位置:修改 `modules/datax-executor/bin/env.properties`
指定 datax-web 地址:修改/modules/datax-executor/conf/application.yml
启动执行器
查看执行器
五、配置同步根据日期进行增量数据抽取:
页面任务配置:打开菜单任务管理页面,选择添加任务并填写任务配置细节,仔细阅读文档以避免错误。
JSON配置:datax.json
querySql解析:例如:select * from test_list where operationDate >= ${ lastTime} and operationDate < ${ currentTime}
根据自增Id进行增量数据抽取:
页面任务配置:同上
JSON配置:datax.json
querySql解析:例如:select * from test_list where id > ${ lastId}
六、常见问题参考文档:github.com/WeiYe-Jing/d...
DataX报错
在尝试建立与SQL Server的安全连接时,遇到了`com.microsoft.sqlserver.jdbc.SQLServerException`错误,指出驱动程序无法通过SSL加密建立安全连接。具体错误信息为:“The server selected protocol version TLS is not accepted by client preferences [TLS, TLS]”。这表明服务器选择的协议版本(TLS)不符合客户端的偏好协议(TLS或TLS)。
解决这一问题,需确保客户端和服务器端的SSL/TLS协议版本兼容。首先,检查SQL Server的配置设置,确认其支持的SSL/TLS协议版本。通常,SQL Server应至少支持TLS1.2。如需更新,参考SQL Server文档进行配置调整。
其次,检查客户端(如使用Java或.NET等开发工具)的SSL/TLS配置。确保其安全连接设置中包含TLS1.2或更高版本。在Java中,可能需要调整`java.security`系统属性或使用特定的SSL工厂来指定协议版本。在.NET环境中,调整`System.Net`命名空间下的网络配置,以允许使用TLS1.2。
若客户端和服务器端配置已正确,但问题仍然存在,可能需要进一步检查中间件或防火墙设置,确保没有阻止所需协议版本的通信。对于防火墙和代理服务器,确保它们不阻止TLS1.2及以上的安全连接。
最后,验证操作系统和网络环境是否支持并允许使用TLS1.2及以上版本。在某些老旧的环境中,可能需要更新或升级操作系统,以确保支持更高的SSL/TLS协议版本。
通过上述步骤,应能有效解决SQL Server与客户端之间因SSL/TLS协议版本不兼容导致的连接问题,确保安全、稳定的数据传输。
如何更改 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,基于DoubleColumn底层rawData存储的原始数据内容,将字段值转换为合适的外部数据类型。这一过程不会损失数据精度。
综上所述,通过修改datax的HDFS Reader和Writer插件,实现对Hive DECIMAL数据类型的读取和写入支持,确保数据迁移过程的准确性和完整性,从而满足复杂数据迁移场景的需求。