<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[菜鸟sdut的博客]]></title><description><![CDATA[向往成为大佬的sdut's student]]></description><link>https://blog.youkuaiyun.com/sdut406</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sdut406]]></copyright><item><title><![CDATA[【Flink】Flink 处理函数之基本处理函数（一）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/136886394</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/136886394</guid><author>sdut406</author><pubDate>Mon, 25 Mar 2024 21:45:54 +0800</pubDate><description><![CDATA[流处理API，无论是基本的转换聚合、还是复杂的窗口操作，都是基于DataStream进行转换的，所以统称为，这是Flink编程的核心。但其实Flink为了更强大的表现力和易用性，Flink本身提供了多层API，只是中间一环，如下图所示：在更底层，Flink可以不定义任何具体的算子（比如mapfilter，或者window），而只是提炼出一个统一的操作——它是所有转换算子的一个概括性的表达，可以自定义处理逻辑，所以这一层接口就被叫作。状态（state）以及时间（time）。]]></description><category></category></item><item><title><![CDATA[【Flink】Flink 中的时间和窗口之窗口其他API的使用]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/136489734</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/136489734</guid><author>sdut406</author><pubDate>Tue, 19 Mar 2024 22:12:35 +0800</pubDate><description><![CDATA[对于一个窗口算子而言，窗口分配器和窗口函数是必不可少的。除此之外，Flink 还提供了其他一些可选的 API，可以更加灵活地控制窗口行为。]]></description><category></category></item><item><title><![CDATA[【Flink】Flink 中的时间和窗口之窗口API使用]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/136309655</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/136309655</guid><author>sdut406</author><pubDate>Mon, 18 Mar 2024 23:42:05 +0800</pubDate><description><![CDATA[窗口的API使用分为和，在定义窗口操作之前，首先就要确定好是基于按键分区Keyed的数据流来开窗还是基于没有按键分区的DataStream上开窗。]]></description><category></category></item><item><title><![CDATA[【Flink】Flink 中的时间和窗口之窗口(Window)]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/131425561</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/131425561</guid><author>sdut406</author><pubDate>Mon, 26 Feb 2024 21:46:25 +0800</pubDate><description><![CDATA[Flink是一种流式计算引擎，主要是来处理无界数据流，数据流的数据是一直都有的，等待流结束输入数据获取所有的流数据在做聚合计算是不可能的。为了更方便高效的处理无界流，一种方式就是把无限的流数据切割成有限的数据块进行处理，这就是Flink中提到的。在Flink中，窗口就是用来处理无界流的核心。我们很容易把窗口想象成一个固定位置的框，数据源源不断的流过来，到某个时间点窗口该关闭了，就停止收集数据，触发计算并输出结果。]]></description><category></category></item><item><title><![CDATA[【Flink】DataStream API使用之转换算子（Transformation）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/130659458</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/130659458</guid><author>sdut406</author><pubDate>Mon, 26 Jun 2023 23:52:52 +0800</pubDate><description><![CDATA[大多数操作都需要用户自定义 function，至于什么是自定义函数？我们可以通过自定义函数类或者匿名类来实现接口，也可以直接传入 Lambda 表达式。这就是谓的用户自定义函数（user-defined function，UDF）当Flink提供的分区策略不能满足我们的要求时，还可以通过使用partitionCustom()方法来自定义分区策略：自定义分区器（Partitioner）对象：对DataStream进行分区的。应用分区器的字段，指定方式与KeyBy指定key基本一样，可以通过字段名。]]></description><category></category></item><item><title><![CDATA[【Flink】Flink 中的时间和窗口之水位线(Watermark)]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/131215093</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/131215093</guid><author>sdut406</author><pubDate>Mon, 26 Jun 2023 23:50:03 +0800</pubDate><description><![CDATA[在事件时间语义下，我们可以不依赖系统时间，而是基于数据自带的时间戳去定义了一个时钟，用来表示当前时间的进展。这样每个并行子任务都会有一个自己的逻辑时钟，它的前进是靠数据的时间戳来驱动的。但是在分布式系统中，会存在一些问题，因为数据本身在处理转换过程中会发生变化，如果遇到窗口聚合的操作，呢么下游的数据就会变少，时间进度的控制就不精细了。另外，数据向下游任务传递时，一般只能传输给一个子任务（除广播外），这样其他的并行子任务的时钟就无法推进了。所以时钟也需要以数据的形式传递出去，告诉下游任务当前时间的进展；]]></description><category></category></item><item><title><![CDATA[【Flink】DataStream API使用之输出算子（Sink）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/131055598</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/131055598</guid><author>sdut406</author><pubDate>Tue, 06 Jun 2023 22:11:07 +0800</pubDate><description><![CDATA[如果Flink提供的Sink不满足自己的要求，也可以通过自定义Sink来满足自己的要求，通过Flink提供的接口和对应的抽象类重写invoke()就可以自定义Sink。这里以Hbase为例，使用，创建Hbase的连接以及关闭Hbase的连接分别放到open和close方法中。]]></description><category></category></item><item><title><![CDATA[【Flink】DataStream API使用之Flink支持的数据类型]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/130622991</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/130622991</guid><author>sdut406</author><pubDate>Sat, 13 May 2023 16:50:20 +0800</pubDate><description><![CDATA[Flink的使用过程中，我们的数据都是定义好的 UserBehavior 类型，那还有没有其他更灵活的类型可以用呢？Flink 支持的数据类型到底有哪些？]]></description><category></category></item><item><title><![CDATA[【Flink】DataStream API使用之源算子(Source)]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/130563537</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/130563537</guid><author>sdut406</author><pubDate>Wed, 10 May 2023 20:45:26 +0800</pubDate><description><![CDATA[一般将数据的输入来源称为数据源（data source），而读取数据的算子就叫做源算子（source operator）。所以，Source就是整个程序的输入端。
Flink中添加source的方式，是调用执行环境的 addSource()方法：]]></description><category></category></item><item><title><![CDATA[【Flink】DataStream API使用之执行环境]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/130558491</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/130558491</guid><author>sdut406</author><pubDate>Mon, 08 May 2023 16:54:06 +0800</pubDate><description><![CDATA[Flink 程序可以在各种上下文环境中运行：我们可以在本地 JVM 中执行程序，也可以提交到远程集群上运行。不同的环境，代码的提交运行的过程会有所不同。这就要求我们在提交作业执行计算时，首先必须获取当前 Flink 的运行环境，从而建立起与 Flink 框架之间的联系。只有获取了环境上下文信息，才能将具体的任务调度到不同的 TaskManager 执行。]]></description><category></category></item><item><title><![CDATA[【Java】@ConfigurationProperties+@PropertySource读取配置文件数据]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/124102271</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/124102271</guid><author>sdut406</author><pubDate>Mon, 11 Apr 2022 16:37:20 +0800</pubDate><description><![CDATA[前提
最近在写代码的过程中，看到一个读取配置文件的方式，感觉挺有用的，记录一下。
配置文件装填Map类型
1. 配置文件mysql-datatype.properties内容
datasource.type[CHAR]=STRING
datasource.type[CHARACTER]=STRING
datasource.type[VARCHAR]=STRING
datasource.type[TEXT]=STRING

配置文件放在项目的resource目录下的config目录

2. DemoDataT]]></description><category></category></item><item><title><![CDATA[【数据库】PostgreSQL增加密码复杂度校验]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/117327324</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/117327324</guid><author>sdut406</author><pubDate>Fri, 28 May 2021 17:37:14 +0800</pubDate><description><![CDATA[前言
最近修改问题单，被分配了一个增加密码复杂度校验的单子，PG库也不是很懂，查了资料，PG有自带的密码复杂度校验插件，只需要使用这个插件就可以了，然后根据这几天的折腾，总结一下。
怎么添加密码复杂度校验插件
PostgreSQL可以使用passwordcheck扩展+CrackLib来检查口令，并且 PostgreSQL自带了一个插件passwordcheck可以满足简单的密码复杂度测验, 防止使用过短, 或者与包含用户名的密码。
PG的密码复杂度校验插件所在目录是contrib/passwordchec]]></description><category></category></item><item><title><![CDATA[【数据库】PostgreSQL编译安装详细过程]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/116839968</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/116839968</guid><author>sdut406</author><pubDate>Sat, 15 May 2021 14:32:32 +0800</pubDate><description><![CDATA[前言
最近被安排做一些安全加固的事情，被分到了几个关于postgresql数据库的问题。关于pg库，我们应该都很熟悉了，项目中经常用到，原先以为下个包就可以直接部署了（当然官网也提供了桌面化安装程序），但是我没有安装linux的桌面化组件，所以只能自己编译安装了。。。。。
准备材料
以为服务器是内网服务器，不能配置yum，也连接不了外网，只能自己离线安装了，安装前需要准备的软件或者rpm包：

postgresql-10.14.tar.gz
readline-devel-6.2-11.el7.x86_64.]]></description><category></category></item><item><title><![CDATA[Mockito记录和静态方法的模拟]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/115304272</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/115304272</guid><author>sdut406</author><pubDate>Mon, 29 Mar 2021 16:19:33 +0800</pubDate><description><![CDATA[单元测试那些坑
1. 前言
为了提高白盒测试覆盖率，项目中需要添加单元测试代码，写单元测试中很多都是用的Mock+Junit，但是我这个项目中使用的是Mock+testng，不过这两种方式我都会介绍。
2. Mock+TestNG单元测试
2.1 前提准备
这里提供一份依赖jar包的pom文件：
&lt;dependency&gt;
    &lt;groupId&gt;org.mockito&lt;/groupId&gt;
    &lt;artifactId&gt;mockito-all&lt;/art]]></description><category></category></item><item><title><![CDATA[【K8s】常用K8s命令记录]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/114696951</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/114696951</guid><author>sdut406</author><pubDate>Fri, 26 Mar 2021 14:27:22 +0800</pubDate><description><![CDATA[kubectl get node -o wide 获取所有节点ip
kubectl get pods --all-namespaces 获取所有pods
kubectl delete pod -n cdm cdmcontroller-5f8f6558b8-gbq9x 删除pods
kubectl delete pod PODNAME --force --grace-period=0 强制删除
kubectl -nei-dayu get svc 获取配置
kubectl get po httpd-gv4bl ]]></description><category></category></item><item><title><![CDATA[【JAVA】Log4j2日志详解]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/106409015</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/106409015</guid><author>sdut406</author><pubDate>Thu, 28 May 2020 17:14:37 +0800</pubDate><description><![CDATA[一、log4j2配置详解
项目里使用了log4j2作为日志打印，但是log4j2和log4j相比配置文件有很大的差异，所以这里记录一下配置文件的说明
二、配置解析
1. 配置文件的名称以及在项目中的位置
在查阅资料的时候看到有的博客写的是log4j2的配置文件名是log4j2-spring.xml，但是我测试了一下其实不写这个也可以的。
log4j 2.x版本不支持已.properties为后缀的文件配置方式，2.x版本的配置文件后缀名只能为：.xml,.json,.jsn这三种。
系统选择配置文件的优先级]]></description><category></category></item><item><title><![CDATA[【HBase笔记】HBase Shell操作（三）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/103606132</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/103606132</guid><author>sdut406</author><pubDate>Tue, 24 Dec 2019 23:26:05 +0800</pubDate><description><![CDATA[1. 基本操作
1.1 进入Hbase客户端命令行
执行命令root@master:/opt/module/cdh/hbase-1.3.1/bin# ./hbase shell进入客户端。

1.2 查看帮助命令
执行help
得到结果：
hbase(main):001:0&gt; help
HBase Shell, version 1.3.1, r930b9a55528fe45d8edce7af...]]></description><category></category></item><item><title><![CDATA[【HBase笔记】HBase安装（二）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/103550295</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/103550295</guid><author>sdut406</author><pubDate>Mon, 16 Dec 2019 00:06:42 +0800</pubDate><description><![CDATA[简介
HBase的安装和Hadoop的安装是差不多的，这种体系的安装基本上都是相似的。
前期准备：

Hadoop的运行
Zookeeper的运行

我是在虚拟机上安装的伪分布式模式。

安装步骤


解压HBase的安装包
我是跟视频下载的HBase1.3.1版本的。
这里是从网上找到版本支持，只要版本支持就可以的。


修改配置文件
主要修改的是三个文件：hbase-env.sh ,hbase...]]></description><category></category></item><item><title><![CDATA[【Kafka笔记】3.Kafka架构详解]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/103058064</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/103058064</guid><author>sdut406</author><pubDate>Sat, 14 Dec 2019 16:48:14 +0800</pubDate><description><![CDATA[1.Kafka工作流程
Kafka中的消息是以topic进行分类的，生产者生产消息，消费者消费消息，都是...]]></description><category></category></item><item><title><![CDATA[【SparkSQL笔记】SarkSQL高并发读取数据库和存储数据到数据库（三）]]></title><link>https://blog.youkuaiyun.com/sdut406/article/details/103446275</link><guid>https://blog.youkuaiyun.com/sdut406/article/details/103446275</guid><author>sdut406</author><pubDate>Sun, 08 Dec 2019 16:40:42 +0800</pubDate><description><![CDATA[1. SparkSql 高并发读取数据库
SparkSql连接数据库读取数据给了三个API：
//Construct a DataFrame representing the database table accessible via JDBC URL url named table and connection properties.
Dataset&lt;Row&gt; 	jdbc(Strin...]]></description><category></category></item></channel></rss>