- 博客(440)
- 资源 (9)
- 收藏
- 关注
原创 Spark操作Hive表幂等性探索
旁边的实习生一边敲着键盘一边很不开心的说:做数据开发真麻烦,数据bug排查太繁琐了,我今天数据跑的有问题,等我处理完问题重新跑了代码,发现报表的数据很多重复,准备全部删了重新跑。我:你的数据操作具备幂等性吗?实习生:啥事幂等性?数仓中的表还要考虑幂等性吗?
2023-08-11 15:49:32 1052
原创 SparkSQL性能优化终极篇
随着Spark版本的不断迭代,SparkSQL底层使用了各种优化技术,无论方便性、性能都已经超越了RDD。因此SparkSQL已经是最常用的Spark开发方式,因此,这里把常用的SparkSQL性能优化技术进行汇总。
2023-06-12 13:46:10 1977 2
原创 Spark数据倾斜解决方案六:随机前缀和扩容Join(包含完整案例代码)
该想法的原因:Shuffle的时候把Key的数据可以分到不同的Task里。但是,现在的倾斜的Key非常多,成千上万,所以如果说采样找出倾斜的Key的话,并不是一个非常好的想法。需要考虑当前程序能够使用的Core的数目,扩容的问题是来解决从程序运行不了的问题,从无法运行到能运行的结果。该方案更多的是缓解数据倾斜,而不是彻底避免数据倾斜,而且需要对整个RDD进行扩容,对内存资源要求很高。同时对另外一个正常的RDD进行扩容,将每条数据都扩容成n条数据,扩容出来的每条数据都依次打上一个0~n的前缀。
2023-06-10 13:12:36 1181
原创 Spark数据倾斜解决方案五:对倾斜key采样后单独Join(包含完整案例代码)
对倾斜的Keys采样进行单独的Join操作步骤有点复杂:首先对RDD1进行采样,例如RDD1进行Sample抽样(15%)可以计算出一个结果,其是一个RDD,采样之后进行Map操作,通过reduceBykey操作计数,然后对Key和Value进行置换,通过SortByKey进行排序,再进行Map置换操作,从而找出哪一个Key值倾斜比较严重,对其进行过滤,提取到RDD11中,剩下的提取到RDD12中。避免了占用过多内存。如果倾斜的Key特别多,如50多个倾斜的Key,我们可以一个一个地对Key进行过滤处理。
2023-06-10 12:32:11 991
原创 带你彻底理解Spark的分区
我:什么是RDD?面试者:RDD是被分区的,由一系列分区组成…我:你怎么理解分区?面试者:…我:Spark中有哪些可以实现分区的方法?分别使用的场景是什么?面试者…我:Spark默认分区数是多少?如何保证一个分区对应一个文件?面试者…Spark分区是将大型数据集划分为较小的数据块,每个数据块称为分区,分区是一个逻辑数据块,对应相应的物理块Block。每个分区都可以在集群中的不同节点上并行处理,这样可以提高Spark的并行性和性能。
2023-05-05 10:53:06 1227
原创 通俗易懂理解RDD看这一篇就够了
今天面试一个大数据开发工程师,spark相关的知识感觉都能懂一点,但是连基础的RDD稍微一问深一点就不知所云,这种情况基本上是无法通过面试的,今天想用通俗的话把RDD说明白。弹性分布式数据集)是Spark中最基本的数据抽象,代表不可变、可分区、可并行计算的集合。RDD允许将计算结构缓存到内存中,这样当后续计算需要这些数据时,就能快速从内存中加载它们,这样不但提高数据的复用性,还提高了数据的计算效率。RDD主要特点包括并行计算自动容错数据本地性调用等。
2023-05-04 18:26:37 2840
原创 repartition和partitionBy的区别
旁边的实习生一脸困惑:我把一个dataset的数据往某个文件夹或hive表中写的时候可以用partitionBy对数据进行分区,可是repartition顾名思义也好像与分区有关,这两个究竟有啥区别?我该如何使用?
2023-05-04 15:26:38 914
原创 Spark需要的资源调优(Yarn Cluster模式)
Spark应用程序是粗粒度的,也就是说在提交的时候就得规划好需要多少资源,设定了不合适的资源也会影响整体性能。yarn.nodemanager.resource.memory-mb 每个nodemanager分配的内存,也就是该节点上YARN可使用的物理内存总量。官方。
2023-04-01 23:43:46 591
原创 Dataset关联性能优化
如果一大一小两个Dataset进行join,每个woker的内存足够存放小的Dataset,此时最好的处理方式就是将小的Dataset进行广播,有关广播的知识可以参考这篇文章。
2023-03-31 23:45:01 233
原创 广播变量对Spark性能产生的影响
先说一下为什么Spark会引入广播变量?我们在driver端定义了一个变量,如果要在executor端使用,spark会为把这个变量以task的形式给每个executor发送,也就是有多少个task,每个executor中就会有多少个变量,如果该变量是个集合,而且比较大,甚至会导致内存溢出。因此,引入了广播变量来解决这种问题。下面会用实际案例进行详细描述。
2023-03-31 17:25:50 337
原创 collect大RDD性能优化
众所周知,collect算子会把所有数据拉到driver端,如果数据量太大,直接会造成内存溢出。但是该算子在很多实际场景中会经常用到,这个时候就需要采取一定地方优化措施了。
2023-03-31 15:14:18 394 1
原创 Scala中如何优雅的处理Null
前言如果在scala代码还在使用ids!=null,可能会被有的人嘲笑,都什么年代了,竟然还有这样的写法,NullPointerException见少了吧?不过,据统计:Spark 源代码使用了 821 次 Option 关键字,但它也直接在像if (ids != null)。Spark 采用混合方式,大部分情况下使用 Option,但个别时候出于性能(这里主要是为了给使用这返回提示信息)原因才使用了null。一个很好的习惯是当有方法返回值可能为null的时候,使用Option来代替。什么是Op
2021-08-28 20:44:08 3781 1
原创 Python 连续数据离散化最通俗的理解与操作
前言一些数据挖掘算法,特别是某些分类算法,如ID3算法、Apriori算法等,要求数据是分类属性形式。这样,常常需要将连续属性变换成分类属性,即连续属性离散化。离散化是干啥连续属性离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。所以,离散化涉及两个子任务:确定分类数以及如何将连续属性值映射到这些分类值。常用的离散化方法常用的离散化方法有等宽法、等频法和(一维)聚类。(1)等宽法将属性的值域分成具有相同宽
2021-01-05 18:26:40 10669 1
原创 python 下采样和上采样
前言由于工作数据量较大,训练模型很少直接单机python,一般都采用SparkML,最近把SparkML的工作使用python简单的写了一下,先写个上下采样,最终目的是为了让正负样本达到均衡(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)数据准备共20条数据,正样本1共有5条,负样本0共有15条。基础知识准备如何获取dataframe的行数pandas.DataFrame.shape 返回数据帧的形状df.shape[0] 返回行数de.shape[1] 返
2020-10-28 16:23:27 9794 2
原创 Hadoop面向行和面向列格式详解
前言说到HDFS上面存储数据的格式,一般会想到面向行存储的Avro、SequenceFile(现在较少用);面向列存储的Parquet、ORC等,那么在存储的时候如何选择呢?面向行存储格式(以Avro和SequenceFile为例)Avro基本概念Avro是一个独立于编程语言的数据序列化系统。引入的原因:解决Writable类型缺乏语言的可移植性。Avro数据文件主要是面向跨语言使...
2020-01-17 11:10:54 1415
原创 Hive压缩存储(以Parquet为例)
前言前面说了,HDFS上的数据在生产环境中一定是以压缩格式存储的,那么在Hive中如何使勇Parquet格式存储数据呢?测试数据在本地服务器上面vim test.txt1,zs2,ls3,ww4,zl由于我们一般接到的数据都是gzip压缩的文件,这里就将文件压缩为gzipgzip -c test.txt > .test.gz错误的方式创建parquet的hive表...
2020-01-09 10:22:46 2027 2
原创 HDFS文件的压缩
前言新搭建的集群,需要进行各种测试,于是让一个同事导入一些测试数据,大约1.4T左右。我进行了一个简单的hive测试//故意增加shuffleSELECT DISTINCT(COUNT id) FROM test_table;谁知道…就这么一个简单的SQL,半个小时过去后,仍然没有出结果追查原因原来同事从ftp拉取过来的数据是gzip格式的,他直接如到Hive表中…,而gzip格式的...
2020-01-04 18:06:11 7911 1
原创 Pearson相关系数和Spearman相关系数的区别
前言相关系数是用以反映变量之间的相关关系程度的统计指标。其取值范围是[-1,1],当取值为0时表示不相关,取值为[-1,0)表示负相关,取值为(0,-1],表示负相关。目前常用的两种相关性系数为皮尔森相关系数(Pearson)和斯皮尔曼等级相关系数(Spearman)简介皮尔森相关系数评估两个连续变量之间的线性关系。其中:-1 ≤ p ≤ 1p接近0代表无相关性p接近1或-1......
2019-08-29 14:31:55 70434 10
原创 MapReduce过程详解
MapReduce是一种云计算的核心计算模式,是一种分布式运算技术,也是简化的分布式并行编程模式,主要用于大规模并行程序并行问题。MapReduce的主要思想:自动将一个大的计算(程序)拆分成Map(映射)和Reduce(化简)的方式。流程图如下:数据被分割后通过Map函数将数据映射成不同的区块,分配给计算集群进行处理,以达到分布运算的效果,再通过Reduce函数将结果进行汇...
2018-05-16 11:54:47 3088
原创 爬虫基础之Session和Cookie
本节介绍了 Session 和 Cookie 的基本概念,这对后文进行网络爬虫的开发有很大的帮助,需要好好掌握。
2024-12-10 23:32:16 413
原创 爬虫基础之爬虫的基本原理
简单点讲,爬虫就是获取网页并提取和保存信息的自动化程序,下面概要介绍一下。获取网页爬虫的工作首先是获取网页,这里就是获取网页的源代码。源代码里包含网页的部分有用信息所以只要获取源代码,就可以从中提取想要的信息了。这篇博客讲了请求和响应的概念,向网站的服务器发送一个请求,服务器返回的响应体便是网页源代码。所以最关键的部分是构造一个请求并发送给服务器,然后接收到响应并对其进行解析,这个流程如何实现呢?总不能手动截取网页源码吧?
2024-12-10 22:33:08 668
原创 爬虫基础之HTTP基本原理
Cookie 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookie 并将其发送给服务器,服务器通过Cookie识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。可以理解为,接收方太繁忙了,来不及处理收到的消息了,但是发送方还在一直大量发送消息,这样就会出现一些问题。请求头中包含许多请求信息,如浏览器标识、Cookie、Host等信息,这些是请求的一部分,服务器会根据请求头里的信息判断请求是否合法,进而做出对应的响应。
2024-12-09 22:22:48 741
原创 黑马程序员Java项目实战《苍穹外卖》Day12
苍穹外卖-day12课程内容工作台Apache POI导出运营数据Excel报表功能实现:工作台、数据导出工作台效果图:数据导出效果图:在数据统计页面点击数据导出:生成Excel报表1. 工作台1.1 需求分析和设计1.1.1 产品原型工作台是系统运营的数据看板,并提供快捷操作入口,可以有效提高商家的工作效率。工作台展示的数据:今日数据订单管理菜品总览套餐总览订单信息原型图:名词解释:营业额:已完成订单的总金额有效订单:已完成订单的数量订单完成
2024-12-08 23:33:21 1090
原创 黑马程序员Java项目实战《苍穹外卖》Day11
Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。官网地址:https://echarts.apache.org/zh/index.html1). 柱形图2). 饼形图3). 折线图**总结:**不管是哪种形式的图形,最本质的东西实际上是数据,它其实是对数据的一种可视化展示。
2024-12-08 23:23:33 788
原创 黑马程序员Java项目实战《苍穹外卖》Day10
是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。**定位:**定时任务框架**作用:**定时自动执行某段Java代码为什么要在Java程序中使用Spring Task?1). 信用卡每月还款提醒2). 银行贷款每月还款提醒3). 火车票售票系统处理未支付订单4). 入职纪念日为用户发送通知**强调:**只要是需要定时处理的场景都可以使用Spring TaskWebSocket 是基于 TCP 的一种新的网络协议。
2024-12-08 23:01:03 722
原创 Elasticsearch入门之HTTP高级查询操作
上一篇博客创建索引(创建表 create table)查看索引(查看表show tables)查看单个索引(查看单个表show create table)删除索引(删除表)创建文档(插入数据)根据唯一标识查看文档(根据主键查看一条数据)根据唯一标识修改文档所有字段值(根据主键修改一条数据)根据唯一标识修改文档指定字段值(根据主键修改指定字段的值)根据唯一标识删除文档(根据主键删除对应的一条数据)条件删除文档(根据条件删除数据)
2024-12-07 21:24:59 1198
原创 Elasticsearch入门之HTTP基础操作
titletext:适合用于全文搜索,能够根据部分关键词匹配到相关文档。keyword:适合用于精确匹配、排序和聚合操作。它确保了原始字符串不被分析,从而支持精确查询、按字母顺序排序以及统计不同值的数量等功能。通过这种方式,Elasticsearch 提供了灵活的数据处理能力,既支持复杂的全文搜索,又支持基于关键字的精确操作。希望这个例子能帮助你更好地理解的实际应用。创建索引(创建表 create table)查看索引(查看表show tables)
2024-12-07 12:49:20 1053
原创 Elasticsearch概述与安装
Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。目前市面上流行的搜索引擎软件,主流的就两款:Elasticsearch 和 Solr,这两款都是基于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。
2024-12-06 23:00:05 891
原创 黑马程序员Java项目实战《苍穹外卖》Day08
前面的课程已经实现了用户下单,那接下来就是订单支付,就是完成付款功能。支付大家应该都不陌生了,在现实生活中经常购买商品并且使用支付功能来付款,在付款的时候可能使用比较多的就是微信支付和支付宝支付了。在苍穹外卖项目中,选择的就是微信支付这种支付方式。要实现微信支付就需要注册微信支付的一个商户号,这个商户号是必须要有一家企业并且有正规的营业执照。只有具备了这些资质之后,才可以去注册商户号,才能开通支付权限。
2024-12-04 23:13:47 929
原创 黑马程序员Java项目实战《苍穹外卖》Day07
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。EHCacheCaffeineRedis(常用)</</</</
2024-12-04 21:47:34 651
原创 Your local changes will be overwritten by merge. Commit, stash, or revert them to proceed
当你尝试合并一个分支到当前工作分支时,Git检测到你的工作目录或暂存区存在未提交的改动,这些改动可能与即将合并的分支存在冲突。为了避免数据丢失或意外覆盖,Git暂停了合并操作,并抛出了上述警告。这一机制体现了Git对开发者工作的尊重与保护,但同时也要求开发者采取措施,主动管理这些未提交的更改。使用git reset --hard命令将工作目录和暂存区恢复到最近一次提交的状态。你决定放弃当前的本地更改,希望回到最近一次提交的状态。快速清除工作区,适合彻底放弃当前的修改。注意,此操作会永久丢失未提交的更改。
2024-12-04 21:23:17 332
原创 黑马程序员Java项目实战《苍穹外卖》Day06
苍穹外卖-day06课程内容HttpClient微信小程序开发微信登录导入商品浏览功能代码功能实现:微信登录、商品浏览微信登录效果图:商品浏览效果图:1. HttpClient1.1 介绍HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient作用:发送HTTP请求接收响应数据为什么要在Java程
2024-12-02 23:54:16 1012
原创 黑马程序员Java项目实战《苍穹外卖》Day05
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。**官网:**https://redis.io**中文网:**https://www.redis.net.cn/key-value结构存储:基于内存存储,读写性能高适合存储热点数据(热点商品、资讯、新闻)企业应用广泛Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。
2024-12-02 23:20:34 954
原创 黑马程序员Java项目实战《苍穹外卖》Day04
setmeal_dish表为套餐菜品关系表,用于存储套餐和菜品的关联关系。setmeal表为套餐表,用于存储套餐的信息。
2024-12-02 22:12:55 581
原创 java.lang.OutOfMemoryError: Unable to acquire 100 bytes of memory, got 0
如果不是,那么尽快减少使用,coalesce不会把数据块做 shuffle 操作,但是会让数据块在一个 Task 执行,同时后续的计算成为单块的任务了。没有Coalesce操作的时候,每个 partition 是一个task来计算,此时内存并不会有很大问题,假设 JVM 中32个 Cores 在计算, Page 默认大小为128M的情况下,内存损耗顶峰也不到4G,这个数量并不算多。那导致内存顶峰大小为 N*128M,而 shuffle 中的 N 值默认的情况为200,实际可能更大,那么就很容易内存溢出了。
2024-12-02 21:35:38 547
原创 黑马程序员Java项目实战《苍穹外卖》Day02
ThreadLocal 并不是一个Thread,而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
2024-11-28 22:48:15 1013
原创 黑马程序员Java项目实战《苍穹外卖》Day01
作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这一小节,我们将从 软件开发流程、角色分工、软件环境 三个方面整体介绍一下软件开发。在开发苍穹外卖这个项目之前,我们需要全方位的来介绍一下当前我们学习的这个项目。接下来,我们将从项目简介、产品原型、技术选型三个方面来介绍苍穹外卖这个项目。
2024-11-27 22:30:59 3013
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人