自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 笔试常考知识点

本博客主要记录笔试中常考的一些知识点或者技巧。

2022-09-04 18:18:47 272 1

原创 Redis基本原理

Redis基本原理。

2022-07-11 15:26:25 4364

原创 Kafka原理

本次我们从Kafka的存储原理,以及Kafka高性能、高可靠特性来讲解Kafka的原理。

2022-06-23 20:05:19 472

转载 Kafka概述

Kafka是啥?用Kafka官方的话来说就是:大致的意思就是,这是一个实时数据处理系统,可以横向扩展、高可靠,而且还变态快,已经被很多公司使用。那么什么是实时数据处理系统呢?顾名思义,实时数据处理系统就是数据一旦产生,就要能快速进行处理的系统。对于实时数据处理,我们最常见的,就是消息中间件了,也叫MQ(Message Queue,消息队列),也有叫Message Broker的。这篇文章,我将从消息中间件的角度,带大家看看Kafka的内部结构,看看它是如何做到横向扩展、高可靠的同时,还能变态快的。消息中间件

2022-06-08 19:35:57 273

转载 Zookeeper概述

Zookeeper简介在Apache的Zookeeper官网上是这么定义Zookeeper的ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.翻译过来就是:ZooKeeper是一种中心化服务,用于维护配置信息、命名、提供分布式同步和组服务的。

2022-06-08 19:17:19 559

转载 ClickHouse概述

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

2022-06-08 12:15:34 498

转载 增量表、全量表和拉链表

增量表增量表每次记录的是周期内的新增数据,即每次将周期的新数据增加到原有的数据上。例如,注册用户表,按照天数进行分区,每次将最新一天的注册用户记录按照最新一天的分区加到注册用户表中。以页面访问数据表为例,假设该表从2020-06-01开始记录数据,按天更新,分区为dt。2020-06-01产生了三条访问数据,如下表:2020-06-02首页和商详页又产生了2条访问数据,该两条即为2020-06-02新增的数据,表更新后,dt分区2020-06-02新增2条数据(标红),此时数据表如下:以此类推,

2022-05-24 10:21:45 4590

转载 JVM类加载机制

类加载机制类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。JVM类加载过程分为五个部分:加载、验证、准备、解析、初始化。加载加载只是类加载的其中一个阶段,不表示整个类加载。加载的主要过程:通过类的完全限定名称获取定义该类的二进制字节流。将该字节流表示的静态存储结构转换为方法区的运行时存储结构。在堆中生成一个代表该类的 Class 对象,作为方法区中该类各种数据的访问入口。可以看到下面这张图,加载过程把类的字节码放到了方法区,使用

2022-04-11 23:52:14 5825

转载 JVM垃圾回收

垃圾回收垃圾回收主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。判断一个对象是否可被回收1. 引用计数算法为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。在两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。正是因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。publ

2022-04-10 22:20:36 1017

原创 JVM内存结构

JVM内存结构JVM的内存结构大致分为五个部分,分别是程序计数器、虚拟机栈、本地方法栈、堆和方法区。除此之外,还有由堆中引用的JVM外的直接内存。下面将展开讲解这五个部分。程序计数器程序计数器(Program Counter Register),用于记录下一条JVM指令的执行地址(如果正在执行的是本地方法则为空)。例如下图中的JVM指令,当我执行到地址为0的指令时,程序计数器就会存下下一条指令的地址,也就是地址3。要注意的是,程序计数器时线程私有的,每一个线程都有一个程序计数器,只有这么设计,

2022-04-07 14:55:03 14017 3

原创 JVM概述

JVMJVM指的是Java Virtual Machine,即Java虚拟机,它是Java二进制字节码的运行环境。JVM的优势:JVM使得Java程序的字节码文件能够跨平台运行,正所谓一次编写,到处运行。拥有自动内存管理和垃圾回收功能。有数组下标越界检查功能。使用虚方法表的机制实现了多态。JVM, JRE, JDK三者关系JVM(Java Virtual Machine):JVM只认识.class文件,能将class文件中的字节码指令识别并调用操作系统向上的 API 完成动作。所以说,J

2022-04-06 20:56:45 375

原创 Spark Shuffle

Spark ShuffleSpark Shuffle是发生在宽依赖(Shuffle Dependency)的情况下,上游Stage和下游Stage之间传递数据的一种机制。Shuffle解决的问题是如何将数据重新组织,使其能够在上游和下游task之间进行传递和计算。如果是单纯的数据传递,则只需要将数据进行分区、通过网络传输即可,没有太大难度,但Shuffle机制还需要进行各种类型的计算(如聚合、排序),而且数据量一般会很大。如何支持这些不同类型的计算,如何提高Shuffle的性能都是Shuffle机制设计的

2022-04-01 18:23:08 8229 1

原创 Leetcode贪心题

贪心贪心的思想就是通过局部的最优解得到全局的最优解。使用贪心的方法需要满足以下两个条件:贪心选择性贪心选择性指的是:一个优化问题的全局优化解可以通过局部优化选择得到。换句话说,当我们要解一个问题的时候,先做一步最优选择。这个问题被解决了一部分,然后再对剩下没解决的问题用迭代的方式继续使用上一步的方法做当前的最优选择。举个更简单的例子,一个人吃不下一个蛋糕,但是他想把尽可能吃得越甜越好,那么他第一口就会选择最甜的那部分吃,这个最甜的部分就是最优选择。吃完了第一口,他再从剩下的部分中选择最甜的一口,直到

2022-03-17 20:03:57 542

转载 数据库与索引

索引1. 为什么使用索引​ 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。​索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子还有:查字典,查火车车次,飞机航班等,下面内容看不懂的同学也没关系,能明白这个目录的道理就行了。 那么你想,书的目录占

2022-03-16 12:00:47 394

原创 Leetcode树相关题(dfs,bfs,bst)

dfsdfs指的是深度优先遍历,通常在树或者图的拓扑结构中使用,算法思想是每次遍历到一个节点时,会根据这个方向继续遍历该节点的子节点,深挖下去,直到下面挖的节点没有子节点时,再回到该上一个节点。dfs一般使用递归来实现,因为递归完美符合dfs的思想。如果不使用递归的话,就是用栈来实现其思想,因为本质上递归也是栈的一种应用。每次遍历节点时把节点压到栈中,然后继续把子节点压到栈中,直到没有子节点了就出栈。前中后序遍历 1 / \ 2 3 / \ \4 5 6层次

2022-03-12 23:13:25 818

原创 几种常见的排序方法

快速排序快速排序体现了分治的思想。每次决定一个数的最终位置,将其放置到正确位置后,再通过递归的方式将两头的数组按照同样的方式快速排序。需要注意的是,使用快速排序时,需要随机取那个决定数,这叫做随机选择比较子。因为当数组时已排好序的时候,指针只会从尾刷到头,快速排序的效率就会非常低,时间复杂度为O(n^2)。所以随机选择比较子后,将比较子和数组最左边的数交换,再做排序。这样的话就算数字已经排好序了,指针也不会从尾刷到头。快速排序是一种不稳定的算法。算法不稳定是指:在排序之前,有两个数相等,但是在排序结

2022-03-11 00:25:16 384

原创 Leetcode动态规划题

动态规划基本思想:问题的最优解如果可以由子问题的最优解推导得到,则可以先求解子问题的最优解,再构造原问题的最优解;若子问题有较多的重复出现,则可以自底向上从最终子问题向原问题逐步求解。使用条件:可分为多个相关子问题,子问题的解被重复使用。基本步骤:首先创建一个存放子问题的解的空间,并做初始化。将原问题尝试拆成多个子问题,并使得子问题的解可以求出原问题的解,这个通过子问题解求出原问题解的方程就叫做状态转移方程。根据状态转移方程自底向上得到原问题解。(附加)有时候存放子问题的解的空间可以优化得更

2022-03-10 00:22:58 614

原创 数据倾斜原理与解决方法

数据倾斜的概念数据倾斜这四个字经常会在学习MapReduce中遇到。所谓数据分区,就是数据分区分布因为数据本身或者分区方法的原因变得极为不一致,大量的数据被划分到了同一个区。由于Reducer Task每次处理一个区的数据,这导致Reducer Task处理有着大量数据的分区时任务繁重,而其他区分到的任务过于轻松,从而导致整体的任务效率大幅降低。“一个人累死,其他人闲死”。数据倾斜发生原理一般来说,数据倾斜会因为两种情况发生:数据的key非常少,极少数的key中记录了非常多的记录值。这属于相同ke

2021-12-14 19:49:29 5463

原创 Leetcode数组题思路

1. 排序数组中两个数字之和链接:排序数组中两个数字之和(简单)方法一:二分查找对numbers做低到高遍历,因为已经升序排序,所以可以对每次遍历数的右侧做二分查找。但是这个方法的时间复杂度也不算小,为O(nlogn)。public int[] twoSum(int[] numbers, int target) { for(int i = 0; i< numbers.length; i++){ int low = i+1, high = numbers.length-

2021-12-13 01:27:02 554

原创 Leetcode链表题思路

链表链表类的题有有很多相似的题目,主要可以使用递归和迭代两种方法。同时,在做题的时候也有一些小技巧,这里暂时列出几项新。递归求解;使用DummyHead(虚拟头结点,指没有信息的头结点作为初始节点)求解;创建一个临时结点,其next指向需要保存的结点,就像交换函数中的temp一个道理;(持续更新)下面是题解。1. 找出两个链表的交点。解答:两个链表虽然在分开处不等长,但相交后等长。假设链表A相交前的长度为a,链表B相交前的长度为b,相交后的长度为c,那么链表A的总长度为a+c,链

2021-12-05 22:09:00 291

原创 Flume基本原理及使用

Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume最主要是用在分布式系统中,例如读取服务器本地的磁盘数据,并将数据写入到HDFS中。对Flume的学习,最好就是结合官方文档进行学习。文档中有各种使用场景的配置,在开发的过程中,可以通过编写flume的工作配置文件来调用flume实现数据提取。Flume文档地址:http://flume.apache.org/FlumeUserGuide.html文档内有各种source, channel, sink, selecto

2021-11-23 23:24:54 3321

原创 OLAP多维分析

数据立方体(Data Cube)是一种多维模型的表现。当然,这并不是只这个数据只有三维,数据立方体可以被看成是具有多维度的数据。我们以一个例子来理解数据立方体 cube。上图是数据立方体的一个示例。每个方块表示着对应维度的销售额数据。数据立方体是一种多维数据模型,下面介绍一下多维模型的相关概念:• 多维数据模型:为了满足用户从多角度多层次进行数据查询和分析的需要而建立起来的基于事实和维的数据库模型,其基本的应用是为了实现OLAP(Online Analytical Processing)• 立方

2021-11-15 22:55:09 5484 1

原创 Hive的分区

Hive有分区表和分桶表这两个概念。分区表基本操作Hive的分区是指将存储的数据进一步细分,相当于一个表的分目录。一个表内有多个分区表。create table table_name (column_name column_type, ...) partitioned by (partition_column partition_type)//例如 按天进行分区create table dept_partition(deptno int, dname string, loc string)p

2021-11-10 16:19:38 1775

原创 Hive常用命令

Hive数据类型1. 基本数据类型2. 集合数据类型3. 案例(1) 假设某表有如下一行,我们用 JSON 格式来表示其数据结构。在 Hive 下访问的格式为:{ "name": "songsong", "friends": ["bingbing" , "lili"] , //列表 Array, "children": { //键值 Map, "xiao song": 18 , "xiaoxiao song": 19 } "address": { //结构 Struct, "

2021-11-09 18:48:23 2122 1

原创 Hive概述及其基本原理

Hive是一个基于Hadoop的数据仓库工具, 可以将结构化的数据文件映射为一张表, 并提供类似于SQL的查询功能。Hive本身并不存储和处理数据,更像是一个接口,存储由HDFS实现,处理数据由MapReduce实现。简单来说,Hive可以将sql语句转换为MapReduce任务, 在HDFS上进行数据查询。Hive的特点Hive采用类SQL开发,简单容易上手,避免了编写MapReduce的工作Hive执行延迟比较高,无法胜任实时的工作(OLTP),大多用于数据分析工作(OLAP)。Hive擅长

2021-11-07 18:23:43 3997

原创 Spark SQL概述及其基本用法

Spark SQL概述Spark SQL是什么Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。Spark SQL 的前身是Shark。Shark是基于 Hive 所开发的工具,它修改了下图所示的右下角的内存管理、物理计划、执行三个模块,并使之能运行在 Spark 引擎上。下图是 Hive和Shark的区别。但是,Spark在不断发展,但又太过依赖Hive,有了不少限制。于是,Spark团队提出了Spark SQL。SparkSQL抛弃

2021-11-01 22:50:32 6401

原创 Spark持久化

假设我们在对RDD进行转化的时候,需要用同一个RDD得到两个结果,如下面代码所示。 val rdd = sparkContext.makeRDD(List( ("a",1),("a",2),("c",3), ("b",4),("c",5),("c",6) ),1) val rdd1 = rdd.map(x => { (x._1, x._2 + 1) }) val reduceRDD = rdd1.reduceB

2021-10-31 17:37:23 299

原创 Spark的Stage到Task的生成过程

RDD任务的划分主要可以分为四块:Application、Job、Stage 和 Task。Application:初始化一个 SparkContext 即生成一个 Application;Job:一个 Action 算子就会生成一个 Job;Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1,因为最后一个Stage是ResultStage;Task:一个 Stage 中,最后一个 RDD 的分区个数就是 Task 的个数。Driver根据Stage内的最后RDD

2021-10-31 16:49:01 330

原创 Spark由宽依赖创建Stage过程源码解读

我们来探讨一下Spark创建Stage的源码过程。首先,下面我提供一个很简单的测试。我们将一个List经过了两次map和一次reduceByKey后的RDD用collect执行。object TransTest { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("TransTest") val sparkContext = new Spa

2021-10-31 01:47:51 255

原创 RDD算子

RDD 的操作分为转化(Transformation)操作和行动(Action)操作。转化操作就是从一个 RDD 产生一个新的 RDD,而行动操作就是进行实际的计算。转换操作和行动操作一般也被叫做转换算子和行动算子。RDD 的操作是惰性的,当 RDD 执行转化操作的时候,实际计算并没有被执行,只有当 RDD 执行行动操作时才会促发计算任务提交,从而执行相应的计算操作。RDD转换算子首先,我们需要理解一件事。这种算子所输入的往往是一个或多个函数,这个函数用来对转换算子所指定的数据做具体处理。例如://

2021-10-30 02:02:05 636

原创 Scala的匿名函数在map()上的简化

Scala的匿名函数简化Scala的匿名函数可以简化得非常方便。下面以spark中的map()做例子。//setMaster设置,local表示本地运行,[]内表示使用的核数,*表示全用,只有local的话表示单线程运算。//setAppName设置App的名称val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Map Example")val sc = new SparkContext(sparkConf)rdd

2021-10-29 13:11:54 445

转载 Spark总体架构和运行流程

Spark 总体架构Spark 运行架构如图 1 所示,包括集群资源管理器(Cluster Manager)、多个运行作业任务的工作结点(Worker Node)、每个应用的任务控制结点(Driver)和每个工作结点上负责具体任务的执行进程(Executor)。Driver 是运行 Spark Applicaion 的 main() 函数,它会创建 SparkContext。SparkContext 负责和 Cluster Manager 通信,进行资源申请、任务分配和监控等。Cluster Man

2021-10-22 16:31:54 1577

转载 Spark RDD

Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。本节将对 RDD 的基本概念及与 RDD 相关的概念做基本介绍。RDD 的基本概念RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本

2021-10-22 16:24:53 438

原创 Spark概述

SparkSpark 是加州大学伯克利分校 AMP(Algorithms,Machines,People)实验室开发的通用内存并行计算框架。Spark 在 2013 年 6 月进入 Apache 成为孵化项目,8 个月后成为 Apache 顶级项目。Spark 以其先进的设计理念,迅速成为社区的热门项目,围绕着 Spark 推出了 SparkSQL、SparkStreaming、MLlib 和 GraphX 等组件,逐渐形成大数据处理一站式解决平台。Spark相对于Hadoop的优势Hadoop的

2021-10-22 14:26:56 450

原创 数据仓库概述

数据仓库概述数据仓库(Data Warehouse),简称DW或DWH,是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反应历史变化(Time Variant)的数据集合,用于支持管理、运营决策。面对主题的:数据仓库里的数据面向主题作为大分类,例如用户分析主题、流量分析主题等等。这种主题往往也是我们处理数据的目的。集成的:数据仓库的数据不只是通常数据库表里写下的业务数据,也记录下了用户行为相关的埋点数据等,例如用户访问的日志

2021-10-20 20:45:47 1024

转载 RPC通信原理

RPC通信原理本地过程调用(RPC)RPC就是要像调用本地的函数一样去调远程函数。在研究RPC前,我们先看看本地调用是怎么调的。假设我们要调用函数Multiply来计算lvalue * rvalue的结果:int Multiply(int l, int r) {2 int y = l * r;3 return y;4 }5 6 int lvalue = 10;7 int rvalue = 20;8 int l_times_r = Multiply(lvalue, rvalue

2021-10-14 23:02:40 130

原创 leetcode整数题思路

001. 整数除法给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及truncate(-2.7335) = -2假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231−1 -231 <= a, b <= 231 - 1, b != 0

2021-10-14 22:28:00 369

转载 Yarn概述

YarnYarn是Hadoop的分布式资源调度平台,负责为集群的运算提供运算资源。如果把分布式计算机和单个计算机相对应的话,HDFS就相当于计算机的文件系统,Yarn就是计算机的操作系统,MapReduce就是计算机上的应用程序。Yarn的基本组成Yarn主要由四部分组成:ResourceManager, NodeManager, ApplicationMaster, Container。ResourceManagerResourceManager是整个集群资源的老大,负责整个集群的资源分配与调度

2021-10-11 23:36:37 4001

原创 MapReduce

MapReduceMapReduce是一种面向大规模数据处理的、分布式运算程序的编程框架。它通过将实际业务逻辑代码+自带默认组件的方式实现在Hadoop集群上的分布式计算。MapReduce的优势1. 易于编程MapReduce框架将整个分布式的过程都进行了封装,用户只需要根据自己的实际业务,对简单的接口进行实现,就可以达到非常理想的目的。2. 扩展性好若计算资源不足时,可直接添加机器来提高计算力。3. 容错率高如果正在运行的节点发生了意外,可以把任务交给集群中另一个节点上运行,这个调度方法

2021-10-01 22:20:31 469

原创 HDFS

HDFSHDFS(Hadoop Distribution File System, Hadoop分布式文件系统),是一种分布式文件系统,他能联合多个服务器节点组成一个集群,并管理这个集群提供各种高容错的、大规模的数据存储和读取等服务。HDFS的组成HDFS一般由Client, NameNode, SecondaryNameNode和多个DataNode组成。NameNodeNameNode可以说是整个HDFS的核心,大部分的操作都需要围绕着NameNode进行。NameNode管理着HDFS的

2021-09-26 01:23:04 297

空空如也

空空如也

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

TA关注的人

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