多级pom配置方法
当一个项目之中需要包含多个module时,每个module都需要自己的pom文件,而我们的系统在CI/CD部署时必须指定一个根目录下的pom文件。此时就需要使用多级pom的写法。
2023-04-12
Flink JobManager 和 TaskManager 地址配置的一些问题
在Flink集群配置的时候,遇到一些和tm、jm地址没有配置正确而导致的一些问题,这里对问题现象和解决方法做一些记录。
2023-03-31
在GitLab CI/CD中push回原仓库的一些细节
最近写了一个小工具,让它在每次commit之后,自动统计仓库里面的一些内容,并且在仓库内生成一份新的统计文件。查询资料之后,了解到在GitLab的CI/CD Runner中,是可以使用git命令的,能够实现这样的功能。下面记录一些容易遇到问题的细节。
2023-03-02
使用EPUB格式写笔记的体验
用EPUB作为笔记的格式已经有5年了,期间写了四五本笔记,这本是其中之一。我对EPUB作为笔记的体验还是很满意的,这篇记录一下选择EPUB格式来记笔记的优缺点,以及一些使用上的经验。
2022-11-25
Kafka-Flink性能压测方法
介绍使用kafka bin目录中自带的 kafka-producer-perf-test.sh 脚本进行压测的方法。类似的方法也可以适用于对其它的Kafka下游系统进行压测。
2022-10-24
Flink内存机制及资源评估方法
对Flink的资源评估,从内存着手可以进行比较精确的估计,这是因为Flink计算中的状态大小、保留时间都是确定的,因此极限情况下Flink的状态存储占用的内存大小也相对固定。这篇笔记就从状态大小出发,介绍通过内存利用评估Flink资源的方法。
2022-09-11
Flink大型集群响应缓慢问题分析及解决方案
在部署大型 Flink 集群时,发现 Flink 集群相应不正常:Flink 对控制台命令的相应十分缓慢,且 Flink Web 界面加载卡顿,刷不出内容,或刷出的内容均为空白。介绍对这一问题的解决方案。
2022-08-19
Linux软件常用命令整理自用
整理一些常用的Linux命令。并不系统,自用。感觉有必要记录一下的就会放进来,持续更新。
2022-07-08
Flink standalone on Kubernetes的部署流程
Flink除Standalone模式外,还支持YARN、Docker、k8s等多种配置方式,其中k8s部署又能分为standalone on Kubernetes和Native Kubernetes两种。这篇笔记记录一下standalone on Kubernetes方式的部署流程。
2022-05-19
BTC交易打包至区块前的防伪和防篡改原理
网上对BTC的介绍中,大多都解释了区块链技术是如何避免对区块的篡改:每个区块的哈希值都基于前面的所有区块,这样已经打包好的数据就无人能动。但对一个可信的交易系统来说,只保护已有的账本并不是安全性的全部。在交易被打包存到链上之前,至少还有两个方面的安全问题需要考虑:如何验证付款方的身份真实且确实有足额的资金用于支付,以及如何保证记账人(矿工)不记假账。这篇笔记就来谈一谈这些问题。
2022-01-06
不执行activate直接使用Python虚拟环境
最近在开发时,有时希望能执行某个依赖于特定虚拟环境的脚本,但又不希望每次都执行activate将虚拟环境切换过去,这样来回切换会十分麻烦。那么要如何在不激活虚拟环境的情况下,直接运行依赖于虚拟环境的程序呢。
2021-12-22
Maven离线编译方法
有时候我们在把jar包传到某些连不上Maven库的环境后,才发现其中有一点问题需要修改代码。这时候可以到开发机上重新打包再传一遍,但是如果经常需要这样来回就显得有点麻烦。这时候我们可以有另一个选择,就是利用Maven的offline模式在离线环境里面重新编译。
2021-11-19
使用腾讯云COS对象存储进行Eagle素材的云同步
Eagle是设计领域常用的一个素材管理软件,虽然它本身没有提供云存储,但是支持把素材库放到云同步盘来远程保存和更新。一般配合Eagle使用的是坚果云和OneDrive,但是都有各自的一些缺点:坚果云价格偏高且存储空间小,OneDrive的同步容易卡住、网络有时候不稳定。
2021-10-29
Flink滑动窗口的一种优化
理想情况下,流处理引擎为每个key都预先分配好滑窗,在有数据到达时数据就可以直接落到对应的窗口中。但是实际情况下,资源是有限的,因此Flink不会预先创建空窗口,而是采用懒构造的方式,仅当一个key有对应数据到达时才会创建窗口。
2021-08-30
RDP方式远程连接云服务器
前面的笔记中记录了如果通过VNC方式远程连接Linux服务器的桌面环境,这篇笔记记录一下另一种连接方式:RDP。
2021-08-09
容器化包管理工具Snap
Snap是一个比较特殊也较有争议的Linux包管理工具,从用户的角度,Snap最易被感知到的特点是all-in-one(无需依赖的)安装包和(强制的)自动更新。实际上Snap还有另一个鲜明的特点,就是容器化的软件安装。这篇笔记首先简单介绍Snap的安装和使用,之后讨论一些Snap的特性和争议。
2021-08-08
为云服务器添加图形化桌面并通过VNC连接
Linux的服务器版很多是不带GUI的,不过对于我们个人自用的服务器,很多时候有一个GUI桌面会方便很多。这里记录一下如何为云服务器(例如我用的腾讯云)配置GUI并通过VNC软件远程连接。
2021-08-06
Flink任务多次启停内存泄漏分析
在测试时发现,对开发的Flink Job多次启动/停止,会在一定次数后启动报错: java.lang.OutOfMemoryError: Metaspace。理论上来说多次提交的任务之间应该是独立的,那么为什么一开始几次都能正常启动,到达一定次数之后却发生了OOM呢。对这个问题进行了排查,记录如下。
2021-07-13
Git实用操作分场景整理备忘
Git的一些操作如果从文档本身的描述去理解,虽然精确但是多少有些晦涩。这份笔记选择了一些实用的命令,按照各种实际使用场景进行组织,希望能够为理解和查找提供一些便利。
2021-06-28
Maven打包时Plugin的选择和其它一些知识点
最近看到不同的项目里在Maven打包时用到了不同的插件,比如Assembly Plugin和Shade Plugin,它们似乎都能起到打包uber jar的作用。还有,使用 project.build.resources 标签和使用Resources Plugin都能够指定资源文件的位置。那么它们之间有什么不同之处呢,这篇笔记进行一些总结。
2021-06-17
关于单例模式读配置文件的一些讨论
读取配置文件是单例的一个典型应用,因为配置文件可能在程序的许多地方使用,但各处读取的都是相同的配置,我们只希望它被实例化一次。不过单例模式也有一些固有的缺点,这篇笔记记录一些对单例模式读配置文件的思考。
2021-06-11
VSCode Remote SSH终端显示延迟(卡顿)的解决方法
在自己电脑上用着很流畅的VSCode Remote SSH终端在公司的电脑上却有明显的延迟。具体表现为在控制台输入一行命令,经常是输入完了之后才缓慢地显示在屏幕上,快速移动光标的时候还有时会出现光标错位的情况。以及在stdout打印大段内容的时候也有明显的卡顿感。
2021-06-04
离线环境使用SSH登录CDSW远程开发
CSDW平台自带的web终端并不是很好用,而CDSW提供了对SSH登陆的支持。我们可以通过SSH登陆,使用自己熟悉的终端程序去操作。这篇笔记记录一下在离线(隔离外网)的情况下远程登录CDSW的方法,顺便也补充登录普通开发服务器的方法,以及vscode的相应配置。
2021-05-21
联邦学习简介
联邦学习是一种分布式学习技术,可使多方在保证数据隐私的同时共同建模,打破数据孤岛。在AI应用中,数据的质量是保证建模效果的关键,但很多企业面临数据量少、局部性强的问题。如果多家企业能够分享数据联合建模,有希望能获得效果更好的模型。但这样做就要求各家企业都将数据集中转存到一个数据中心,从而进行统一的建模。而这种数据外流和分享对商业公司而言往往非常敏感,难以实现。
2021-04-22
Java中FunctionalInterface的使用
关于FuntionalInterface的介绍很多是单纯从语言特性的角度讲解,其实我觉得结合具体场景和设计思路来理解会更清晰一些。比如说在开发中有一些场景,如果方法能够作为参数传递的话那就会十分的便利,在这种时候函数式接口的使用就显得很自然了。
2021-03-25
理解快速排序的空间复杂度
在网上关于快排的时间复杂度基本没有啥争议(最好和平均情况O(nlogn),最坏情况O(n^2)),因为快排的定义本身就包括了对它的时间复杂度的定义。而空间复杂度则是没有定义的,所以中文互联网上有各种说法,而且粗略看了一下,并没有说的特别明白的。所以这篇笔记就简单谈一下我对快排的空间复杂度的理解。
2021-02-02
Python对大数据文件的读取
Python用来做数据分析是十分方便的,不论是程序员还是金融或学术领域的研究者都很喜欢使用它。但是当Python遇到海量数据的时候,语言性能上的局限性就会逐渐浮现。首先,读取数据都会成为一个问题,因为对于庞大的数据文件,机器内存有时候都无法存下,或者可以存下但是速度十分缓慢。这篇笔记就讨论一些Python对于大文件读取的问题。
2021-02-01
机器学习中对不平衡数据的基线模型选择
对于数据集不平衡的机器学习问题,从不同的基线模型的预测结果计算出的评估指标可能是不同的。例如二分类中,某一类样本远比另一类多的情况,如果选择Accuracy作为评估指标,总是预测多数类的基线模型会比随机预测两类之一的模型得到高得多的分数。如果错误地选择了等概率随机预测的模型作为基线,就无法合理地衡量后续模型的表现。
2021-01-19
使用状态缓存优化Flink的输出性能
我们在AI项目的在线特征计算中遇到的一个问题是,Flink对于小步长(slide)的时间窗口,优化并不是很好,或者可以说就没有优化。举个例子,对于每个卡号,计算这张卡片在过去5分钟、15分钟、60分钟……的平均交易金额,并且需要较快的刷新速度,也就是说,不能每5分钟才更新一次,因为卡片在这5分钟以内可以做很多笔交易,线上交易尤其如此,对这些交易必须要算出接近实时的特征,才能保证后续的AI模型预测准确。
2021-01-18
Scala中手动模拟实现基础类型
Scala不仅是一个函数式语言,也是一个面向对象的语言。实际上Scala在OOP特点方面和Java是保持一致的:万物皆对象,包括基础类型。而Scala在语法上还提供了一个方便的特性,就是可以用纯符号作为函数名(方法名)的关键字,从而使我们可以方便地在Scala去实现自定义的类型,包括各种基础类型本身。
2021-01-15
正则的执行方式
正则相关的介绍通常很少提到正则的工作原理,也就是编辑器或编程语言具体是如何对正则进行匹配的。不过了解正则的执行方式实际上对理解正则是很有帮助的。
2020-12-30
正则常用规则的备注
这篇文章主要是对正则的常用规则中一些容易模糊不清的地方进行备注,例如\w的精确判断方式,在[ ]中^和-符号的含义与其位置的关系等。
2020-12-29
Scala中的CBN、CBV和Currying
对于scala中的值(value)而言,定义的时候是有三种方式:def, val 和 lazy val。它们的区别在于,def定义的值,只有在调用的时候才会执行,并且不会存储;val定义的值是立刻执行,并且存储;lazy val是在调用的时候才执行,不过执行过一次之后就会存储。
2020-12-24
SBT编译的注意点
Scala有多种编译方式,使用Maven和Gradle都是可以的,实际上大型项目用这两者的会比较多。但是我们有时候可能会遇到使用sbt编译的项目,这时候要从源代码编译它,还是有一些地方需要注意的。因为sbt的报错提示并不友好,不熟悉的话需要花上较长的时间才能解决。
2020-12-21
递归、尾递归 in Scala
首先说一个小知识点:在Scala中,递归函数的返回值类型是必须指定的(而其它函数则不必,当然从代码风格的角度,全都写明会更加清楚)。因为编译器会尝试从函数的右侧表达式找这个函数的返回值,但是对递归函数,它会找到这个函数本身,导致返回值无法确定。
2020-12-08
AI项目规划中值得考虑的非技术因素
最近组队参加了一个创新比赛,期间有专家的一对一辅导。感受比较深的就是,因为我们做的是一个人工智能相关、偏技术的产品,对技术架构和实现关注得较多,而忽略了一些必须要考虑的非技术因素。
2020-12-04
快速了解Python Type Hint
Python 作为一个动态类型语言,虽然给我们编写代码带来了很多方便,但是动态类型也会容易导致一些隐蔽的bug,一旦出现问题,通常需要较多的精力进行排查。 Python type hint 将类似于静态语言的类型提示引入代码中,可以帮助我们在编码的早期发现潜在的问题。
2020-11-25
Scala和Java混合开发和编译
Flink和Spark这类大数据库中有大量的源码是用Scala编写的,我们对这些库进行二次开发、构建定制化的版本,需要对其中的Scala代码进行编译。
2020-11-17
Coursier的安装和使用
Coursier主要能帮助安装Scala相关的工具以及各版本JDK之类,还能够安装和管理多版本的JDK等,并且它会自动配置环境变量,省去手动配置的一些麻烦。
2020-11-05
调整正负样本比对模型评估指标的影响
最近在Kaggle上看到了这样一个kernel,解决的问题和我们的业务类似,也是做信用卡欺诈检测。在这个kernel的标题上注明了,它的模型可以达到95%准确率。
2020-10-30
MapReduce任务两种OOM问题的排查处理
在特征工程的MR任务中,目前遇到两种不同的OOM报错,处理方法也不同。
2020-10-15
实验:缺失值的处理对XGBoost模型效果的影响
在向XGBoost模型输入的特征矩阵当中,会存在一些缺失值。缺失值的来源主要有两种:
2020-09-27
XGBoost 简介(2)
XGBoost是于2015年由陈天奇等人提出的一个新的Gradient Boosting的实现。名称中的X代表 Extreme,意思是XGBoost旨在将Gradient Boosting对资源的利用和计算能力推至极限。
2020-09-26
XGBoost 简介(1)
XGBoost是目前近年来在各类机器学习竞赛中非常热门的一个模型,在Kaggle上是公认的高分算法,在工业界也有广泛的使用。XGBoost最大的特点在于对性能的提升,例如在向模型中添加决策树时,XGBoost可以利用多核CPU计算,而传统的Bosting算法的实现则是逐一排队添加;XGBoost还优化了数据的存储结构,提高了查找的效率和硬盘吞吐率。相比于sklearn内置的Gradient Boosting的实现,XGBoost的性能常常可以提升十倍以上。
2020-09-25
多版本python共存的环境变量配置
最近需要连一台比较旧的服务器,并没有python3,这篇笔记记录一下给python3配置环境变量,和python2共存的方法。
2020-09-01
离线为PyCharm配置Anaconda虚拟环境
打开PyCharm后,新建一个项目,PyCharm会为项目创建一个pychon虚拟环境。这个环境可以是从Virtualenv、Pipenv创建,也可以是从Conda创建。为了使PyCharm和Conda方便地集成,推荐从Conda创建。
2020-08-26
log4j和log4j2依赖冲突的解决办法
log4j是一个功能强大的日志组件,利用log4j,我们可以将日志信息记录在控制台、文件、GUI组件、服务器等等位置,还可以方便地自定义日志的显示格式。在2015年,log4j 1.x停止更新,而log4j2相比于log4j 1.x有显著的性能和吞吐量的提升。
2020-08-22
MapReduce中SecondarySort的实现
在需要对大量交易数据进行特征工程时,可以编写MapReduce应用实现。在Map端主要进行的是数据的读取和一些简单的转换,之后在Reduce端实现具体的特征生成逻辑。
2020-08-21
PyCharm连接到远程python interpreter时的问题排查
因为本地和服务器的python环境存在差异,本地编写的python代码需要在服务器上通过命令行的方式debug,较为繁琐。我们可以通过将PyCharm连接到服务器的python interpreter,在PyCharm里调用远程的python解释器,方便开发。
2020-07-21