自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 Java文件操作和IO的小案例

扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件。(注意:我们现在的方案性能较差,所以尽量不要在太复杂的目录下或者大文件下实验)我们把第一个文件打开,把里面的内容逐个字节的读出来,写入到第二个文件中即可。扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)(data.txt的文件内容为data)

2024-07-09 19:10:27 459

原创 线程和进程

在此过程中,main线程和t线程之间的关系是: main线程在执行main方法的过程中,创建并启动了t线程,并且t线程启动后,和main线程就没有关系了,这时候main线程和t线程都是自己独立的运行,并且他们俩个是要争夺CPU的时间片(使用权)的。(注意,默认情况下,俩个线程的优先级都是5,那个俩个线程争夺到CPU的使用权的概率一样,那么基本上俩个线程都有相同的概率先执行完10000次循环,其实t1先稍微占了那么一点点的优势,因为毕竟在主线程的代码中,先启动了t1先,然后又启动了t2线程)

2024-07-09 18:55:02 856

原创 Linux常用命令

(复制a.txt b.txt文件到test目录中,要求这些文件和目录都是存在的,并且当cp 要复制的源是多个文件组成时,目标必须是已存在的目录,不能不存在,不能是文件;(当cp命令复制的源是目录时,会递归的将该目录下的所有子目录和子文件都复制一份,但是cp命令本身不会递归,需要加-r选项)如果后面的参数是一个软链接,但是该软链接指向的真实文件已被删除,则指的是创建该软链接指向的真实文件,新的,空白的。交互式命令,在命令执行的过程中,通过提示,提供相应的参数即可;r:可读,可以读取目录中的子目录或者文件;

2024-06-30 10:23:55 1056

原创 Flink的状态后端(State Backends)(管理状态)

Flink中提供了两类不同的状态后端,一种是“哈希表状态后端”(HashMapStateBackend),另一种是“内嵌RocksDB状态后端”(EmbeddedRocksDBStateBackend)。在Flink中,状态的存储、访问以及维护,都是由一个可插拔的组件决定的,这个组件就叫作状态后端(state backend)。普通的状态,以及窗口中收集的数据和触发器,都会以键值对的形式存储起来,所以底层是一个哈希表(HashMap),这种状态后端也因此得名。的机制,这在很多情况下可以大大提升保存效率。

2024-06-03 10:05:33 1208 1

原创 Hadoop数据压缩和压缩案例实操

Hadoop数据压缩是一种通过特定的算法来减小计算机文件大小的机制。这种机制在Hadoop中尤其重要,因为它可以有效减少底层存储系统(如HDFS)的读写字节数,从而提高网络带宽和磁盘空间的效率。在运行MapReduce程序时,尤其是在数据规模很大和工作负载密集的情况下,IO操作、网络数据传输、Shuffle和Merge等过程会花费大量的时间,因此数据压缩显得尤为重要。在Hadoop中,压缩可以在MapReduce的任意阶段启用。对于运算密集型的job,建议少用压缩以减少CPU开销;

2024-05-25 11:50:53 698

原创 Flink的状态生存时间(TTL)

状态的失效其实不需要立即删除,所以我们可以给状态附加一个属性,也就是状态的“失效时间”。之后如果有对状态的访问和修改,我们可以再对失效时间进行更新;当设置的清除条件被触发时(比如,状态被访问的时候,或者每隔一段时间扫描一次失效状态),就可以判断状态是否失效、从而进行清除了。在实际应用中,很多状态会随着时间的推移逐渐增长,如果不加以限制,最终就会导致存储空间的耗尽。这时就需要配置一个状态的“生存时间”(time-to-live,TTL),当状态在内存中存在的时间超出这个值时,就将它清除。

2024-05-25 11:47:03 396

原创 Flink中的按键分区状态

顾名思义,状态中只保存一个“值”(value)。这里的T是泛型,表示状态的数据内容可以是任何具体的数据类型。如果想要保存一个长整型值作为状态,那么类型就是ValueState< Long >。我们可以在代码中读写值状态,实现对于状态的访问和更新。T value():获取当前状态的值;:对状态进行更新,传入的参数value就是要覆写的状态值。在具体使用时,为了让运行时上下文清楚到底是哪个状态,我们还需要创建一个“状态描述器”(StateDescriptor)来提供状态的基本信息。

2024-05-25 11:46:52 452

原创 Map Join案例实操

在Reduce端处理过多的表,非常容易产生数据倾斜。我们可以在Map端缓存多张表,提前处理业务逻辑,这样增加Map端业务,减少Reduce端数据的压力,尽可能的减少数据倾斜。具体办法:采用DistributedCache(1)在Mapper的setup阶段,将文件读取到缓存集合中。(2)在Driver驱动类中加载缓存。//缓存普通文件到Task运行节点。//如果是集群运行,需要设置HDFS路径。

2024-05-18 15:40:42 448 1

原创 数据清洗(ETL)案例实操

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。

2024-05-18 15:37:01 1171

原创 Reduce Join案例实操

我们要将商品信息表中数据根据商品pid合并到订单数据表中。

2024-05-17 16:11:35 350

原创 自定义OutputFormat案例实操

我们可以看到这里的需求跟分区差不多,可能会想到用Partition分区去做,但是不行,在Hadoop的MapReduce框架中,OutputFormat接口和Partitioner类在数据处理和结果输出方面扮演着不同的角色。在这个实现中,我们可以根据某些条件(如键的特定值或值的特定属性)将数据写入不同的文件。过滤输入的log日志,包含atguigu的网站输出到e:/atguigu.log,不包含atguigu的网站输出到e:/other.log。

2024-05-16 17:17:19 747

原创 Top N案例

实时统计一段时间内的出现次数最多的水位。例如,统计最近10秒钟内出现次数最多的两个水位,并且每5秒钟更新一次。我们知道,这可以用一个滑动窗口来实现。于是就需要开滑动窗口收集传感器的数据,按照不同的水位进行统计,而后汇总排序并最终输出前两名。一种最简单的想法是,我们干脆不区分不同水位,而是将所有访问数据都收集起来,统一进行统计计算。所以可以不做keyBy,直接基于DataStream开窗,然后使用全窗口函数ProcessAllWindowFunction来进行处理。在窗口中可以用一个HashMap来保存每个

2024-05-15 09:26:24 395

原创 基于时间的合流——双流联结(Join)

于是对于时间戳为2的A中元素,它的可匹配区间就是[0, 3],流B中有时间戳为0、1的两个元素落在这个范围内,所以就可以得到匹配数据对(2, 0)和(2, 1)。顾名思义,间隔联结的思路就是针对一条流的每个数据,开辟出其时间戳前后的一段时间间隔,看这期间是否有来自另一条流的数据匹配。这里.window()传入的就是窗口分配器,之前讲到的三种时间窗口都可以用在这里:滚动窗口(tumbling window)、滑动窗口(sliding window)和会话窗口(session window)。

2024-05-11 16:13:51 337

原创 Flink对于迟到数据的处理

比如一个0-10s的窗口,设置了延迟时间是2s,后来来了一条12s的数据,窗口要触发然后关闭,紧接着又来了一条6s的数据,这个数据应该属于0-10s,但是窗口的延迟时间已经过去并且窗口已经关闭了,此时这条数据就叫做迟到数据。

2024-05-06 10:16:33 387

原创 Flink中的水位线

在Flink中,用来衡量事件时间进展的标记,就被称作“水位线”(Watermark)。具体实现上,水位线可以看作一条特殊的数据记录,它是插入到数据流中的一个标记点,主要内容就是一个时间戳,用来指示当前的事件时间。而它插入流中的位置,就应该是在某个数据到来之后;这样就可以从这个数据中提取时间戳,作为当前水位线的时间戳了。周期性生成器一般是通过onEvent()观察判断输入的事件,而在onPeriodicEmit()里发出水位线。import org。

2024-05-03 15:16:38 457

原创 Flink中的时间窗口和计数窗口效果演示

会话窗口中,最重要的参数就是会话的超时时间,也就是两个会话窗口之间的最小距离。如果相邻两个数据到来的时间间隔小于指定的大小那说明还在保持会话,它们就属于同一个窗口;这里的结果如果觉得不好理解就不要想那么多,反正就是一个步长一定有一个窗口触发和输出。还有一种方法可以动态的获取时间间隔,也就是说超时时间是动态变化的。那么新来的数据就应该属于新的会话窗口,而前个窗口就应该关闭了。20s一个窗口,窗口是连续的,而且没有时间重叠。

2024-05-03 15:16:15 302

原创 Flink中的窗口

注意:Flink中窗口并不是静态准备好的,而是动态创建——当有落在这个窗口区间范围的数据达到时,才创建对应的窗口。另外,这里我们认为到达窗口结束时间时,窗口就触发计算并关闭,事实上“触发计算”和“窗口关闭”两个行为也可以分开,这部分内容我们会在后面详述。我们定义了窗口分配器之后,我们只是知道了数据属于哪一个窗口,可以将数据收集起来了,至于收集起来要干什么,做什么计算,还是未知。与增量聚合函数不同,全窗口函数需要先收集窗口中的数据,并在内部缓存起来,等到窗口要输出结果的时候再取出数据进行计算。

2024-05-03 15:15:58 437

原创 Flink的转换算子【2】

调用.map()方法时传入的不再是一个简单的MapFunction,而是一个CoMapFunction,表示分别对两条流中的数据执行map操作。这种做法非常极端,通过调用.global()方法,会将所有的输入流数据都发送到下游算子的第一个并行子任务中去。轮询就是雨露均沾,很有规律,比如一共有两个分区,第一条数据去一号分区,第二条数据就去二号分区,第三条数据又去了一号分区…根据条件筛选数据的需求,本身非常容易实现:只要针对同一条流多次独立调用.filter()方法进行筛选,就可以得到拆分之后的流了。

2024-05-03 15:15:37 406

原创 Flink的转换算子【1】

数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个DataStream转换为新的DataStream。return id;return ts;return vc;} }Objects;return id;return ts;return vc;@Override@Override类是公有(public)的有一个无参的构造方法所有属性都是公有(public)的。

2024-05-03 15:15:04 1022

原创 WritableComparable排序案例实操

排序是MapReducer框架中最重要的操作之一。MapTask和ReduceTask均会对数据按照key进行排序,该操作属于Hadoop的默认行为,任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。自定义排序WritableComparable原理分析:@Overrideint result;// 按照总流量大小,倒序排列result = 1;

2024-04-11 14:53:17 1060

原创 python数据分析和可视化【5】泰坦尼克号幸存者数据分析

使用Seaborn库中的函数,对泰坦尼克号幸存者数据“titanic”进行数据分析与可视化。3)利用Seaborn绘制年龄的直方图和密度图。7)对年龄进行分级,分开老人和小孩的数据。4)显示登船地点(S,C,Q)的人数。6)基于性别,绘制乘客年龄分布箱线图。2)用年龄的均值进行缺失值的填充。5)用柱状图可视化乘客的性别分布。1)查看有无缺失值。

2024-04-11 08:21:47 1223 1

原创 Partition分区案例实操

我们自定义的分区数和在driver类中的设置的分区数之间有一定的关系。(1)如果ReducerTask的数量>getPartition的结果数,则会多产生几个空的输出文件part-r-00xx;(2)如果1

2024-04-10 19:56:07 464

原创 序列化案例实操(统计每一个手机号耗费的总上行流量、总下行流量、总流量)

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在Hadoop框架内部传递一个bean对象,那么该对象就需要实现序列化接口。具体实现bean对象序列化步骤如下7步:(1)必须实现Writable接口(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造super();

2024-04-05 19:19:37 1011

原创 python数据分析和可视化【4】星巴克数据分析

如果我们只关心星巴克咖啡门店,则只需获取星巴克中Brand的数据集,并查看全世界一共有多少家星巴克门店。有一组关于全球星巴克门店的统计数据directory.csv,分析了在不同国家和地区以及中国不同城市的星巴克门店的数量。(2)查看全世界一共有多少个国家和地区开设了星巴克门店,显示门店数量排名前10和后10的国家和地区。(4)用柱状图绘制排名前10的分布,并在图中标注出星巴克门店数量最多的城市。(6)按照星巴克门店在中国的分布情况,统计排名前10的城市。(3)显示拥有星巴克门店数量排名前10的城市。

2024-04-05 19:11:01 1126

原创 WordCount案例实操

大家引入类的时候一定注意不要引入错了,这里涉及的类太多了,我就是引入错了导致有bug找了半天才发现问题,比如这个Text,大家输入完Text不要立即点回车,一定要注意看看是否导入了正确的类。实现过程:按照MapReduce编程规范,分别编写Mapper,Reducer,Driver。(4)创建包名:com.atxiaoyu.mapreduce.wordcount。(1)创建maven工程,MapReduceDemo。在给定的文本文件中统计输出每一个单词出现的总次数。这个文件的内容就是执行的词频统计的结果。

2024-03-24 16:37:40 747

原创 HDFS的API操作

我们接下来封装一下,因为这一套初始化流程和关闭资源流程在很多操作中都得用,用一次写一次就十分麻烦,所以我们把他写成两个方法:init()初始化方法和close()关闭资源方法,每次用的时候直接调用一下就好了。首先拷贝hadoop-3.1.0到非中文路径(比如d:\),然后配置HADOOP_HOME环境变量和Path环境变量。这里涉及到三个操作:对文件名称的修改,文件的移动和更名,目录更名。运行一下发现下载成功,里面只有一个sunwukong.txt文件。分为三类:文件删除,空目录删除,非空目录删除。

2024-03-21 22:25:23 535

原创 python数据分析和可视化【3】体检数据分析和小费数据分析

(1)读取testdata文件,利用agg函数统计数据中‘淋巴细胞计数’的和与均值、‘白细胞计数’的和与均值。(将数据按照性别和是否抽烟进行分组,查看分组后小费的情况)(3)分析男性顾客与女性顾客谁更慷慨。(将数据按照性别进行分组,查看分组后小费的情况)(4)分析日期与小费之间的关系。(将数据按照星期分类,查看分类后的小费情况)(3)同时输出淋巴细胞计数的均值、血小板计数的均值与标准差。(2)将列名修改为汉字,并显示前5行数据。(1)读取数据,并查看数据的描述信息。(2)统计不同性别人群的血小板计数。

2024-03-20 14:46:18 880 1

原创 HDFS的常用命令

(这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10)例:在本地创建一个liubei.txt,输入liubei,然后追加到shuguo.txt文本内容的后面。例子:从hdfs拷贝shuguo.txt到当前目录下,更名为shuguo2.txt。说明:27表示文件大小;作用:从HDFS的一个路径拷贝到HDFS的另一个路径。例:在本地创建一个shuguo.txt,然后。

2024-03-20 14:44:52 789

原创 Hadoop集群基本测试

1.各个模块分开启动/停止(配置ssh是前提)常用(1)整体启动/停止HDFS(2)整体启动/停止YARN2.各个服务组件逐一启动/停止(1)分别启动/停止HDFS组件(2)启动/停止YARN。

2024-03-15 16:17:15 1294

原创 python数据分析和可视化【2】鸢尾花数据分析

读取iris数据集中鸢尾花的萼片、花瓣长度数据(已保存为csv格式),并对其进行排序、去重,并求出和、累计和、均值、标准差、方差、最小值、最大值。(2)查看鸢尾花数据集中有几种花瓣长度。(首先提取所有数据的花瓣长度,然后进行去重)2.获取数据:可利用csv模块进行读取,也可用其他方法进行读取。(3)求数据中花瓣长度的和,均值,方差,最小值及最大值。3.数据清理:对读取的数据进行处理(将索引号去掉等等)1.导入模块 (格式为import …(1)将鸢尾花数据集的花瓣长度进行排序。

2024-03-13 20:37:25 1853

原创 GitHub和Gitee的基本使用和在IDEA中的集成

上面的GitHub是国外的网站,所以访问的速度特别慢,这个Gitee是我们国内的平台,访问速度较快。新增文件到Gitee中的操作跟前面GitHub的一样,这里就不多赘述了。点击Clone后然后按照提示步骤创建就行了。(提交到本地仓库和gitee远程仓库)

2024-03-09 13:00:09 686

原创 GitHub Desktop的常用操作【图形化】

提交等同于产生了一个新的文件,会有一个新的版本号,那么我们怎么看到这个版本号呢?这里就显示c文件被删掉了,我们还是要提交后仓库中的文件才会被删掉。我们如果勾选上这个选项,那这个仓库就从我们系统中移除了。而且通过版本号可以找到文件(55 3ced7…我们把本地的c文件删掉,但是仓库中的文件还在。合并成功后会发现主分支的目录下有了这两个文件。

2024-03-07 16:49:07 1543

原创 python数据分析和可视化【1】

这学期开了门课是python数据分析和可视化,今天第一次实验课主要是复习了一下python基础和常用的一些操作。

2024-03-06 13:06:31 509

原创 Maven【5】在IDEA环境中配置和使用Maven

每次创建 Project 后都需要设置 Maven 家目录位置,否则 IDEA 将使用内置的 Maven 核心程序(不稳定)并使用默认的本地仓库位置。这样一来,我们在命令行操作过程中已下载好的 jar 包就白下载了,默认的本地仓库通常在 C 盘,还影响系统运行。配置之后,IDEA 会根据我们在这里指定的 Maven 家目录自动识别到我们在 settings.xml 配置文件中指定的本地仓库。按照idea工程的布局,project相当于父工程,里面的module相当于子工程(模块工程)

2024-03-02 21:35:56 1085

原创 Maven【4】(继承)(命令行操作)

这里还要注意一点,如果子工程的groupId和version与父工程的一样,那么子工程的groupId和version就可以省略。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程。然后我们可以在子工程中引用那些被父工程管理的依赖,子工程引用父工程中的依赖信息时,可以把版本号去掉,把版本号去掉就表示子工程中这个依赖的版本由父工程决定。本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置,本质上是pom文件里的配置内容的继承。

2024-03-01 17:45:57 1004

原创 Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)

main目录下的类为HelloServlet,compile范围引入的依赖为:pro01-maven-java,pro01-maven-java中的类为:Calculator,我们只需验证main目录下的类为HelloServlet能否使用Calculator即可。我们可以看到pro01-maven-java 依赖了 junit,但是在 pro02-maven-web 工程中查看依赖树的时候并没有看到 junit,所以test范围不能传递。所以配置依赖的排除其实就是阻止某些 jar 包的传递。

2024-02-29 18:11:38 947

原创 Maven【2】( Web 工程依赖 Java 工程)(命令行操作)

这是因为junit 依赖了hamcrest-core,然后基于依赖的传递性,hamcrest-core 被传递到我们的工程了。我们打包后可以发现,通过查看 war 包内的结构,我们看到被 Web 工程依赖的 Java 工程确实是会变成 Web 工程的 WEB-INF/lib 目录下的 jar 包。然后我们在web工程中编写一下测试代码,依赖了以后,依赖了Java工程了,在一个工程里面能不能用到另一个工程的类呢。(测试操作中会提前自动执行编译操作,测试成功就说明编译也是成功的。命令,生成 war 包。

2024-02-28 10:51:49 997

原创 Maven【1】(命令行操作)

这个命令的作用是:将本地构建过程中生成的 jar 包存入 Maven 本地仓库,而且安装操作还会将 pom.xml 文件转换为 XXX.pom 文件一起存入本地仓库。注意:运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。是指当前工程打包的方式,默认以jar包的方式进行打包,说明这是一个Java工程如果取值为war的话,生成war包,说明这是一个Web工程。打包的结果——jar 包,存放的目录:target。2.然后是具体的子标签,第一个是。标签来配置具体的依赖的信息的。

2024-02-22 10:16:50 1587

原创 【Java】一只小菜坤的编程题之旅【4】

【代码】【Java】一只小菜坤的编程题之旅【4】

2023-10-22 09:12:46 173 2

原创 【Java】栈和队列的模拟实现(包括循环队列)

【代码】【Java】栈和队列的模拟实现(包括循环队列)

2023-10-18 08:43:07 469 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除