自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python实现for循环多线程执行

【代码】python实现for循环多线程执行。

2024-01-12 13:30:53 1051

原创 sparksql broadcast join opt

to_utc_timestamp(current_timestamp,‘GMT-8’) as etl_load_time --数据入湖时间。from dm_secure.dm_fin_pnl_sams_item_pnl_di – sams商品日销售损益宽表。

2023-10-10 17:24:13 213

原创 订单正逆向流程

提示:以下是本篇文章正文内容,下面案例可供参考订单业务线性流程。

2023-09-23 11:26:17 858

原创 大数据杂谈

大数据开发方向偏业务侧方向-项目经理如何在面试中说服面试官根据课程项目做一些改动(变成自己熟悉的东西),形成一个新的项目,去增强面试的能力数据湖是数仓的增强版本格式管理数据管理时间旅行manifestsschema演变分区演变

2023-09-23 11:18:03 165

原创 排序算法简述

mapreduce中的排序算法即作用归并排序(Merge sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并总结:归并是将子序列合并的意思,合并的方法是用辅助列实现。快速排序:使用递归的思想,设定分界值,其左侧和右侧,将小于分界值的数据放在左侧,大于分界值的数据放在右侧;

2023-08-19 22:29:47 192

原创 semi、anti join

这就导致右表有重复值得情况下 left semi join 只产生一条,join 会产生多条,也会导致 left semi join 的性能更高。left anti join与left semi join相反,是以左表为准,在右表中查找匹配的记录,如果查找成功,则返回null,否则仅返回左边的记录。给 map 阶段,因此left semi join 中最后 select 的结果只许出现左表。1、left semi join 的限制是, JOIN 子句中右边的表只能在。2、left semi join 是。

2023-08-06 21:20:11 284

原创 hive谓词下推

2023-08-01 23:29:35 63

原创 海量数据存储组件Hbase

hdfshbaseNoSQL数据库 支持海量数据的增删改查 基于Rowkey查询效率特别高kudu介于hdfs和hbase之间hbase依赖hadoop+zookeeper,同时整合框架phoenix(擅长读写),hive(分析数据)k,v 储存结构稀疏的(为空的不存储)、分布式的、持久地、多维排序map-》映射:行键、列键、时间戳,未解释的(序列化的,存储效率高)

2023-07-30 19:01:39 739

原创 f2主键增量算法修历史

3.需要修数据的arcdt分区中分为要修的t1和不修的数据t3,要修数据即为t1,不修的数据为拉链表中要修数据的分区中所有数据减去t1(这个地方需要主键加开始日期做筛选)4.t1、t2、t3三部分整合到一张表即可,注意t1和t3是同分区,需要先insertoverwrite再insertinto。1.先使用sa0615数据筛选出拉链表中所有相关主键数据,从中按主键分组,arcdt取最小一条,放临时表t1中。2.通过临时表t1筛选与修数据无关的arc_dt分区字段值,这些部分为t2全部直接回插。

2023-07-27 23:57:58 148

原创 Spark3新特性

spark3.0动态分区裁剪:与逻辑计划的谓词下推静态优化不同,这个是运行时的动态优化特性,如案列中小表的过滤,其实是基于维度表的裁剪的基础上,在join关联之前提前检测另一张事实表中对应条件的数据进行提前过滤。动态调整JOIN策略:类似于mapjoin优化,将sortMergejoin转换成broadcasthashjoin,也就是将小表当作广播变量分发到另一个表的所有节点上,如此可以减少大量的网络IO。实现运行时优化,纠正因统计信息不准确导致生成的逻辑计划不完善或有误的问题。

2023-07-16 12:41:07 354

原创 Spark高级特性

sortShuffle比hashShuffle好的地方在于,sortShuffle是每个task(并行度)产生一个文件,而hashShffle是按hash分区来的,一个task会产生多个文件,增加了网络IO。spark shuffle 中 map 和 reduce 是一个相对的概念,map是产生一批数据,reduce是接收一批数据,前一个任务是map,后一个任务是reduce。hashShuffle:hash分组,一个task里面按hash值的不同,分到不同的组里,在内存中也是独立的。

2023-07-15 23:10:56 344

原创 sparkSQL UDF

sparksql只能创建UDF,使用 SparkSession.udf.register()指定一个schema,df说白了是一个二维数组。

2023-07-15 18:24:45 472

原创 SparkSQL

工具连接spark使用sparkSql访问Hive表,就要用到一个东西SparkThirdService;这东西就类似java jdbc连接,连接。的hiveService2这种东西;#进入Spark安装目录。

2023-07-11 22:58:29 309

原创 SparkCoreDAG

窄依赖:规整的内存迭代计算管道(pip line)执行(就是一个个具体的task),一个线程对应一个窄依赖,线程间互不影响。一个action会产生一个JOB(DAG)(即一个应用程序内的子任务) 一个action=一个Job=一个DAG。带有分区的DAG只有在运行的时候才会生成,因为像指定并行度的逻辑,只有运行的时候才知道你传入的参数是多少。rDD在横向上一个task可以处理多个RDD一个分区,竖向上每个分区都需要有一个task去处理。dag的作用是使用内存计算,stage的作用是构建内存计算。

2023-07-11 22:22:40 225

原创 PySpark的RDD持久化

>1. RDD缓存 ,把某个RDD保留,rdd.cache() 缓存到内存,rdd.persist(StorageLevel.DISK_ONLY_2) 缓存到本地硬盘上,2个副本,不支持存HDFS,保留血缘关系。-> 2.RDD Checkpoint 仅支持存硬盘,设计上安全,不保留血缘关系(后台执行计划可体现)RDD迭代链条中只有最新的RDD,旧RDD会销毁,节省内存空间。缓存的原理是写到对应节点的服务器上的本地内存或磁盘上。追溯旧RDD是依照血缘关系,使用持久化技术。

2023-07-09 17:06:14 80

原创 pyspark

连接命令:一个application 大任务可以分解成 多个小任务 jobs, 一个job又可以分解成多个 stages 阶段,一个stage又可以分解成 多个tasks(可以认为是两个线程)standalone Zookeeper 高可用HA,集群中存在多个master,但最先注册的成为active,其它是standby,集群包含Worker、Driver、Applicationmaster由resource manager 担任work由node manager担任。

2023-07-09 15:54:59 250

原创 MySQL语法底层

查询的过程大致如下:1、选取一张表,我们称之为【驱动表】,从驱动表中开始查询,找到满足条件的数据(如果没有条件就依次全部取出)。2、根据从驱动表查询的这条数据,以及其他条件,去第二张【被驱动表】中查询,并将结果进行拼接。3、依次类推,从驱动表获取第二条数据,使用该数据和条件,再次查询【被驱动表】进行查询。4、整个过程,会查询【驱动表】一次,查询【被驱动表】多次。

2023-07-09 15:20:49 113

原创 用户留存率

留存用户率 = 留存用户 / 第n天新增用户 *100%留存用户是 前第n天新增用户数 join 今日活跃。首先确定 计算前几天的留存?

2023-07-03 21:50:05 63

原创 JavaSE ==和equals()

equals() 默认是object类下的方法, 用==实现,比较的是地址。== 如果是基本数据类型,比较的是变量值。重写一般改成比较他们的值属性的内容。如果是引用数据类型,比较的是地址。

2023-07-02 23:10:51 63

原创 Java final、finally、finalize

Final 修饰 类, 不可被继承;修饰变量,变量不可改变;修饰方法,方法不能被重写;Finalize是 垃圾回收之前用于整理资源的方法,可以在这个方法里面些整理的逻辑。Finally 是 try-catch之后的一个代码块,只要JVM还在,就会执行;

2023-07-02 23:03:22 66

原创 Stringbuffer和StringBuilder区别

但 stringBuffer是线程安全的,因为它用Synchronize修饰,同时效率低,因为要上锁。Stringbuffer和StringBuilder的方法和功能完全等价。StringBuilder不是线程安全的,所以速度更快。

2023-07-02 22:57:36 84

原创 Java TreeSet 和HashSet的区别

TreeSet是有序,使用红黑树实现,其方法是O(log(n)),有额外的排序方法first、last。HashSet是无序,使用hash算法实现,其方法add、remove都是O(1)复杂度。

2023-07-02 22:57:29 69

原创 HashMap和HashTable的区别

4)HashMap 有 containsKey containsValue方法, HashTable有 containsKey containsValue= contains方法,3)HashMap初始长度为11,HashTable初始长度为13,扩容时 Map是原来的2倍,Table是2倍+1.HashMap线程不安全,需要手写同步, HashTable线程安全,其中方法是Synchronize的。HashMap允许有null值, HashTable不允许有NULL值。2)是否允许NULL值。

2023-07-02 22:48:36 32

原创 Java自带的线程池种类

3)newSingleThreadExecutor 单线程Executor,保证按指定顺序(FIFO)执行。4)newScheduleThreadPool 定长线程池,定时或周期性的任务执行。2)newFixedThreadPool 固定工作线程数量的线程池。1)newCachedThreadPool 可缓存线程池。

2023-07-02 19:34:15 77

原创 JAVA反射

Java 程序中许多对象在运行是都会出现两种类型:编译时类型和运行时类型。编译时的类型由 声明对象时实用的类型来决定,运行时的类型由实际赋值给对象的类型决定。其中编译时类型为 Person,运行时类型为 Student。Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;如果没有声明对象的类,那么就只能在运行的时候动态的获取类信息,即反射。通过class对象实现(参数为类的全限定名),class可以获取到该类所有声明的方法。

2023-07-02 10:28:23 31

原创 Scala

deffun1a: Int ,b: Int)=ab方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归方法中或者方法的返回值是函数类型的时候。scala中方法有返回值时,可以写return,也可以不写return,会把方法中最后一行当做结果返回。当写return时,必须要写方法的返回值。如果返回值可以一行搞定,可以将{}省略不写传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。

2023-07-01 22:52:32 578 2

原创 SparkStreaming

对象的checkpoint()设置路径,可以实现在指定路径周期性的记录ss的一些元数据和状态信息,再通过对象的getorCreate()获得这些checkpoint信息StreamingContext,自动加载之前保存的 Checkpoint。1.消息队列的集成,如kafka,可以使用 Kafka 的 Offset 来记录已消费的消息的偏移量,并定期提交偏移量到 Kafka 的特殊主题中。在出现故障后,可以使用提交的偏移量来恢复消费过程,并确保不会重复消费数据。2.做完维护业务数据操作后,提交偏移量。

2023-06-26 22:38:04 3329 1

原创 SparkSql、DataFrames、DataSet

2.coalesce是在原有节点上进行分区的合并,不会跨节点的进行分区的操作,而repartition会。coalesce是合并或减少分区数,不shuffle,但数据量过大,分区数过少会出现 OO,需合理。repartition是增加(提高并行度)或减少分区数,会shuffle。overwrite:覆盖原有分区数据,在原有分区上全量刷新。// 对DataFrame按照分区列进行分区。append:在原有分区上面追加。1.是否改变分区:都改变分区数。3)插入时指定分区以减少分区数。

2023-06-25 22:11:00 423

原创 Spark调优前后的差别

比如我们有几百个文件,那么会有几百个map,读取之后做join操作效率会非常低,我们可以使用coalesce()合并分区,减少分区数,再去shuffle,产生的文件数会小很多,提高了join效率。

2023-06-25 21:47:02 51

原创 使用Spark实现TopN的获取

方法二: DF/DS.sort() 方法 将rdd转换成DF、DS,使用其内置的函数sort().limit() 排序取topN。方法三: 先分区内排序mapPartition,后全局排序。方法一: rdd.top(N) 方法实现。

2023-06-25 21:32:24 333

原创 Spark手写wordCount(Scala实现)

sc.stop()

2023-06-25 21:00:43 401

原创 Spark窗口函数的原理

滑动窗口时间间隔-每隔多长时间滑动一次窗口,即滑动的步长,指示当前批次计算完成后下一次计算从什么地方开始。必须是批处理时间的整数倍。窗口时间间隔-窗口长度,是一个抽象的时间概念,可以表示一个窗口下有多少个批次的数据(再次封装)需要处理,故必须是批处理时间的整数倍。三者的大小关系: 批处理时间 < 滑动窗口时间间隔 < 窗口长度 底层原理还是防止丢数据。批处理时间-每个批次处理数据的时间。

2023-06-24 22:39:48 183

原创 SparkStreaming消费kafka中数据的方式有哪些?他们有什么区别?

1.receiver接收器方式 使用kafka里面的一个高级API,将生产的数据放在receiver里面包装成DS进行处理,而receiver在executor里面,但失败的情况下回丢失数据,为了容错,可以考虑启用WAL日志(存储在HDFS上),缺点是WAL日志相当于复制了一份数据,kafka本身也有备份机制,故数据冗余。1.receiver方式依赖zookeeper记录偏移量,那么与SS的偏移量记录可能会存在不一致的情况,且WAL日志相当于复制了一份数据,kafka本身也有备份机制,故数据冗余。

2023-06-24 22:00:48 612

原创 SparkSQL中join和left join的区别?

left semi join 相当于 IN (KeySet)语句,可以作为left join的优化,其会自动过滤右表重复的项,实现上是以左表为驱动表,其中每一条记录扫描右表匹配表时,当扫描到第一个匹配的项时就会中断扫描返回结果,同时left semi join 只能返回左表的列,因为右表参与关联的列只有关联条件。left join是将完整的保留左表数据(第一个RDD),纳入右表能够匹配上的项,匹配不上的项用NULL填充。join是两表关联 条件匹配时,该记录才会取进来。

2023-06-24 17:56:36 200

原创 Spark中RDD、DataFrame、DataSet之间的区别与联系?

DataFrame是在RDD的基础上包装一层schema(反射推断或代码定义【反射是通过检测已知数据样本的类型或数据结构自动推断和创建出对象的一种机制】),即描述它的结构,是分布式的Row对象的集合,每一行都是一样的结构,因此它在序列化和反序列化时省去了对结构的ser、deser;RDD是弹性分布式数据集,基本数据处理单位,分布式的JAVA对象集合,RDD面向对象,对RDD的操作是面向函数式编程。RDD当数据量大的时候,频繁GC,IO序列反序列,资源消耗大。结合了RDD和DataFrame的优点,

2023-06-23 23:28:00 244

原创 数仓工程师理解复杂业务的思考方法论

第1种:针对数据处理流程的技术栈 做分工 -> 抽数、清晰sqoop、flume->建模 hive、impala、spark等 -> 集成,落地到CK、API(JAVA)-> 展示BI(Finereport、tableau)第2种: 围绕模型团队细节 需求拆解 业务、产品经理 、模型设计 数仓工程师、 数据质量 运维工程师 按角色分工。模型设计框架(业务过程驱动)还是在经典的三层数据模型架构下去进行,概念模型、逻辑模型、物理模型。1.数据 主数据、参考数据、交易数据、数据质量。技术人员易理解表间关系。

2023-06-23 17:48:13 675

原创 当spark涉及数据库操作时,如何减少spark运行的数据库连接数?

4.使用foreachpartition代替foreach,在foreachpartition内获取数据库连接。foreachpartition原理是 在每个分区中把iteritor传入func中,由func控制这批迭代。foreach原理是 在每个分区中在iteritor遍历一条然后调用的func处理。2.使用连接池,较少创建销毁的开销。

2023-06-22 12:27:47 222

原创 Spark共享变量的基本原理与使用

累加器是在driver中定义的变量,用于独立计算单个节点executor上的数据(副本),并将结果送给driver端进行最终聚合。广播变量是分布式只读变量,用于分布式计算需要给集群中各个节点分发相同的变量副本。共享变量分为两种:广播变量和累加器。

2023-06-22 12:18:13 276

原创 Spark

executor-cores —— 每个 executor 使用的内核数,默认为 1,官方建议 2-5 个,我们企业是 4 个 num-executors —— 启动 executors 的数量,默认为 2。元素:即数据项,数据集被划分成若干个较小的数据块,数据块包含一定数量的元素,元素是数据集中一个个独立的数据项,是处理的基本单元,spark对每个元素进行计算转换,并存储在分区中。分区:数据集被划分成若干个较小的数据块,即分区,每个分区可以在集群不同的节点上并行处理,并行度=分区数。

2023-06-18 23:15:00 1232

原创 JVM构成

2.java加载类的过程。

2023-06-18 23:09:52 609

空空如也

空空如也

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

TA关注的人

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