- 博客(122)
- 资源 (1)
- 收藏
- 关注
原创 flink异步读写外部数据源
这次是有个数据源QPS太高了。20万以上,同步吞吐跟不上。或者同样的处理速率,同步比异步消耗资源多太多。所以就想到了异步方法。需要外部数据源也支持异步访问。//有些异常可以返回空,但是返回这个动作不能省。注意结果回收:resultFuture.complete(Collections.singleton(结果对象))加上回收以后就好了。
2025-04-03 17:20:43
265
原创 记一次flink程序中两个不同的算子中用 .filter(Objects::nonNull) 报类型转换错误问题
然后在后面很多转换以后的某个流中再次用到.filter(Objects::nonNull) 时,刚好B类型是个ArrayList。然后我就用ArrayList.isEmpty()判断了。如果我有这么明显的类型转换错误的话,IDE早就检查出来语法错误了。可能是这个Objeccts在第一次出现的时候给赋值上类型A了。然后用到.filter(Objects::nonNull)由于在上个流中有空值返回,所以在下个流用之前会先过滤空值。换成别的判断方法解决了。然后就一直报无法将B转换成A的错误。
2025-03-13 10:02:30
112
原创 flink进行两字段keyby时,真lamda写法和匿名内部类写法真的有区别
caused an error: The generic type parameters of 'Tuple2' are missing. In many cases lambda methods don't provide enough information for automatic type extraction when Java generics are involved.
2025-02-26 18:45:21
133
原创 Merge request !12 can no longer be merged due to conflict.怎么办
Merge request !12 can no longer be merged due to conflict.怎么办拉取最新的目标分支代码。将目标分支合并到你的分支。解决代码冲突。提交并推送更改。更新 Merge Request 并重新进行合并。这样,你就能解决合并冲突,并继续推进合并请求。
2024-12-02 15:55:28
546
原创 【技术分享】Maven常用配置
为什么使用 Maven由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,SpringMVC、MyBatis、数据库驱动,等等,都是以 jar 包的形式出现的,jar 包之间会有关联,在使用一个依赖之前,还需要确定这个依赖所依赖的其他依赖,所以,当项目比较大的时候,依赖管理会变得非常麻烦臃肿,这是 Maven 解决的第一个问题。Maven 还可以处理多模块项目。
2024-05-21 18:02:30
4183
原创 如何用VisualVM工具查看堆内存文件
1.找到安装JDK的bin目录,找到 jvisualvm.exe可执行文件运行即可;2.然后导入堆内存文件 .hprof文件,看类;3.分析是哪些对象占了多少内存。
2024-03-05 15:10:10
998
原创 Google murmur3 hashString用法
评估了下,murmur3最高用的是128位的hash值,加上hash碰撞算法,基本千万级以内的数据是不会冲突的。可是我们的场景是亿级,还是有一定的可能性,但是flink并行度设置为32的话,分到32个机器上的话,概率又会低一些,所以综合下来hash冲突的概率极低。具体是否会冲突,还需要程序跑出来和原String的状态产出的数据做对比。如下为将String获取hashcode,转为Long的方法,主要是在海量数据的flink程序里,为了节省状态的存储空间,所以尝试用long来存储。
2024-01-24 15:19:54
797
原创 Spark读取iceberg表进行处理后写入hdfs
Sparksession,SparkSQL真香,比RDD,dataframe好写多了。当然,也可以直接按后面的df直接写。
2024-01-23 10:49:02
512
原创 Spark解析JSON文件,写入hdfs
3.write时,一开始打算写text,说字段里不能含有long和int,换成string后,说不能有多个字段,只能有一个string。刚好用parquet存储省空间,就存parquet了。一、用Sparkcontext读入文件,map逐行用Gson解析,输出转成一个caseclass类,填充各字段,输出。2.转dataframe时,还得一个一个字段显化才能转成dataframe;1.直接saveAsTextFile没有覆盖true参数;解析JSON这里没有什么问题。caseClass如下。
2024-01-22 17:54:01
803
原创 关于一次java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.lang.Object;的解决
事实上,数组比如String[] 或者otherClass[] 可以被转成父类 Object[],但是ArrayList不可以。String[]里传的是一个数值,ArrayList里传的是一个对象。这就不得不说一下 String[] 和 ArrayList的区别。报错看起来是需要一个 [Ljava.lang.Object;
2023-05-30 13:22:29
2366
原创 Flink消费pubsub问题
我看网上flink消费pubsub的资料并不多,最近跑通了,大家有问题的可以给我留言。(鉴权方式和反序列化方式后面会讲)3.credential鉴权方法需要先有含有鉴权信息的JSON文件(谷歌授权)然后有两个方法选一个可以实现
2023-05-17 10:36:27
1056
5
原创 流式作业如何保证真正的精准一次消费
当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据。3. sink 连接器收到 barrier,保存当前状态,存入 checkpoint,通知 jobmanager,并开启下一阶段的事务,用于提交下个检查点的数据。需要构建事务来写入外部系统,构建的事务对应着 checkpoint,等到 checkpoint 真正完成的时候,才把所有对应的结果写入 sink 系统中。所谓幂等操作,是说一个操作,可以重复执行很多次,但只导致一次结果更改,也就是说,后面再重复执行就不起作用了。
2023-05-10 15:38:17
748
原创 详细讲解零拷贝机制的进化过程
其中2次数据拷贝都是DMA拷贝,这就是真正的零拷贝技术,全程都没有通过CPU来搬运数据,所有的数据都是通过DMA来传输的。sendfile实现的零拷贝,IO发生了两次用户空间与内核空间的上下文切换,以及3次数据拷贝,其中3次数据拷贝中,包括了2次DMA拷贝和1次CPU拷贝。有的,即带有DMA手机拷贝功能的sendfile。(mmap是将读缓冲区的地址和用户缓冲区的地址进行映射,内核缓冲区和应用缓冲区共享,所以节省了一次CPU拷贝,并且用户京城内存是虚拟的在,只是映射到内核读缓冲区,可以节省一半的内存空间。
2023-03-08 19:46:32
564
原创 Java的serialVersionUID
Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传入的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,可以进行反序列化,否则就会跑出序列化版本不一致异常。然后在创建一个类时,如果实现了Serializable接口,或者继承是实现了Serializable接口的父类,然后在类名上alt +enter,就可以自动生成。
2022-12-13 17:50:25
4424
1
原创 iPhone14 /ios16不能使用蜂窝网络(浏览器提示“未激活蜂窝数据网”)
iPhone14 /ios16不能使用蜂窝网络(浏览器提示“未激活蜂窝数据网”)设置方法:设置->蜂窝网络->蜂窝数据网络->APN。是这里出错了,从网上查到对应运营商的APN值,填上就好了。
2022-11-07 11:36:53
10323
原创 关于我的IDEA工程每次刚建好都不能new Scala文件的解决方法
一、刚建的工程没有新建-Scala的问题二、明明正确的类的方法却在build时报错的问题
2022-10-17 17:10:37
1081
原创 java.lang.NoClassDefFoundError: scala/math/PartialOrdering$class --jar包冲突如何识别和解决
首先,要能识别这是jar包冲突的问题,碰到NoClassDefFoundError或者NoSuchMethodError,基本就是jar包冲突的问题了。jar包冲突是我们工程开发中常见的问题,可以用以下的方法解决:1.定位冲突的jar包位置:2.找到冲突之后,该如何解决冲突呢方法一、排除掉冲突的版本,只保留一个最合适的版本:方法二、用maven-shade打包
2022-09-23 19:42:54
1483
原创 Multiple sources found for parquet 错误解决
解决:org.apache.spark.sql.AnalysisException: Multiple sources found for parquet (org.apache.spark.sql.execution.datasources.v2.parquet.ParquetDataSourceV2, org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat)
2022-09-20 20:39:01
1760
转载 org.apache.flink.table.api.ValidationException: Could not find any factory for identifier ‘doris‘ th
org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'doris'打包时需要将多个构件中的class文件或资源文件聚合。资源的聚合需要shade插件提供了丰富的Transformer工具类。
2022-08-01 20:16:51
3317
原创 shell exit 1退不出问题
在执行到某个条件的时候,需要让他异常退出,终止脚本运行,可是发现exit 1 并不能成功。原因:因为只是退出了子进程。解决方法:多次exit 1直到退出到自己需要的那一层。何时进入子进程:我当时是管道,也有别的情形。即 | 符号,我当时用了两个。排查方法:打印当前进程号 echo $bashpid踩过的坑:一开始以为是循环的问题,专门写了个双重循环,测试了下发现不是。以为是if的问题,发现也不是。...
2022-04-13 17:37:46
4292
原创 spark读取parquet文件
1、进入spark-shell窗口2、val sqlContext = new org.apache.spark.sql.SQLContext(sc)3、val schema= sqlContext.parquetFile("hdfs://cdp/user/az-user/sparkStreamingKafka2HdfsData/part-00000-ff60a7d3-bf91-4717-bd0b-6731a66b9904-c000.snappy.parquet")hdfs://cdp
2022-03-30 17:54:25
4233
原创 spark参数调优各参数的含义
最近任务在大量shuffle时,发现了shuffleread时候特别慢,查了相关的参数做一下记录。spark.reducer.maxSizeInFlight默认值:48m 参数说明:该参数用于设置shuffle read task的buffer缓冲大小,而这个buffer缓冲决定了每次能够拉取多少数据。 调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如96m),从而减少拉取数据的次数,也就可以减少网络传输的次数,进而提升性能。在实践中发现,合理调节该参数,性能会有1
2022-03-18 11:45:46
972
1
转载 Flink编程套路
1.创建运行环境flink提供了两种创建环境的方式:DataStream(数据流) 和 DataSet(数据集)//DataStream 数据流StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//DataSet 数据集ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();2
2021-12-27 19:49:31
134
原创 Maven记录
1.maven项目老是提示找不到包,可是明明包都存在1)试着删除了reponsity文件夹里的的所有内容,重新mvn package还是不行,2)检查了下settings 的配置,也是按公司的要求配的,没有问题啊,巨烦3)甚至还将settings.xml改了个名,然后修改IDEA里的配置,还是打包不成功4)终于在某个同事的评论里找到了灵感:原来是我配置Settings.xml的时候,只配置了.m2路径下的,没有配安装的maven下面的settings文件。卧。。。2.排查是否引用了log
2021-12-17 17:44:44
129
原创 doris broker方式从hdfs导入数据到doris
doris从hdfs导入数据的方式,采用broker方式,需要kerberos认证的场景亲测可用欢迎留言提问
2021-11-30 16:51:00
2352
原创 hdfs nameNode的租约管理
namenode对于文件的操作是一次写,多次读。对于写操作需要保持互斥性,就需要用租约来管理。租约是HDFS中一个很重要的概念,是namenod给与租约持有者(leaseHolder,一般是客户端)在规定时间内拥有文件写权限的合同。租约管理器leaseManager保存了HDFS文件与租约、租约与租约持有者的对应关系,租约管理中期还会定期检查它维护的所有租约是否过期。租约管理器会前置收回过期的租约,所以租约持有者会定期检查它所维护的所有租约是否过期,维护对该文件的独占锁定。当客户端完成了对文...
2021-11-07 23:47:14
337
原创 RPC概念理解
一、到底什么是RPC最早的进程是各个进程内部各自完成自己的任务。但是随着发展,有时候需要将B进程的某个方法做成特定的工具类等,本地A进程调用B进程的该方法,于是就产生了IPC(Inter Process Communication本地进程间通信),这就是我们在操作系统里学到的进程间的共享内存的通讯方式。 后来随着分布式系统的出现,这个B进程就可能被搬移到了另一个服务器上,这就是RPC(remote procedure call,远程过程调用)二、什么情况下使用 RP...
2021-10-31 23:32:42
811
转载 MySQL 批量提交确实比单条提交快
public void batchInsertGeneratePlanOrder(List<MRPRequirement> requirementList, Long planParamId, String creator) throws Exception { Connection conn = DriverManager.getConnection(dbUrl, user, password); //将自动提交关闭 conn.setAutoC.
2021-08-09 17:19:03
532
原创 java.lang.NoSuchMethodError: org.json.JSONArray.toList()Ljava/util/Iterator问题解决
编译好的本地Java程序,打包后报这个错误。一开始用的是Java自带的这个json解析工具。<!-- <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20180813</version> </dependency>-->里面计算
2021-08-06 17:27:52
1308
原创 【LeetCode】112 路径总和
经典题目:判断一棵树中从根到叶子节点的所有路径中,有没有一个路径和是目标数字。https://leetcode-cn.com/problems/path-sum/给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], ...
2021-07-06 18:22:15
90
原创 【LeetCode】 160相交链表
是的,就是这么绝望,做过的题好久不做就又忘了。进入这个领域太晚了,看见那么多大佬已经刷了几百道上千,只恨上学时候没有好好刷。然而种一棵树最早的时间是十年前,其次是现在。就此继续吧。经典的寻找链表相交的开始节点。https://leetcode-cn.com/problems/intersection-of-two-linked-lists/给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表.
2021-07-06 17:41:33
92
原创 【leetCode】leetcode 543 二叉树的直径
https://leetcode-cn.com/problems/diameter-of-binary-tree/先说结论:【通过这道题,学到了在一个函数中修改全局变量,在另一个函数中调用那个函数,返回被修改的全局变量值。】题目描述:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ ...
2021-07-06 11:50:50
113
原创 Python3 按列更新ES
引入Elasticsearch后,单条或批量写入、删除、查找都不是问题。更新一开始难住了我。后来发现。更新的body里必须有"doc"关键字。#更新的主要点:#1. 需要指定 id#2. body={"doc": <xxxx>} , 这个doc是必须的es.update(index="my_index",doc_type="test_type",id=1,body={"doc":{"name":"python1","addr":"深圳1"}})...
2021-06-03 14:58:09
321
原创 Faust 入门
Faust网上的资料台少了。就萌生了将理解记录下来的想法。最简单的消费一个topic的例子到处都是,这里就不讲那个例子了。直接从原理及对官方文档的阅读的理解一、程序入口app对象:注意...
2021-05-28 19:30:22
868
西安交大软件学院2017年820考研真题回忆版
2018-06-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人