- 博客(30)
- 资源 (2)
- 收藏
- 关注
原创 新版本 Kafka Consumer 的设计原理
相对Producer来说,Consumer使用和设计类似,但更为复杂。因此将Consumer相关知识总结一番。顾名思义,consumer就是读取kafka集群中某些topic消息的应用程序。consumer有两个版本,老版本用Scala语言编写,其api包名为kafka.consumer.*, 分别提供high-level和low-level两种API,其缺点是用户必须自行实现错误处理和故障转...
2018-08-01 22:46:32 3415
原创 Gitlab实现多项目触发式自动CICD
工作中可能会遇到这种场景,存在上游项目A和下游项目B,项目B的功能依赖项目A(比如B负责日志解析,A是日志描述语言代码),这种相互依赖的项目更新流程一般如下:A项目更新,通知B项目开发人员进行更新B项目开发人员收到通知,重新clone A项目代码到本地将clone后的代码在本地重新编译打包生成可用的代码包将代码包上传到线上服务器(或通过运维平台部署)手动重启服务(如需要)这个流程是这个场景下需要手动操作的必需的5个步骤。
2024-09-14 15:28:05 1335
原创 spark写入es出现部分数据重复问题排查和解决
问题背景作业流程是从hive读取数据处理后写入es,一直跑的很正常,突然今天发现部分数据重复了问题排查由于是长期正常运行的作业未发生变更,且排查了上游hive表不存在数据重复问题,首先排除了数据和逻辑问题 spark作业是运行成功的,不存在作业失败重试的问题 推测是spark作业内部存在失败重试的问题,于是查看了spark history job的 timeline看到下面这个图表,可以确认是由于11、13节点在写入部分数据后失败了,yarn启动了21、22重新执行导致11、13写入的数据又
2022-05-25 17:52:51 2112
原创 Spark Structured Streaming基于数据动态写入ES Index
Spark structured streaming(注意和spark streaming的区别)写入ES的基本代码如下:// df为需要写入es的Dataset<Row>df.writeStream() .format("org.elasticsearch.spark.sql.checkpoint")// 检查点地址,可不配置 .option("checkpointLocation", CHECKPOINT_PATH)// ES节点 .option(...
2021-12-10 21:29:04 1924
原创 spark作业序列化问题解决方案
问题现象及原因开发spark作业过程中经常会遇到序列化问题,并出现Task not serializable、java.io.NotSerializableException这样的报错。org.apache.spark.SparkException: Task not serializable at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:416) at org.apache.s
2021-11-24 15:56:30 1878
原创 Flink cdc写入kafka数据出现null的问题排查与解决
Flink cdc是目前实时同步binlog数据非常方便的工具,今天业务在消费同步的数据发现其中有很多的null数据,经过排查,总结出以下特点:null数据的出现有一定规律,几乎每个+U(upsert_after)类型的数据前就有一条null数据 数据在出现null前,同步逻辑做过更改,添加了where语句过滤数据,在此前没有过null数据首先,我需要确定null数据是什么。查询官方文档可以知道在upsert-kafka中,会把-D(delete)类型数据写成null。但是我已经通过参数去掉了
2021-11-19 20:44:31 5048 7
原创 解决spark streaming 聚合算子(shuffle)并行度200及缓存buffer不断增大的问题
问题现象: spark流式计算中做聚合需要使用 group by算子,我在使用过程中遇到一些问题,通过stage图可以看出2个问题:1. 聚合算子每个批次shuffle write的数据量直线上升,这样会导致算子得效率逐渐降低,甚至会导致oom2.聚合算子(shuffle)的并行度是200,即使设置spark.sql.shuffle.partitions=10也不生效。200并行度会增加调度压力,并且会把并行度传递到下游(如果不做repartition)。我的业务中会把数据写入iceberg..
2021-11-17 17:43:37 1975
原创 HIVE Sql 笛卡尔积关联导致查询过慢问题优化
大数据开发过程中可能会遇到关键词或敏感词匹配这种场景,具体来说会有两张表:a表:包含content字段,数据量在百万级b表:包含word字段,数据量为数万条,都是要匹配的敏感词目标需求是把含有敏感词content都匹配出来,查询sql:select a.content, b.wordfrom aleft join bon 1=1where instr(a.content, b.word) > 0这种笛卡尔积的查询方式会关联出数百亿条数据,并且通过运行日志发现只有1个map
2021-06-25 11:56:35 3038
原创 Hive分区表增删字段(解决alter table失败问题)
假设我们有个内部表如下:CREATE TABLE `db_name.user_table_name`( `id` string, `user_name` string, `uid` string)PARTITIONED BY (`date` string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' STORED AS PARQUET;一般情况下,如果
2020-12-02 17:33:29 2341
原创 Spark Sql性能调优问题
首先我的业务场景是对大量的数据(百万级)进行cpu密集型的计算,一次全量计算需要8个小时左右。计算结果分别简单处理后写入hive和Es。在使用spark sql处理时遇到了两个性能问题:1. 由于单次计算非常耗时,因此使用dataframe.cache()后再分别写入hive和ES,但实际运算了两遍,缓存没有按预想的生效。2. 全量计算非常耗时,因此想要进行增量计算,即第一次全量计算,之后选择没计算过得计算。使用了case when, 和spark.sql.function中的when otherw
2020-09-08 01:22:08 695
原创 Lombok不生效 报错Error: java:找不到符号
Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。因此只需要在类上面添加注解@Data,Lombok会在编译的时候自动为我们添加 getter、setter、toString、equal、hashcode以及构造函数等方法。但是这次我新建了一个项目,却发现lombok并没有按预想的生效,调用POJO getter方法抛出异常。最后发现只需要进入Settings-Build,Execut.
2020-05-27 00:22:46 3779
原创 夜莺以及mail-sender的安装和配置
官方安装文档https://n9e.didiyun.com/zh/docs/install/compile/1.源码编译# 该项目没有使用go module管理,需要放到github.com/didi下编译mkdir -p $GOROOT/src/github.com/didicd $GOROOT/src/github.com/didi# clone代码并编译打包,pack时会自动build,打包成一个tar.gzgit clone https://github.com/didi/nig
2020-05-11 16:26:05 2049
原创 Spark Structured Streaming特性详解
本文所有内容是基于spark 2.4.3版本官方文档Structured Streaming provides fast, scalable, fault-tolerant, end-to-end exactly-once stream processing without the user having to reason about streamingStructured Stream...
2020-01-10 22:03:59 1033
原创 大数据开发遇坑大杂烩
本文用于记录开发过程中使用到的大数据工具包括Hive、Presto、Spark、Flink、ES、Hadoop等遇到的问题解决方案
2019-12-20 17:04:55 1781
原创 基于SPI机制和DataX插件热加载破坏双亲委派的思考
在开始阅读之前请先思考以下两个问题,并希望您能再接下来的文章中找到答案1. 如果我自己实现了一个新的java.lang.String类,并通过UrlClassLoader加载使用该类,能否覆盖JDK中的 java.lang.String ?2. 如果问题1的回答是不能,那用什么方式能做到覆盖JDK中的java.lang.String么?一、双亲委派 ...
2019-10-15 17:03:48 922
原创 Hive/Spark/Presto/标准SQL实现行转列和列转行
假设有以下两个表格,分别为vtable和htable,期望使用SQL实现相互转化,本文将展示如何分别使用标准SQL、Presto、和Hive实现。vtable uid key value 101 c1 11 101 c2 12 101 c3 13 102 c1 21 102 c2 22 ...
2019-08-20 18:45:49 8904
原创 java版本的Protobuf反序列化实现--支持Message、Enum和基本类型的嵌套结构
最近一个项目中用到protobuf 并且使用了protobuf-java-format包将message对象转换成json串。但最后发现转换结果中值为0的字段全都不见了,排查了很久发现是protobuf-java包中的Message.getAllFields()方法不会返回与默认值相等的字段。因此,调用Message.getAllFields()方法是无法返回所有字段的...
2019-05-29 11:54:04 5194 1
原创 关于PRESTO SQL疑问和解答
string类型时间如何转换为timestamp和date类型? 使用cast函数 CAST(t as timestamp) CAST(t as date) 如何求两个时间的差值? 使用函数:date_diff(unit,timestamp1,timestamp2)→ bigint date_diff('minute', CAST('2019-02-25 15:30:20'AS...
2019-03-05 19:21:51 1283
原创 Hive SQL语法报错 及相应解决方法
Hive SQL语法与经常用的mysql语法具有一定差异性,按照写mysql的习惯写出的sql经常报错,且报错很难看出问题原因,因此在此记录出现问题的现象和解决方式Error: Error while compiling statement: FAILED: ParseException line 3:2 cannot recognize input near '(' 'SELECT' 'a'...
2019-02-21 18:19:54 10447 1
原创 高并发高可用的秒杀或抢券系统设计思考
对于一个秒杀系统来说,瞬时的大量请求会对后台服务造成冲击,需要保证服务的可用性以及业务的正确性。设计了一个高并发高可用的系统简要流程架构如下图:1.将商品(或券)的信息等静态数据放到cdn节点,实现动静分离2.业务请求和业务处理之间使用MQ对请求进行削峰3.读写分离:对于逻辑复杂(用户验证,风控管理,行为分析)的系统,可以将读写部署两套服务进行分离4.使用缓存:像库存这...
2018-12-18 20:17:51 5586
原创 频繁FullGC的问题排查和解决
一、问题排查1.jstat -gc 【pid】查看gc情况2.发现FullGC过多,通过 jmap -histo 【pid】查看堆中对象统计二、问题解决实际工作中,主要发现两个数据结构相关原因会导致FULL GC1. LinkedBlockingQueue$Node当数据量很大时,LinkedBlockingQueue会无限制存放数据,最终导致Allocation Fail...
2018-11-01 15:22:19 1927
原创 连接kafka报错Failed to construct kafka consumer----EncryptionKey: Key bytes cannot be null!
部门kafka升级由之前的0.8版本升级到1.0以上,调试的时候报下面的错误,网上也没搜到相关内容,最后发现是因为java进程启动参数之一直指定了依赖文件路径: -Djava.ext.dirs=$BASEDIR,而这种写法会覆盖默认的ext值:jre/lib/ext,新版kafka认证对其下的包有依赖改正: -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:$BAS...
2018-09-07 19:33:43 9608
原创 Java开发遇到的那些坑
对静态成员变量使用@Autowired修饰符,导致调用变量时报错NullPointerException 接口返回对象,则对象的静态成员返回的数据为null,故需要在对象中调用的成员不能定义未静态成员 对redis进行hMGet(byte[] key, byte[]... fields)操作,如果key对应数据不存在,则会返回一个不为空的List,List的各字段值为null,需要对这种情况做...
2018-07-20 17:08:51 1358
原创 kubernetes 问题排查
K8S部署测试集群方法见http://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html问题一node节点调用master节点etcd服务和apiserver失败现象:master节点etcd和apiserver服务都启动成功 service etcd apiserver status 显示服务active,但是node节点报错不可达原因:ma...
2018-07-20 17:08:28 320
原创 NIO Server简单实现
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到...
2018-03-17 19:38:08 399
原创 jquery DataTabale 数据列的增删
项目里用到jquery的DataTabale插件,挺好用。不了解的请自行百度,今天遇到个问题,想要对表格里的某列进行增删操作,网上没搜到,后来机智的我终于解决了。 解决的方法就是利用DataTable的回调函数fnRowCallback。先给一个简单的表格html代码,DataTable是不需要tbody的哟!<table > <thead> <tr>
2016-03-10 17:42:34 950
原创 PHP利用JPGRAPH画图不显示的解决
刚学PHP不久,,今天一个任务需要用JPGRAPH库画图,但怎么图都出不来,在chrome里只有一个绿色的小块块,在IE里是乱码。开始一直以为是gd库的问题,看网上的网页,一阵修改php_gd.dll,取消注释神马的,但根本不鸟。后来,看到网上有人说出现乱码的原因可能是<?php前有输出,换行或空格导致,突然想到会不会是php环境设置的原因,如下图。原来就是因为ENVIRONMENT设成了development使得画图前有报错
2015-10-15 19:33:49 1027
转载 C++ json类库Jsoncpp的使用
随笔- 674 文章- 1 评论- 76 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的
2015-04-28 09:52:53 1804
转载 mysql 修改密码以及忘记密码的方法
目录mysqladmin命令UPDATE user 语句SET PASSWORD 语句root密码丢失的情况(待验证)mysqladmin命令(回目录)格式如下(其中,USER为用户名,PASSWORD为新密码):mysqladmin -u USER -p password PASSWORD该命令之后会提示输入原密码,
2015-04-24 14:00:41 349
转载 多线程编程基础知识
多线程编程基础知识当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设
2013-11-21 14:15:29 638
微机系统接口课程设计(交通灯和电风扇定时开关)
2009-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人