- 博客(23)
- 收藏
- 关注
原创 用户画像实践(一)
项目背景架构数据源:数据源通过sqoop同步到hbase中。标签存储:hbase:用于存储标签。mysql:存储标签元数据。es:标签检索。标签开发:采用spark引擎进行开发。一、数据导入将数据同步至hbase中。有以下几种方式。1、sqoop直接迁移。2现将数据迁移至hdfs中,然后通过hbase提供的importtsv工具将数据导入至hbase中,这里也有两种方式,默认的方式是直接put的形式,还有一种是bulkload的方式,将文件转换成hfile后再加载到hbase中。二、标签开发1
2022-03-02 21:26:50
2495
2
原创 leetcode-回溯算法(去重)
全排列 II给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。这个题目在全排列Ⅰ的基础上多了去重这一步。class Solution { boolean [] visited; public List<List<Integer>> permuteUnique(int[] nums) { visited=new boolean[nums.length]; Arrays.sort(nums).
2022-02-12 11:56:59
7353
原创 sparkOOM
解决sparkOOM定位oom发生的位置明确发生OOM的位置是在executor端还是driver端。先来看driver端dirver主要是负责任务的调度,参与少量的任务计算。大部分情况下如果发生driver端的oom应该是参与少量的任务计算导致的。少量的任务计算是什么呢?具体来说包括两部分:1、创建数据集,例如makerdd等方法创建rdd。2、收集计算结果,例如collect操作,讲所有结果数据拉取到driver端,这也是最容易造成driver端oom的。这里有一点比较容易被忽视,就是创
2022-02-08 11:36:32
1224
原创 HADOOP调优(1)
HADOOP调优配置HDFS多目录存储生产中可能某台机器磁盘空间不够了我们新加了磁盘。如上图所示,机器挂载了四块磁盘,但是hdfs默认的存储路径dfs.datanode.data.dir只会指向一个目录,我们需要加以调整。做以上修改即可。集群数据均衡1)不同机器间数据均衡start-balancer.sh -threshold 10该参数的意思是让每台机器的磁盘空间利用率不超过10%(尽量不要让namenode节点执行该命令)2)同一机器不同磁盘数据均衡1、生成均衡计划hdfs di
2021-11-16 19:14:57
1247
原创 极客时间Spark性能调优实战-学习笔记(1)
通用性能调优(一)引用链接一、应用开发三原则原则一:坐享其成充分利用 Spark 为我们提供的“性能红利”,如钨丝计划、AQE、SQL functions 等等。钨丝计划的优势?1)数据结构:采用紧凑的自定义二进制格式,存储效率高,避免的序列化反序列化。2)开辟堆外内存来管理对象,对内存的估算更加精确,且避免了反复执行垃圾回收。3)全阶段代码生成取代火山迭代模型。AQE的优势?AQE 可以让 Spark 在运行时的不同阶段,结合实时的运行时状态,周期性地动态调整前面的逻辑计划,然后根据再
2021-11-12 10:50:40
2134
原创 03Spring之Bean的生命周期(上)
bean的生命周期就是指,在spring中bean是如何创建,如何销毁的。Bean的生成过程1、生成BeanDefinition首先Spring会进行包的扫描,将beanDefinitition存入Set集合。spring扫描的过程大致如下。首先,通过ResourcePatternResolver获得指定包路径下的所有 .class 文件(Spring源码中将 此文件包装成了Resource对象)遍历每个Resource对象利用MetadataReaderFactory解析Resource
2021-09-24 08:43:03
103
原创 02-Spring原理学习(上)
在上一篇文章中我们大致了解了spring的一个工作流程,对spring的执行过程有了一个简单初步的了解。接下来让我们一步一步的加深对spring的了解吧在深入学习spring的原理之前,我们需要对spring中的一些概念进行介绍,以免以后小伙伴们在深入学习底层原理的过程中遇到很多新的名词搞得一头雾水。由于spring底层的实现涉及到了太多的名词、概念。我打算将这一部分拆为上下两部分,方便小伙伴们进行理解。BeanDefinitionBeanDefinition翻译过来就是bean的描述,也就是对b
2021-09-06 10:35:00
132
原创 Spring学习笔记(一)
第一篇先对Spring底层原理进行大致介绍。ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");UserService userService = (UserService) context.getBean("userService");userService.test();这段代码相信接触过Spring的同学都会非常熟悉。他就像spring里的hello world。但
2021-09-02 09:05:03
310
1
原创 String类的hashcode方法
String类的hashcode计算过程如上,主要就是对每一位进行遍历,用当前位数的ascll码值加上前面每位的累加和。为什么要用31?1)i31=i32-i=(i<<5)-i,位运算能加快运算速度2)质数产生hash冲突的概率较小。取的数太大的话又容易溢出。...
2021-08-27 15:36:04
1006
2
原创 Mysql学习-为什么表的数据删除后,表的大小不变?
平时的学习工作中,有的同学可能会发现一张表,删除了很多数据后,表的大小却没有改变,这是为什么呢?这里我们需要了解一下删除的过程。我们知道,innodb是按照页进行存储的。比如我们要删除R4这条数据,并不会真正释放这个空间,innodb引擎指挥将R4这条记录标记为删除,下次如果插入id再300-600之间的数据,该块区域便可以复用。若整个数据页都被删干净了,那么该数据页也能够得到服用,这时不再有id的限制,任意范围的id都可能复用此数据页。所以mysql delete操作仅仅进行了数据的逻辑上删除,
2021-08-25 14:42:32
910
原创 leetcode-罗马数字整数互转
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000一般情况下罗马数字中,右侧的数会小于等于左侧的数,但也包含几种特殊情况比如:I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。X 可以放在 L (
2021-08-25 09:46:57
133
原创 Mysql实战45讲学习笔记-为什么我的MySQL会“抖”一下
首先引入两个概念脏页:当内存数据页和磁盘数据页不一致时,内存页叫脏页。干净页:一致则为干净页。平时一些执行很快的更新操作,其实就是在写内存和日志。出现抖动(突然某个简单的sql执行的很慢)可能就是在执行flush刷脏页(更新磁盘中的旧数据)。刷脏页的四种情况1、redo log写满了,此时会暂停所有更新操作,推进cp(checkpoint点),重新腾出空间。2、内存满了。会淘汰一些数据页,若淘汰的是脏页,需要先flush掉脏页。3、当mysql服务空闲时,会自动进行脏页的flush。4、关闭
2021-08-24 15:14:52
96
2
原创 leetcode-会议室Ⅱ
该题是贪心算法的一个典型案例。题目给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。示例 1:输入:intervals = [[0,30],[5,10],[15,20]]输出:2核心算法思想如下:1、对每个会议按照开始时间进行排序(肯定要先考虑开始时间早的会议)2、初始化一个小根堆,用于存放会议的
2021-08-24 10:11:02
432
4
原创 leetcode-基本计算器Ⅲ
题目描述很简单,再基本计算器Ⅰ的基础上要再添加乘除运算可以考虑用栈+递归的思路解决。算法思路如下:从左往右依次遍历判断每个遇到的字符,如果是数字,则记录更新当前的数字,如果是运算符,则根据上一次的运算符将计算后的结果存入栈中,如果是左括号则代表遇到了子问题,递归调用函数,如果是右括号,break掉,进行栈内结果的计算。代码如下:`class Solution { private int index = 0; public int calculate(String s) {
2021-08-24 08:51:24
483
2
原创 leetcode-逆波兰表达式
示例 1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9逆波兰表达式:逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。逆波兰表达式主要有以下两个优点:去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 +
2021-08-23 16:33:12
134
原创 leetcode 基本计算器Ⅱ 栈练习
题目:基本计算器Ⅱ(medium)给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = “3+2*2”输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5分析题目,该题相对于基本计算器Ⅰ来说,引入了乘除,但是移除了括号,所以相对来说变得容易一些,只不过是需要先计算乘除法,同样采用栈进行数据记录,该计算乘除法时,弹出栈顶元素计算后再入栈。代码如下:class So
2021-08-23 13:59:14
229
原创 leetcode-基本计算器Ⅰ
题目:基本计算器Ⅰ(hard)给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。示例 1:输入:s = “1 + 1”输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23该题只包含+、-运算,所以不用考虑运算的优先级,从左往右计算即可,无非是遇到括号先计算括号里的。以上图为例,从左往右进行遍历即可。res代表从左往右的部分结果和。从左往右依次遍历知道遇到下一个左括号为止,这个过
2021-08-23 10:55:28
170
原创 zookeeper典型使用场景
分布式锁1、非公平锁分布式锁的加锁原理:每个要执行任务的客户端创建指定路径的节点,若创建成功,代表获取到了锁,便可以执行业务逻辑,然后删除节点,释放锁,并向其他监听此节点的客户端发送释放锁的通知,其他客户端再反复执行以上流程。此过程很容易看出是非公平锁,所有客户端监听同一个路径,节点释放锁后需要通知所有的客户端,压力较大。2、公平锁针对以上问题,我们可以采用公平锁来进行优化。公平锁的大致思路是,再zk集群上首先创建一个目录用于存放这些锁。这里就用/lock作为路径。然后客户端请求时会在此目录下创建
2021-08-23 08:37:27
91
原创 Zookeeper监听机制
@Slf4jpublic class ZookeeperClientTest {private static final String ZK_ADDRESS="192.168.109.200:2181";//链接地址private static final int SESSION_TIMEOUT = 5000;//超时时间private static ZooKeeper zooKeeper;//zookeeper客户端对象private static CountDownLatch coun
2021-08-22 09:29:14
117
原创 Zookeeper的ACL权限控制
zookeeper的权限控制可以控制某个节点的读写操作,保证数据的安全性。格式为权限模式:授权对象:权限信息。权限模式大体上分为两种,一种是范围验证,例如对某个ip地址段的用户进行权限控制。第二种是口令验证模式也叫digest认证,可以理解为使用账号密码进行限制,要想查询数据必须获得口令。可能还包含一种super模式,该模式为特殊的digest认证,特殊在可以获得对所有节点的权限。而digest仅仅针对某个节点。授权对象:即该权限赋予谁。范围验证的授权对象是某个ip地址段。digest或super方式则
2021-08-20 08:50:40
354
原创 RedisCluster原理分析
Redis Cluster 将所有数据划分为 16384 个 slots(槽位),每个节点负责其中一部分槽位。槽位的信息存储于每 个节点中。 当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息并将其缓存在客户端本地。这 样当客户端要查找某个 key 时,可以直接定位到目标节点。同时因为槽位的信息可能会存在客户端与服务器不 一致的情况,还需要纠正机制来实现槽位信息的校验调整。槽定位算法Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数
2021-08-19 15:55:29
450
1
原创 HIVE数据倾斜问题
hive数据倾斜解决方案map阶段主要考虑合并小文件,尽量让输入源的文件大小差不多,可以通过splitsize等参数来调节。join阶段对空值做随机值。on case when a.user_id is null then concat(‘xxxx’,rand() ) else a.user_id end = b.user_id;reduce阶段可以增加reduce的个数,分担压力。热点key加盐处理。把热点数据单独拿出来处理完再union all其他sql优化distinct可以用
2021-08-17 15:15:49
89
原创 Redis优化
Redis缓存设计与性能优化目录缓存设计开发规范与性能优化目录缓存设计缓存穿透 :缓存穿透是指查询一个不存在的数据,查询将穿过缓存层到达db层。造成缓存穿透的原因通常有两个:第一:自身业务代码问题。第二:一些恶意攻击或者爬虫。缓存穿透的解决方案如下:1、缓存空对象(伪代码如下)String get(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringU
2021-08-16 11:23:04
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人