gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档大数据开发

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "大数据开发"
  • ( 页面3 )
Flink 1月 22,2025

Flink1.7文档 时间表函数

时间表函数提供了在特定时间点访问时间表版本的功能。为了访问时间表中的数据,必须传递一个时间属性,该属性确定返回的表的版本。Flink 使用表函数的 SQL 语法来提供这种访问方式。

与版本化表不同,时间表函数只能在追加-only 流上定义——它不支持变更日志输入。此外,时间表函数不能通过纯 SQL DDL 来定义。

定义时间表函数

时间表函数可以使用 Table API 在追加-only 流上定义。表会注册一个或多个键列,以及用于版本控制的时间属性。

假设我们有一个追加-only 的货币汇率表,我们希望将其注册为时间表函数。

SELECT * FROM currency_rates; 
update_timecurrencyrate
09:00:00Yen102
09:00:00Euro114
09:00:00USD1
11:15:00Euro119
11:49:00Pounds108

使用 Table API,我们可以使用 currency 作为键,并将 update_time 作为版本时间属性来注册该流。

Java 示例:

TemporalTableFunction rates = tEnv
    .from("currency_rates")
    .createTemporalTableFunction("update_time", "currency");
 
tEnv.createTemporarySystemFunction("rates", rates);      

时间表函数连接

定义时间表函数后,它可以作为标准表函数使用。追加-only 表(左输入/探测方)可以与时间表(右输入/构建方)连接,即一个随着时间变化并跟踪其变化的表,用于在特定时间点获取某个键的值。

考虑一个追加-only 表 orders,它跟踪客户的订单并使用不同的货币。

SELECT * FROM orders; 
order_timeamountcurrency
10:152Euro
10:301USD
10:3250Yen
10:523Euro
11:045USD

给定这些表,我们希望将订单转换为一种统一的货币——美元(USD)。

SQL 查询:

SELECT
  SUM(amount * rate) AS amount
FROM
  orders,
  LATERAL TABLE (rates(order_time))
WHERE
  rates.currency = orders.currency
作者 east
运维 1月 17,2025

selenium自动化测试,谷歌驱动器chromedriver最新版本下载(亲试有效)

在用selenium做自动化测试,用的电脑后台自动更新chrome,导致chromedriver版本跟 chrome 版本不一致。

还好官方有更新最新版,可以通过下面的地址进行下载,如果没有chrome也可以在下面一起下载。

https://googlechromelabs.github.io/chrome-for-testing/

作者 east
doris 1月 14,2025

解决Navicat查看导入运行任务ROUTINE:1105 – errCode = 2, detailMessage = Please check your sql, we meet an error when parsing.

第一次 通过 Doris Routine Load 导入方式持续消费 Kafka Topic 中的数据。 按官方文档
Routine Load – Apache Doris

在navicat按照官方示例查看导入任务:

mysql> SHOW ROUTINE LOAD FOR testdb.example_routine_load\G

发现报错:

1105 – errCode = 2, detailMessage = Please check your sql, we meet an error when parsing.

刚开始很郁闷,以为doris官方团队开发的功能很敷衍,没具体提示具体是什么错误。

反复试验之后,才发现是\G 导致报错,修改为下面这样就正常了

mysql> SHOW ROUTINE LOAD FOR testdb.example_routine_load
作者 east
Flink 1月 8,2025

解决flink Caused by: java.lang.NoClassDefFoundError: org/apache/flink/table/delegation/ExtendedOperationExecutor

运行flink代码报错:

运行报错:Exception in thread "main" org.apache.flink.table.api.TableException: Unexpected error when trying to load service provider.
	at org.apache.flink.table.factories.FactoryUtil.discoverFactories(FactoryUtil.java:826)
	at org.apache.flink.table.factories.FactoryUtil.discoverFactory(FactoryUtil.java:525)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.create(TableEnvironmentImpl.java:295)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.create(TableEnvironmentImpl.java:266)
	at org.apache.flink.table.api.TableEnvironment.create(TableEnvironment.java:95)
	at com.xxx.a_jobs.FlinkBatchHiveJob$.main(FlinkBatchHiveJob.scala:35)
	at com.xxx.a_jobs.FlinkBatchHiveJob.main(FlinkBatchHiveJob.scala)
Caused by: java.util.ServiceConfigurationError: org.apache.flink.table.factories.Factory: Provider org.apache.flink.table.planner.delegation.DefaultDialectFactory could not be instantiated
	at java.util.ServiceLoader.fail(ServiceLoader.java:232)
	at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
	at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
	at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
	at org.apache.flink.table.factories.FactoryUtil.discoverFactories(FactoryUtil.java:817)
	... 6 more
Caused by: java.lang.NoClassDefFoundError: org/apache/flink/table/delegation/ExtendedOperationExecutor
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
	at java.lang.Class.getConstructor0(Class.java:3075)
	at java.lang.Class.newInstance(Class.java:412)
	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
	... 9 more
Caused by: java.lang.ClassNotFoundException: org.apache.flink.table.delegation.ExtendedOperationExecutor

报错的核心问题是在加载 Flink 的服务提供程序时出现了异常。具体的错误信息是 java.lang.NoClassDefFoundError: org/apache/flink/table/delegation/ExtendedOperationExecutor 和 java.lang.ClassNotFoundException: org.apache.flink.table.delegation.ExtendedOperationExecutor。这通常是由于类缺失或者缺少相应的依赖库导致的。

解析错误信息

  1. 错误描述:Copy CodeCaused by: java.lang.NoClassDefFoundError: org/apache/flink/table/delegation/ExtendedOperationExecutor 这是因为 org.apache.flink.table.delegation.ExtendedOperationExecutor 类未找到。Flink 在尝试加载这个类时,发现它不存在。这通常意味着某个必需的类库没有被正确包含在项目的依赖中。
  2. 原因分析:
    • Flink 依赖的类库中缺少了某些必需的 JAR 文件,或者你的项目中缺少某些必要的依赖。
    • 可能是因为缺少了 Hive 相关的依赖,或者使用的 Flink 版本与 Hive 连接的依赖不兼容。
    • 另外,org.apache.flink.table.planner.delegation.DefaultDialectFactory 类在创建时也无法实例化,这表明整个 Flink SQL 引擎的配置或者依赖加载出现了问题。

解决方案

1. 检查依赖:

确保你的项目中包含了 Flink 和 Hive 的相关依赖,特别是你使用的 Flink 版本与 Hive 相关的 JAR 文件。

对于 Flink 1.17.1 和 Hive,你应该确保以下依赖被正确添加到项目中:

  • Flink和hive 依赖:
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-planner_2.11</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-api-java-bridge</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-hive_2.11</artifactId>
    <version>1.17.1</version>
</dependency>

2. 检查兼容性:

确保你所使用的 Flink 版本与 Hive 连接器的版本兼容。在 Flink 1.17.x 中,某些老旧的 Hive 连接器可能会出现兼容性问题。你可以查阅 Flink 官方文档 查看兼容的版本。

作者 east
Flink 1月 6,2025

解决flink toAppendStream doesn’t support consuming update changes which is produced by node GroupAggregate

下面的flink代码:

String sqlQuery = “SELECT MAX(val) AS max_val, MIN(val) AS min_val FROM dataT GROUP BY pid”;

Table resultTable = tableEnv.sqlQuery(sqlQuery);

DataStream resultStream = tableEnv.toAppendStream(resultTable, Row.class);

运行报错:

org.apache.flink.table.api.TableException: toAppendStream doesn’t support consuming update changes which is produced by node GroupAggregate(groupBy=[pid], select=[pid, MAX(val) AS max_val, MIN(val) AS min_val])

原因分析

报错信息提示 toAppendStream doesn't support consuming update changes which is produced by node GroupAggregate,这意味着在当前代码中使用 toAppendStream 方法去转换结果表为 DataStream 时出现了不兼容的情况。
在 Flink 中,当执行包含聚合操作(比如这里的 GROUP BY 以及 MAX、MIN 聚合函数计算)的 SQL 查询时,查询结果可能会产生更新(update)类型的变更,而 toAppendStream 方法只适用于那种仅追加(append-only)类型的结果,也就是结果表中数据只会新增而不会有更新、删除等变更的情况。这里的聚合操作导致了结果存在更新变化,所以调用 toAppendStream 就抛出了异常,它无法处理这种带有更新的数据变更情况。

正确代码修改思路及示例

要解决这个问题,可以使用 toRetractStream 方法来替代 toAppendStream 方法,toRetractStream 方法可以处理包含更新、删除等多种变更类型的数据,它返回的 DataStream 中元素是包含了一个布尔值标志(表示是新增还是撤回操作)以及实际的数据行(对应查询结果行)的二元组形式。
以下是修改后的代码示例:



        // 2. 添加 Source
        DataStream<RunData> dataSource = env.addSource(new TDengineSourceFunction(jdbcUrl, user, password, query));

        // 3. 注册临时表
        tableEnv.createTemporaryView("rundata", dataSource, "pid, val"); // 根据实际字段调整

        // 4. 执行 SQL 查询以计算最大值和最小值
        String sqlQuery = "SELECT MAX(val) AS max_val, MIN(val) AS min_val FROM dataT GROUP BY pid";
        Table resultTable = tableEnv.sqlQuery(sqlQuery);

        // 5. 将结果转换为 DataStream 并打印,这里使用 toRetractStream 替代 toAppendStream
        DataStream<Tuple2<Boolean, Row>> resultStream = tableEnv.toRetractStream(resultTable, Row.class);
        resultStream.print();

        // 6. 触发执行
        env.execute("Flink SQL Max and Min Calculation");
    }
}
作者 east
Java, 面试 1月 5,2025

《Java开发及前端最全面试题-Offer直通车》目录

​

 Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。

如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。

本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

无论你是Java开发的新手还是有一定经验的老手,本书都能为你提供宝贵的参考和指导。无论你是准备面试还是想要提升自己的技能,本书都能帮助你更好地应对挑战。

现在就加入我们,开启你的大数据面试之旅吧!让《Java开发及前端最全面试题-Offer直通车》成为你的得力助手,助你顺利通过面试,迈向大数据领域的成功之路!

本书共分为以下几个部分:

一、Java语言篇

在Java领域,掌握扎实的Java基础和虚拟机知识是必不可少的。本专栏将为您提供Java虚拟机最全面试题及参考答案,助您轻松应对各种面试挑战。同时,我们还将为您呈现通往大厂Java面试题及参考答案2万字长文,让您在激烈的求职竞争中脱颖而出。

二、数据库及SQL篇

数据库作为软件开发的核心组件,其重要性不言而喻。本专栏将为您带来MySQL、SQL Server、Oracle、PostgreSQL等主流数据库的面试题及参考答案,让您在数据库领域的面试中游刃有余。此外,我们还将提供最全手写SQL面试题及代码实现,让您在SQL技能上更上一层楼。

三、框架篇

在Java开发中,SpringBoot和SpringCloud等框架的使用已成为标配。本专栏将为您带来互联网大厂Spring Cloud面试题及参考答案、Nacos高频面试题及参考答案、Seata面试宝典等一系列精彩内容,助您在框架领域的面试中轻松过关。

四、综合素质篇

除了专业技能外,综合素质也是面试官关注的重点。本专栏将为您提供程序员入职新公司如何快速上手项目的实用建议,让您在试用期也能表现出色。

五、NoSQL篇

随着大数据时代的到来,NoSQL数据库在数据处理中的应用越来越广泛。本专栏将为您带来Elasticsearch、Redis、Pulsar等NoSQL数据库的高频面试题及参考答案,助您在NoSQL领域大展拳脚。

六、容器和虚拟化篇

容器化和虚拟化技术已经成为现代软件开发的重要组成部分。本专栏将为您带来k8s(Kubernetes)、Docker等容器和虚拟化技术的最新面试题及参考答案,让您在这一领域更具竞争力。

七、消息队列篇

消息队列作为异步处理的关键组件,在大型系统中发挥着重要作用。本专栏将为您提供RocketMQ等消息队列的最全面试题详解,助您在消息队列领域的面试中取得成功。

八、前端篇

在前端领域,Angular、React、Vue等框架的使用日益普及。本专栏将为您带来这些框架的必问面试题及参考答案,让您在前端领域的面试中更加自信。

九、其他语言网页开发篇

除了Java外,Python、Django等其他语言和框架也在网页开发中占据一席之地。本专栏将为您带来这些语言和框架的面试题及参考答案,让您在多元化的网页开发领域更具竞争力。

十、大数据篇

在大数据时代背景下,掌握Kafka、Zookeeper等大数据处理技术已成为必备技能。本专栏将为您带来这些技术的面试题及参考答案,助您在大数据领域的面试中脱颖而出。

经验或案例干货篇

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

综合技术面试篇

大厂计算机网络高频八股文面试题及参考答案(面试必问,持续更新)

后端高频考点:网站限流机制与算法详解

Java语言篇

Java虚拟机最全面试题及参考答案

通往大厂Java面试题及参考答案2万字长文

Java多线程和并发编程面试题和参考答案100多道(持续更新)

Java中的Lock、synchronize、CAS关系及其应用场景

 进阶面试题:Java反射机制最全面试题及参考答案

 大厂校招必懂:Java反射机制原理详解(2万字长文)

Java架构师必知的 JVM 调优知识

NIO和Netty保姆级5万字面试题及参考答案

Java设计模式面试题及参考答案

 Java RMI最全面试题及参考答案

 Java中的Lock、synchronize、CAS关系及其应用场景

SpringBoot和SpringCloud

互联网大厂Spring Cloud面试题及参考答案(持续更新)

Nacos高频面试题及参考答案(2万字长文)

Seata面试宝典(2万字长文)

Spring Security高频面试题及参考答案(3万字长文)

Spring Boot过百道保姆级面试题及参考答案(持续更新)

Spring MVC八股文面试题及参考答案(4万字长文)

 精通Spring Cloud: Spring Cloud Config面试题详解及参考答案(3万字长文)

 Eureka从入门到精通面试题及答案参考

Dubbo面试题甄选及参考答案

Spring框架原理面试题及参考答案

数据库及SQL篇

数据库篇

2万字长文:MySQL面试题及参考答案(持续更新)

3万字长文:SQL Server面试题和参考答案(持续更新)

DBA必备知识:Oracle面试题及参考答案(3万字长文)

大厂PostgreSQL面试题100道及参考答案(5万字长文)

MyCat面试题及参考答案(3万字长文)

关系数据库/SQL篇

最全手写SQL面试题及代码实现(万字长文持续更新)

DBA必懂选型:MySQL、PostgreSQL与Oracle对比研究

 后台开发必问题:分库分表面试题及参考答案(3万字长文)

 一文看懂ProxySQL面试题(3万字长文)

ShardingSphere面试题及参考答案(3万字长文)

Mysql海量数据经常有下面这些操作,离被开除就不远了(持续更新)

Oracle Sql查询和性能优化(持续更新)

看完不怕面试官拷打了:mysql sql优化最全总结(万字长文持续更新)

MySQL存储过程原理、实现及优化

DBA必懂选型:MySQL、PostgreSQL与Oracle对比研究

ORM框架

MyBatis-Plus 2万字面试题详解

Hibernate最新6万字面试题及参考答案

Struts2 3万字经典面试题及参考答案

JPA 3万字面试宝典

万字长文看懂MyBatis一二级缓存机制原理、使用和优化

万字长文看懂MyBatis一二级缓存机制原理、使用和优化

框架篇

RxJava最全面试题及参考答案

综合素质篇

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目

装上大模型翅膀,程序员入职新公司如何快速上手代码(老员工如何选择大模型编程如虎添翼)

简历面试篇 

技术简历优化秘籍:迈向求职成功第一步

 外企面企必备:IT技术面试英文高频面试题

一文让你不怕Java开发英文自我介绍:英文面试保姆级教程

 如何把自己卖个好价钱:实战面试谈薪水

Nosql篇

Elasticsearch 面试题及参考答案:深入解析与实战应用

大厂Redis高频面试题及参考答案(持续更新)

Pulsar高频面试题及参考答案(持续更新)

通往大厂之路:Solr面试题及参考答案100道题

一文搞懂MongoDB面试题(2万字长文)

Cassandra面试题及答案详解(3万字长文)

时序数据库InfluxDB面试题和参考答案

Lucene最新最全面试题及参考答案

Redis 性能优化策略与实战保姆级教程

Redis如何实现高性能和高可用

万字长文详解缓存穿透、击穿、雪崩现象的原因和解决方案

Lucene最新最全面试题及参考答案

公司篇

字节跳动后端或大数据基础知识面试题及参考答案(2万字长文)

 阿里2024年Java开发最新最全面试题及参考答案(11万长文

 呕血整理4万字长文:百度Java后台开发面试题及参考答案

进BAT必懂:大厂高频八股文面试题及参考答案(6万字长文)

 阿里Java开发社会招聘面试题及参考答案

虾皮Java后台开发校园招聘面试题及参考答案

大厂面试:2024年虾皮Java开发面试题及参考答案(5万字长文)

 希音(Shein)Java后台开发面试题集锦和参考答案

大厂校招:希音(Shein)校园招聘面试题及参考答案

 大厂校招:唯品会Java面试题及参考答案

 4399 Java开发最全面试题及参考答案

 阿里Java开发校园招聘面试题及参考答案

 搜狐畅游Java后台开发面试题大全及参考答案

 搜狐2024年最新Java开发面试题及参考答案

斗鱼Java后端开发面试题及参考答案

金山云Java 开发面试题及参考答案

蔚来Java面试题及参考答案

小马智行Java开发面试题及参考答案

宁德时代Java面试题及参考答案

​​​​​​​

行业篇 

一文吃透物联网(IoT)的面试题及参考答案

物联网(IoT)及物联网网络协议面试题及参考答案(2万字长文)

大厂物联网(IoT)高频面试题及参考答案

容器和虚拟化

k8s(Kubernetes)最新100道面试题及参考答案(5万字长文)

最新5万字长文:Docker 100道面试题及参考答案

分布式篇

分布式架构最新最全面试题及参考答案

数据结构篇

数据结构高频问题:数组与链表的特点、细节及其原理详解

消息队列

最全RocketMQ面试题详解

 ZeroMQ最全面试题解读(3万字长文)

WebSocket面试常见知识点和面试题

3万字长文看透ActiveMQ面试题及参考答案

RabbitMQ 2万字面试题及参考答案

消息队列原理面试题及参考答案

消息代理工具Apollo面试宝典及参考答案

网络及协议篇

网络丢包问题分析和解决最全解析

开发和测试要懂知识:如何进行网络抓包最全宝典

前端篇

Angular必问面试题及参考答案

React常见面试题及参考答案(3万字长文)

JQuery从入门到精通2万字面试题

前端HTML5从入门到精通面试题及参考答案(2万字长文)

Ajax面试题精选及参考答案(3万字长文)

4万字长文让人看懂ElementUI面试题及参考答案

Vue面试题精选大全及参考答案(5万字长文)

前端面试高频知识点:Angular知识点精华汇总

前端Express.js面试题甄选及参考答案

前端UniApp面试题及参考答案(100道题)

Bootstrap最新最全面试题及参考答案

Linux/Shell篇

Linux Shell面试题大全及参考答案(3万字长文)

其它语言网页开发

3万字长文看懂Django面试

CGI面试题及参考答案

大数据篇

Kafka 面试题及参考答案(持续更新)

深入解析Zookeeper面试题及参考答案(超过万字精华篇)

2万字长文:ELK高频面试题及参考答案

ETL利器:Kettle 2万字长文详解面试题

自动化及调度篇

 DevOps在提升软件质量方面的作用

SVN 80道面试题及参考答案(2万字长文)

SonarQube面试题一卷到底60问及参考答案(3万字长文)

 通晓Git操作-git面试题及参考答案

 Jenkins从入门到精通面试题及参考答案(3万字长文)

分布式任务调度XXL – JOB面试题及参考答案

监控篇 

Nagios高频面试题及参考答案(2万字长文)

 Ganglia面试大全及参考答案(2万字长文)

Prometheus面试题精选及参考答案(2万字长文)

测试篇

Java单元测试面试题及参考答案

安全加密篇

 7万字详解Apache Shiro面试题、示例、参考答案

密码学与信息安全面试题及参考答案(2万字长文)

服务器和运维

JBoss面试题精要和参考答案(3万字长文)

 WebLogic面试题精要和参考答案(2万字长文)

WebSphere面试题精选和参考答案(3万字长文)

2.5万字长文吃透Tomcat面试题及参考答案

Nginx面试题精选及参考答案(3万字长文) ​

作者 east
Flink, tdengine 1月 3,2025

Flink读取TDEngine数据实例,解决com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields错误

用flink读取TDEngine,运行报错:
com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields

这意味着 com.taosdata.jdbc.rs.RestfulDatabaseMetaData 类的对象无法被序列化,而 Flink 的作业中涉及到的某些操作需要将对象传递到不同的任务中,这就要求对象是可序列化的(即实现了 Serializable 接口)。在 Flink 中,所有要在分布式环境中传输或持久化的对象都必须是可序列化的。

  • RestfulDatabaseMetaData 是 TDengine JDBC 驱动中的一个类,它可能没有实现 Serializable 接口,因此在需要将该类对象传输到其他机器时,Flink 无法进行序列化。

解决方法是

使用 transient 关键字避免对不可序列化对象进行传递。

通过标记 connection、preparedStatement 和 resultSet 为 transient,这些对象不会被 Flink 传递到 Task Manager。

完整可执行代码如下:


import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TDengineSourceFunction extends RichParallelSourceFunction<RunData> {

    private transient Connection connection;        // 使用 transient 避免序列化
    private transient PreparedStatement preparedStatement;
    private transient ResultSet resultSet;
    private String query;
    private volatile boolean isRunning = true;

    private String jdbcUrl;
    private String user;

    private String password;


    public TDengineSourceFunction(String jdbcUrl, String user, String password, String query) {
        this.query = query;
        this.jdbcUrl = jdbcUrl;
        this.user = user;
        this.password = password;

        // JDBC连接参数在open()方法中初始化
    }

    @Override
    public void open(org.apache.flink.configuration.Configuration parameters) throws Exception {
        super.open(parameters);
        Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
        // 在这里初始化数据库连接
        this.connection = DriverManager.getConnection(jdbcUrl, user, password);
        // 准备SQL查询语句
        this.preparedStatement = connection.prepareStatement(query);
        this.resultSet = preparedStatement.executeQuery();
    }

    @Override
    public void run(SourceContext<RunData> sourceContext) throws Exception {
        while (isRunning && resultSet.next()) {
            // 从ResultSet中提取数据并转换为RunData对象
            RunData data = convertResultSetToData(resultSet);
            // 将数据发送到Flink的处理流中
            if (data != null) {
                sourceContext.collect(data);
            }
        }
    }

    @Override
    public void cancel() {
        isRunning = false;
        // 关闭资源
        try {
            if (resultSet != null) resultSet.close();
            if (preparedStatement != null) preparedStatement.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            // 处理关闭资源时的异常
            e.printStackTrace();
        }
    }

    private RunData convertResultSetToData(ResultSet resultSet) throws SQLException {
        // 提取单行数据
      
        // 将数据转换为 RunData 对象


      //  return new RunData(......);
        return null;
    }
}
作者 east
Flink 1月 3,2025

解决flink读取TDEngine的数据Could not initialize class com.taosdata.jdbc.TSDBJNIConnector

需要用flink读取TDEngine的数据,用jdbc方式连接,运行报错:Could not initialize class com.taosdata.jdbc.TSDBJNIConnector

JDBC-JNI的方式需要 TDengine-client(使用JDBC-JNI时必须,使用JDBC-RESTful时非必须),所以采用JDBC-RESTful 的方式,原因是一开始想用
JDBC-JNI 的方式,想改用 JDBC-RESTful 代码没改干净。



通过指定URL获取连接,如下所示:

Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata";
Connection conn = DriverManager.getConnection(jdbcUrl);
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata";Connection conn = DriverManager.getConnection(jdbcUrl);

以上示例,使用 JDBC-RESTful 的 driver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。

使用 JDBC-RESTful 接口,不需要依赖本地函数库。与 JDBC-JNI 相比,仅需要:

  1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”;
  2. jdbcUrl 以“jdbc:TAOS-RS://”开头;
  3. 使用 6041 作为连接端口。

按上面的方式修改,果然没有再报上面的错误。

作者 east
Flink 1月 3,2025

flink运行报错:java.lang.IllegalStateException: No ExecutorFactory found to execute the application

在本地运行flink代码,报错“
java.lang.IllegalStateException: No ExecutorFactory found to execute the application ”

通常是由于缺少必要的 Flink 依赖项导致的。具体来说,Flink 需要特定的执行器工厂来运行应用程序,而这些依赖项可能未正确包含在您的项目中。

原因分析

  1. 缺少 Flink 运行时依赖:
    • 您的代码片段看起来是基于 Flink 的流处理 API 编写的。如果项目缺少 Flink 运行时的相关依赖(例如 flink-java, flink-streaming-java, 和 flink-clients),Flink 将无法找到执行器工厂来启动作业。
  2. 依赖版本不匹配:
    • 如果您使用的 Flink 版本与代码不兼容,也可能导致类似的问题。确保所有 Flink 相关依赖的版本一致。
  3. 缺少必要的插件或扩展:
    • 某些情况下,特定的 Flink 插件或扩展可能缺失,导致执行器工厂无法加载。

解决方案

确保您的项目中包含了所有必要的 Flink 依赖项。以下是使用 Maven 的示例 pom.xml 配置,确保包含了 Flink 的核心和流处理依赖:

<dependencies>
    <!-- Flink 核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>1.16.2</version> <!-- 请根据需要替换为合适的版本 -->
    </dependency>

    <!-- Flink 流处理依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.12</artifactId>
        <version>1.16.2</version> <!-- 版本需与 flink-java 一致 -->
    </dependency>

    <!-- Flink 客户端依赖(如果需要远程提交作业) -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.12</artifactId>
        <version>1.16.2</version>
    </dependency>



    <!-- 如果使用自定义 Source 和 Sink,确保它们所在的依赖已添加 -->
</dependencies>
作者 east
Java, 面试 12月 29,2024

java多线程的实现的各种方法?

​

在 Java 中,实现多线程主要有以下几种方法:

  • 继承 Thread 类:通过创建一个继承自 Thread 类的子类,并重写 run () 方法来定义线程的执行逻辑。然后创建该子类的实例,并调用 start () 方法启动线程。例如,以下代码创建了一个简单的线程类:

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程正在运行");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}
  • 实现 Runnable 接口:创建一个实现 Runnable 接口的类,并重写 run () 方法。然后创建该类的实例,并将其作为参数传递给 Thread 类的构造函数,最后调用 start () 方法启动线程。例如:

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程正在运行");
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }
}
  • 使用 Callable 和 Future 接口:Callable 接口类似于 Runnable 接口,但它可以返回一个结果。Future 接口用于获取 Callable 任务的结果。可以通过创建一个实现 Callable 接口的类,并重写 call () 方法来定义线程的执行逻辑和返回结果。然后使用 ExecutorService 提交 Callable 任务,并通过 Future 获取任务的结果。例如:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        return 1 + 1;
    }
}

public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Integer> future = executor.submit(new MyCallable());
        Integer result = future.get();
        System.out.println("结果:" + result);
        executor.shutdown();
    }
}
  • 使用线程池:线程池可以管理和复用线程,减少线程创建和销毁的开销。可以通过使用 ExecutorService 接口和其实现类来创建线程池,并提交任务到线程池中执行。例如:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) { executor.execute(() -> {
System.out.println(“线程正在运行”);
});
}
executor.shutdown();
}
}

作者 east
Java, 面试 12月 29,2024

面试必问题:单例模式的5种写法

​

单例模式主要有以下几种分类:

  • 饿汉式单例:在类加载时就创建单例对象,优点是实现简单,线程安全,缺点是如果单例对象在程序运行过程中一直未被使用,会造成资源浪费。例如:
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}
  • 懒汉式单例:在第一次调用 getInstance 方法时才创建单例对象,优点是可以延迟加载,节省资源,但是在多线程环境下需要考虑线程安全问题。例如:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  • 双重检查锁单例:在懒汉式单例的基础上,通过双重检查锁机制来提高性能并保证线程安全。例如:

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
  • 静态内部类单例:利用静态内部类的特性来实现单例,既保证了线程安全,又实现了延迟加载。例如:

public class Singleton {
    private Singleton() {}

    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}
  • 枚举单例:通过枚举类型来实现单例,不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。例如:

public enum Singleton {
    INSTANCE;

    public void doSomething() {
        // 单例对象的方法
    }
}

在多线程环境下,保证单例模式的线程安全可以采用以下几种方法:

  • 使用 synchronized 关键字:在获取单例对象的方法上添加 synchronized 关键字,如懒汉式单例中的 getInstance 方法,这样可以保证在同一时刻只有一个线程能够访问该方法,从而避免多个线程同时创建单例对象。但是这种方式会降低性能,因为每次调用该方法都需要获取锁。
  • 双重检查锁机制:在懒汉式单例的基础上,通过双重检查锁机制来减少同步的开销。在第一次检查实例是否为 null 时,如果不为 null,则直接返回实例,不需要获取锁;只有在第一次检查为 null 时,才进入同步块再次检查并创建实例。同时,需要将实例变量声明为 volatile,以保证可见性和禁止指令重排序。
  • 静态内部类:利用静态内部类的特性,在类加载时不会立即初始化内部类,只有在第一次调用 getInstance 方法时,才会加载并初始化内部类,从而创建单例对象。由于类加载过程是线程安全的,所以这种方式可以保证单例的线程安全,并且实现了延迟加载。
  • 枚举:枚举类型在 Java 中是天然的单例,因为 Java 虚拟机在加载枚举类时会保证只有一个实例存在,并且枚举类的实例是线程安全的,所以可以通过枚举来实现单例模式,避免了复杂的线程安全处理。

​

作者 east
bug清单, 大数据开发 12月 25,2024

解决idea运行scala代码报错:scala: No ‘scala-library*.jar’ in Scala compiler classpath in Scala SDK Maven: org.scala-lang:scala-library:2.11.12

这个错误信息表明,Scala 编译器的 classpath 中缺少必要的 scala-library*.jar 文件,特别是 Scala SDK 所需的 scala-library 版本 2.11.12。错误发生的原因通常是因为项目的构建配置缺失或错误,导致 Scala 编译器无法找到正确的库文件。

分析原因:

  1. Maven 配置问题: 错误信息中提到 Maven: org.scala-lang:scala-library:2.11.12,这表明你的项目在使用 Maven 来管理依赖。可能是 pom.xml 文件中的 Scala 依赖配置不正确,导致缺少 scala-library JAR 文件。
  2. IDE 配置问题: 另一个可能的原因是 IntelliJ IDEA 中的 Scala SDK 配置不完整或错误。Scala SDK 包括了编译器和库,如果 SDK 配置不正确,IDE 就无法正确找到必要的库文件。

解决方案:

1. 检查 pom.xml 文件中的 Scala 依赖

确保 pom.xml 中包含了正确版本的 Scala 依赖。如果没有,请添加类似下面的配置:

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.12</version>
</dependency>

如果你使用的是其他 Scala 版本(如 2.13 或 3.x),需要替换为相应的版本号。

2. 确保项目中配置了正确的 Scala 编译器和 SDK

  • 在 IntelliJ IDEA 中,检查你是否已经配置了 Scala SDK。
    • 打开 File -> Project Structure -> Modules -> 选择你的模块 -> Dependencies,确保选择了正确的 Scala SDK。
    • 你也可以在 Project Structure 中检查 Scala SDK 的版本是否与你项目中使用的版本匹配。

3. 更新或重新下载 Scala 库

  • 在 IntelliJ IDEA 中,尝试通过右键点击项目根目录并选择 Maven -> Reimport 来重新加载依赖。
  • 如果仍然无法解决问题,可以尝试删除 ~/.m2/repository/org/scala-lang/scala-library/ 下的对应版本文件,然后重新构建项目。

如果上面的方法都没办法解决,可以删除
File>>Project Structure>>Libraries中删除默认的scala编译library,替换成本地的scala-sdk 。

首先在Global Libraries中添加本地scala-sdk

Modules -> 选择你的模块 -> Dependencies,确保选择本地 Scala SDK。


作者 east

上一 1 2 3 4 … 41 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.