自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ALS

SparkSQL处理完的数据会分成训练集的数据,一个是测试集的数据(用来验证模型是否是准确的)。离线系统推荐的思路:ALS中有train方法,会返回MatrixFactorizationModel。MatrixFactorizationModel中很多方法:你得到这个模型以后调用recomendProducts或recomendUsers方法,就能够得到想要的推荐结果。想要得到模型需要准备什么...

2019-12-31 14:02:35 663

原创 SQL

【1】film表字段说明film_id电影idtitle电影名称description电影描述信息category表字段说明category_id电影分类idname电影分类名称last_update电影分类最后更新时间film_category表字段说明film_id电影id...

2019-12-30 17:26:44 821

原创 剑指Offer刷题记录(完结撒花)

前言:在刷了LeetCode之后,再来刷剑指会感觉很简单~【1】输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。public class Solution { public int TreeDepth(TreeNode root) { if(root==null) return 0; ...

2019-12-25 16:54:24 545

原创 LeetCode——并查集

并查集的具体实现细节可参见:并查集及其应用,大多数的并查集的题目都可用一个板子解决。200.岛屿数量(可用DFS/BFS/并查集)399.除法求值

2019-12-25 14:30:21 555

原创 LeetCode——回溯

套路题46.全排列(通过设定一个visited[]数组,解放判断,无脑从头开始就行,无序考虑index)47.全排列II(与46不同,含有重复数组,首先需要进行排序,借助于有序数组对重复元素进行剪枝)39.组合总和(由于可以复用元素,因此将visited数组用index代替)40.组合总和II78.子集(index)90.子集II(排序,index+used[]数组)其他93.复原...

2019-12-24 16:34:44 307

原创 LeetCode——二分法

300.最长上升子序列(DP+二分查找->O(N)=NlogN)658.找到K个最接近的元素

2019-12-23 15:05:53 386

原创 LeetCode——分治

  “分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序)分治法所能解决的问题一般具有以下几个特征:1) 该问题的规模缩小到一定的程度就可以容易地解决2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性...

2019-12-22 17:32:11 302

原创 LeetCode——Stack

用栈处理括号嵌套问题385.迷你语法分析器341.扁平化嵌套列表迭代器括号问题20.有效的括号22.括号生成1003.检查替换后的词是否有效栈的设计155.最小栈225.用队列实现栈232.用栈实现队列下一个更大的元素496.下一个更大的元素I503.下一个更大的元素II739.每日温度单调栈(*该方法在笔试中经常用到)1124.表现良好的最长时间段(前缀和+单调栈...

2019-12-21 22:36:16 726

原创 LeetCode——BFS

DFS与BFS可结合起来理解,大多题目DFS与BFS均可解答。参见:LeetCode——DFS其他994.腐烂的橘子1091.二进制矩阵中的最短路径1162.地图分析787.K站中转最便宜的航班279.完全平方数127.单词接龙752.打开转盘锁...

2019-12-21 16:45:00 509

原创 ZooKeeper分布式锁

分布式锁是用来控制分布式系统各个节点同步访问共享节点的一种锁机制。排他锁获取锁  在ZooKeeper中通过使用一个ZNode节点来表示一个排他锁。多个客户端并发的在ZooKeeper上创建一个临时节点(临时节点保证获取到锁的客户端挂掉后可以自动释放),如/zs/zookeeperLock/lock。节点的唯一性保证只有一个客户端可以成功创建(成功获取锁)。其他没有成功创建节点的客户端,在/...

2019-12-21 00:09:44 393

原创 MapReduce Task数目划分

Map任务的个数  Mapper数据过大的话,会产生大量的小文件,过多的Mapper创建和初始化都会消耗大量的硬件资源。Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源。Mapper数量由什么决定?输入文件数目输入文件的大小配置参数  输入目录中文件数量决定多少个Map会被运行起来,应用针对每一个分片运行一个Map。对于每一个输入的文件会有一个map ...

2019-12-20 23:26:19 996

原创 LeetCode——DFS

岛屿问题200.岛屿数量(染色)130.被围绕的区域(染色边界岛屿,再遍历)695.岛屿的最大面积733.图像渲染463.岛屿的周长并查集547.朋友圈721.账户合并684.冗余连接494.目标和回溯491.递增子序列473.火柴拼正方形课程表207.课程表210.课程表II其他394.字符串解码743.网络延迟时间(Dijkstra)934.最短的桥(D...

2019-12-20 22:22:43 419

原创 MapReduce排序总结

【1】Hadoop默认的排序算法,只会针对key值进行排序,按照字典顺序排序【2】二次排序,在一个数据文件中,首先按照key排序。在key相同的情况下,再按照value大小排序。难度在于要同时参考两列的数据,可以将一行中的两列值封装到bean中。实现WritableComparable接口,重写compareTo进行排序,指定比较规则,实现二次排序,具体可参见博客【3】全局排序1、使用一个R...

2019-12-20 11:33:58 1031 1

原创 LeetCode——二叉树

右问题199.二叉树的右视图(BFS/DFS)116.填充每个节点的下一个右侧节点指针(BFS)117.填充每个节点的下一个右侧节点指针II(借助于First和Last指针)序列化二叉树449.序列化和反序列化二叉搜索树652.寻找重复的子树606.根据二叉树创建字符串N叉树589.N叉树的前序遍历590.N叉树的后序遍历429.N叉树的层序遍历559.N叉树的最大深度构...

2019-12-20 01:03:43 376

原创 Hbase RowKey设计以及HBase数据倾斜问题

  作为Nosql数据库的一员,HBase查询只能通过其rowkey来查询(rowkey用来表示唯一一行记录),HBase中的数据是按照rowkey的ASCII字典顺序进行全局排序的。HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。  HBa...

2019-12-19 12:46:25 854

原创 MapReduce工作流程分析

从整体上,MapReduce框架可以分为五个不同实体:客户端:提交 MapReduce jobYarn 资源管理器(ResouceManager):协调集群计算资源的分配。包含主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)定时调度器(Scheduler):从本质上来说,定时调度器就是一种策略。当 Client 提交一个任务的时候,它会根据...

2019-12-19 00:04:05 493

原创 LeetCode——链表

反转链表206.反转链表92.反转链表II快慢双指针234.回文链表(寻找中点用快慢双指针法)19.删除链表的倒数第N个节点876.链表的中间结点(快慢双指针)龟兔赛跑问题141.环形链表142.环形链表II160.相交链表两数相加2.两数相加445.两数相加II链表排序21.合并两个有序链表148.排序链表(归并排序)147.对链表进行插入排序143.重排链表...

2019-12-18 18:03:07 323

原创 客户端和NameNode、DataNode通信过程

client和NameNode之间是通过RPC通信DataNode和NameNode之间是通过RPC通信client和DataNode之间是通过简单的Socket通信以HDFS读写文件为例:  NameNode主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信...

2019-12-18 09:41:56 2881

原创 Stage划分源码分析

  当发现哪个stage报错或者执行特别慢,需要针对对应代码排查问题和性能调优,因此必须对stage划分算法很清晰,知道spark Application被划分成了几个job,每个job被划分成了几个stage,每个stage包括哪些代码。stage 划分思想:  由submitStage() 和getMissingParentStage() 组成。会从触发Action操作的那个RDD开始往前...

2019-12-17 18:05:57 631

原创 Spark任务调度策略/资源分配

Spark任务调度策略FIFO   FIFO(先进先出)方式调度Job,每个Job被切分成多个Stage。第一个Job优先获取所有可用资源,接下来第二个Job再获取剩余可用资源。(每个Stage对应一个TaskSetManager)优先级(Priority): 在DAGscheduler创建TaskSet时使用JobId作为优先级的值。FIFO调度算法实现如下所示private[spar...

2019-12-17 16:41:11 1412

原创 ZooKeeper保持一致性原理

   ZooKeeper作为分布式协调服务,很多分布式的应用都可以基于ZooKeeper来实现分布式锁,服务管理,服务发现,通知订阅等功能。在分布式环境下ZooKeeper如何实现数据的一致性?结构   ZooKeeper是在分布式环境下提供服务的,因此它必须要解决单点问题,因此ZooKeeper是一个主备的结构。ZooKeeper 存在leader,follower,observer三种角色...

2019-12-17 13:17:30 619

原创 ZooKeeper 回调机制

ZooKeeper Watch机制   一个ZooKeeper的节点可以被监控,包括这个目录中存储的数据的修改,子节点目录的变化,一旦变化可以通知设置监控的客户端。通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。ZooKeeper Watch机制具有如下特性:一次性的触发器(one-time trigger)  无论是服务端还是客户端,一旦一个Watcher被触发,Z...

2019-12-16 15:15:11 1603

原创 ZooKeeper:Connection Loss/Session Expired

会话  ZooKeeper客户端和服务端建立Socket长连接之后,服务器端创建一个session,生成一个全局唯一的会话ID(Session ID)。在SESSION_TIMEOUT时间内,服务器会确定客户端是否正常连接(客户端会定时向服务器发送心跳信息,服务器重置下次SESSION_TIMEOUT时间)。因此,在正常情况下,session一直有效,并且ZooKeeper集群所有机器上都保存这...

2019-12-16 10:46:13 1630

原创 Hadoop——HA

Hadoop 系统架构Hadoop1.x和Hadoop2.x 架构Hadoop 1.x之前,其官方架构如图所示:从图中可看出,1.x版本之前只有一个Namenode,所有元数据由唯一的Namenode负责管理,当这个NameNode挂掉时整个集群基本也就不可用。Hadoop 2.x的架构如图所示:2.x版本中,HDFS架构解决了单点故障问题,即引入双NameNode架构,同时借助共享存...

2019-12-15 20:33:22 420

原创 HDFS读写原理

HDFS写流程客户端向NameNode发出写文件请求检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。(注:WAL,write ahead log。先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,不用担...

2019-12-15 18:58:16 564

原创 Hadoop1.x与Hadoop2.x的区别

Hadoop1.x与Hadoop2.x的区别1、变更介绍  Hadoop2.x相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:HDFS的NameNodes可以以集群的方式布署,增强了NameNodes的水平扩展能力和可用性MapReduce将JobTracker中的资源管理及任务生命...

2019-12-15 16:27:18 2324

原创 Kafka高吞吐低延迟原理

Kafka基于磁盘做的数据存储,如何实现高性能、高吞吐、低延时?Reference:http://searene.me/2017/07/09/Why-is-Kafka-so-fast/ and https://queue.acm.org/detail.cfm?id=1563874.顺序读写  Kafka将消息记录持久化到本地磁盘中,实际上不管是内存还是磁盘,快或慢关键在于寻址的方式,磁盘分为...

2019-12-15 15:45:23 1510

原创 Zookeeper选举机制

Leader选举  Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进行Leader选举:服务器初始化启动服务器运行期间无法和Leader保持连接。服务器启动时期的Leader选举  若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初始化阶段,当有一台服务器Server1启动时...

2019-12-14 23:45:20 415

原创 MySQL索引

索引的实现原理  索引是一个排序的列表,存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度。因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。  MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,B+Tree索引,哈...

2019-12-14 22:31:47 453

原创 Spark 的工作流程

Spark工作流程中基本概念Application:应用程序Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContextExecutor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存...

2019-12-13 20:47:38 2550 1

原创 RDD、DataFrame与DataSet|Spark常用算子

  DataFrame是spark1.3.0版本提出来的,spark1.6.0版本又引入了DateSet的。DataFrame、DataSet是基于RDD的,三者之间可以通过简单的API调用进行无缝切换。RDD、DataFrame与DataSet区别RDDRDD一般和spark mlib同时使用RDD不支持sparksql操作DataFrame  在Spark中,DataFrame...

2019-12-12 23:29:44 956

原创 八皇后问题(回溯问题)

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。分析:其实该问题并不难,利用递归方法很容易解决。没放置一个皇...

2019-12-12 21:59:44 499

原创 Spark数据倾斜问题

数据倾斜现象分析以及解决方案讨论数据倾斜什么是数据倾斜数据倾斜的危害数据倾斜的原因排查数据倾斜数据倾斜的常见解决方法对于源数据聚合源数据过滤导致倾斜的key对于计算过程提高shuffle操作reduce并行度使用随机key实现双重聚合将reduce join转换为map joinsample采样倾斜key单独进行join使用随机数以及扩容表进行join数据倾斜什么是数据倾斜在执行shuffl...

2019-12-12 11:30:28 648

转载 Kafka生产者蓄水池机制

1.1、整体架构  从上面的架构图可以看出,生产的流程主要就是一个producer线程和一个sender线程,它们之间通过BatchQueue来获取数据,它们的关系是一一对应的,所以Kafka的生产过程都是异步过程。它的同步和异步指的是接收响应结果的模式是同步阻塞还是异步回调。同步和异步的生产者调用示例如下:异步生产模式: producer.send(new ProducerRecord&...

2019-12-11 21:18:34 776

原创 SparkStreaming

Spark Streaming 是基于Spark Core将流式计算分解成一系列的小批处理任务来执行。在Spark Streaming里,总体负责任务的动态调度是JobScheduler,而JobScheduler有两个很重要的成员:JobGenerator和 ReceiverTracker。JobGenerator 负责将每个 batch 生成具体的 RDD DAG ,而ReceiverTra...

2019-12-11 08:22:21 429

原创 Kafka 幂等性以及事务

生产者幂等性  Kafka的幂等性指在发送同一条消息时,在服务端只会被持久化一次,数据不丢不重。前提条件:Kafka的幂等性只能保证单会话有效,如果broker挂掉重启,幂等性就无效了,因为无法获取之前的状态信息幂等性不能跨多个Topic-Partition,只能保证单个partition的幂等性,如果需要跨分区实现幂等就只能借助事务性实现。幂等性用来解决什么问题?  幂等性用来解决...

2019-12-10 21:54:51 969

原创 线程池

线程池线程池是一种多线程处理形式,处理过程中将任务添加队列,然后在创建线程后自动启动这些任务,每个线程都使用默认的堆栈大小,以默认的优先级运行,并处在多线程单元中。如果某个线程在托管代码中空闲,则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后辅助线程的数目永远不会超过最大值。超过最大值的线程可以排队,但要等到其他线程...

2019-12-10 11:24:06 459

原创 列式存储与行式存储

列式存储与行式存储区别  目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。大数据时代大部分的查询模式决定了列式存储优于行式存储。两者的区别在于如何组织表:Ø Row-based storage storesatable in a sequence of rows.Ø Column-based storage storesatable i...

2019-12-10 00:08:38 1450

原创 LeetCode——数组

N数之和1.两数之和(HashMap一次遍历,时间复杂度O(N))15.三数之和(排序+双指针)16.最接近的三数之和(排序+双指针)18.四数之和(排序,递归+双指针)454.四数相加II(查找表)前缀和974.和可被K整除的子数组类Trie792.匹配子序列的单词数单调栈单调栈应用范围:求解数组中元素右边第一个比它小的元素的下标,从前往后,构造单调递增栈;求解数组中元...

2019-12-09 17:13:08 753

原创 MapReduce Shuffle及调优

关于MapReduce详细解释参见博客  Mapper的输出排序、然后传送到Reducer的过程,称为Shuffle,Shuffle过程是MapReduce的核心内容。Map端Shuffle  在Map端的Shuffle过程是对Map的结果进行分区、排序、分割,然后将属于同一分区的输出合并在一起并写在磁盘上,最终得到一个分区有序的文件。分区有序的含义是Map输出的键值对按分区进行排列,具有相...

2019-12-09 00:33:51 539

空空如也

空空如也

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

TA关注的人

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