- 博客(92)
- 资源 (3)
- 收藏
- 关注
原创 Spark Streaming状态管理函数updateStateByKey和mapWithState
updateStateByKey可以在指定的批次间隔内返回之前的全部历史数据,包括新增的,改变的和没有改变的。由于updateStateByKey在使用的时候一定要做checkpoint,当数据量过大的时候,checkpoint会占据庞大的数据量,会影响性能,效率不高。如果不输入新的数据,会一直展示之前的结果查看checkpoint文件夹下,发现有很多类似于checkpoint-1542090065000的状态文件这些checkpoint文件都是小文件,对hdfs的压力很大,怎么解决呢?下文会讲。...
2022-08-12 18:13:28
10910
1
原创 SparkSql中的窗口函数
在Spark中,使用SQL或者DataFrame都可以操作窗口。窗口的使用有两个步骤1)定义窗口规则;2)定义窗口函数。在不同的范围内统计名次时,窗口函数非常得力。控制哪些行会被放在一起,会将同一个分组的数据放在同一台机器中处理窗口函数会针对每一个组中的每一条数据进行统计聚合或者rank,一个组又称为一个Frame分组由两个字段控制,Partition在整体上进行分组和分区而通过Frame可以通过当前行来更细粒度的分组控制"行号"来表示。通过某一个列的差值来表示。Partition。............
2022-07-20 16:37:42
1948
原创 Spark中RDD、DataFrame和DataSet的区别与联系
RDD代表弹性分布式数据集。它是记录的只读分区集合。RDD是Spark的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。与RDD不同,数据以列的形式组织起来,类似于关系数据库中的表。它是一个不可变的分布式数据集合。Spark中的DataFrame允许开发人员将数据结构(类型)加到分布式数据集合上,从而实现更高级别的抽象。ApacheSpark中的Dataset是DataFrameAPI的扩展,它提供了类型安全(type-safe),面向对象(object-oriented)的编程接口。...
2022-07-14 19:43:33
6925
原创 Spark中groupByKey() 和 reduceByKey() 和combineByKey()
在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDD,也是对每个key进行操作,但只生成一个sequence,groupByKey本身不能自定义函数,需要先用groupByKey生成RDD,然后才能对此RDD通过map进行自定义函数操作。 是对key的value进行merge操作,在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的
2022-07-03 18:16:57
2603
原创 详解RDD基本概念、RDD五大属性
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD是spark core的底层核心。Dataset:RDD 可以不保存具体数据, 只保留创建自己的必备信息, 例如依赖和计算函数;RDD 也可以缓存起来, 相当于存储具体数据。Distributed: RDD 支持分区, 可以运行在集群中。Resilient:RDD 支持高效的容错;RDD 中的数据即可以缓存在内存中
2022-07-02 18:31:45
12731
原创 详解Spark运行模式(local+standalone+yarn)
Spark 有多种运行模式:1.可以运行在一台机器上,称为 Local(本地)运行模式。2.可以使用 Spark 自带的资源调度系统,称为 Standalone 模式。3.可以使用 Yarn、Mesos、Kubernetes 作为底层资源调度系统,称为 Spark On Yarn、Spark On Mesos、Spark On K8S。 Driver 是 Spark 中的主控进程,负责执行应用程序的 main() 方法,创建 SparkContext 对象,负责与 Spark 集群进行
2022-06-30 19:36:36
4850
原创 Scala函数柯里化(Currying)
它是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。 简单理解就是改变函数的表达形式但其功能特性不变,柯里化其实是具有很高的实用性的。无论是在提高适用性还是在延迟执行或者固定易变因素等方面,柯里化技术都发挥着重要的作用。首先我们定义一个函数:那么我们应用的时候,应该是这样用:add(1,2)现在我们把这个函数变一下形:那么我们应用的时候,应该是这样用:add(1)(2),最后结果都一样是3,这种方式(过程)就
2022-06-26 10:18:57
499
1
原创 Scala之偏函数Partial Function
1.被包在花括号内没有match的一组case语句是一个偏函数2.偏函数是PartialFunction[A, B]的一个实例 - A代表输入参数类型 - B代表返回结果类型3.偏函数在scala中是一个特质给你一个集合 val list = List(1, 2, 3, "a", true) ,请完成如下要求:将集合list中的所有数字乘以10,并返回一个新的集合要求忽略掉非数字的元素,即返回的新的集合形式为 (10,20,30)上述每种方式都会打印:1020301.使用构建特质
2022-06-22 11:45:10
430
原创 详解scala中函数和方法
函数的定义可以有很多种,因此需要掌握最基本的定义方法:语法:val 函数名 :(参数类型)=>返回值类型 = (参数名称:参数类型)=>{函数体}1.2 简写语法val 函数名 = (参数名称:参数类型)=>{函数体}2.自定义函数3.匿名函数 没有名称的函数是匿名函数,也称为函数文字,或者函数字面量。一个类可以有自己的方法,scala中的方法和Java方法类似。但scala与Java定义方法的语法是不一样的。语法:“=”并不只是用来分割函数签
2022-06-17 12:32:19
1919
原创 如何使用Phoenix在HBase中创建二级索引
首先Phoenix是HBase之上的SQL工具,至于HBase是什么,我就不介绍了,你若不懂,就不需要往下继续看了。Phoenix旨在通过标准的SQL语法来简化HBase的使用,并可以使用标准的JDBC连接HBase,而不是通过HBase的Java客户端APIs。它可以让你执行所有的CRUD和DDL操作,比如创建一张表,插入数据以及查询数据。SQL和JDBC可以大大减少用户代码的开发,当然它也提供一些性能优化的手段,通过SQL和JDBC,你可以更方便的将HBase集成到你现有的系统或者工具。当Phoenix
2022-06-01 12:09:00
1399
原创 HBase的原理及运行机制
一、Hbase体系结构1.HBase客户端HBase客户端(Client)提供了Shell命令行接口、原生Java API编程接口、Thrift/REST API编程接口以及MapReduce编程接口。HBase客户端支持所有常见的DML操作以及DDL操作,即数据的增删改查和表的日常维护等。其中Thrift/REST API主要用于支持非Java的上层业务需求,MapReduce接口主要用于批量数据导入以及批量数据读取。HBase客户端访问数据行之前,首先需...
2022-05-27 18:51:35
2172
原创 HBase入门及列式数据模型简介
一、为什么出现NoSQL所谓NoSQL,即Not Only SQL的缩写,意思是不只是SQL。那么,为什么会兴起NoSQL数据库呢?因为WEB2.0以及大数据时代的到来,关系型数据库越来越不能满足需求。大数据、物联网、移动互联网和云计算的发展,使得非结构化的数据比例高达90%以上,关系型数据库由于模型不灵活以及扩展水平较差,在面对大数据时,暴露出了越来越多的缺陷。由此NoSQL数据库应运而生,更好地满足了大数据时代及WEB2.0的需求。面对WEB2.0以及大数据的挑战,关系型数据库在以下几个方面表现
2022-05-27 09:56:26
1921
原创 kafka的副本同步机制---关于高水位和Leader Epoch
一、何为高水位日常生活中,我们一般把什么叫做水位呢?经典教科书在时刻T,任意创建时间(Event Time)为T',且T'<=T的所有事件都已经到达,那么T就被定义为水位《Streaming System》水位是一个单调增加且表征最早未完成工作的时间戳如上图所示,标注为Completed的蓝色区域代表已经完成的工作,而标注为In-Flight的红色区域代表未完成(正在进行)的工作,两边的交界线就是水位线。 在kafka中,水位不是时间戳,而是与位置信息绑定...
2022-05-20 16:23:59
2220
1
原创 深入理解Kafka
一、概述Kafka是一个分布式的基于发布、订阅的消息系统,有着强大的消息处理能力,相比与其他消息系统,具有以下特性:快速数据持久化,实现了O(1)时间复杂度的数据持久化能力。 高吞吐,能在普通的服务器上达到10W每秒的吞吐速率。 高可靠,消息持久化以及副本系统的机制保证了消息的可靠性,消息可以多次消费。 高扩展,与其他分布式系统一样,所有组件均支持分布式、自动实现负载均衡,可以快速便捷的扩容系统。 离线与实时处理能力并存,提供了在线与离线的消息处理能力。正是因其具有这些的优秀特性而广泛用于
2022-05-19 16:08:04
578
原创 Kafka 是如何实现exactly once语义的?
一、消息语义概述在分布式系统中,构成系统的任何节点都是被定义为可以彼此独立失败的。比如在 Kafka中,broker可能会crash,在producer推送数据至topic的过程中也可能会遇到网络问题。根据producer处理此类故障所采取的提交策略类型,我们可以获得不同的语义:至少一次(at-least-once):消息不会丢失,但有可能被重复发送。如果producer收到来自Kafka broker的确认(ack)或者acks = all,则表示该消息已经写入到Kafka。但如果producer
2022-05-19 14:08:06
2227
原创 Kafka的高吞吐率是怎么实现的
一、Producer端消息优化Kafka支持使用异步批量的方式发送消息。当Producer生产一条消息时,并不会立刻发送到Broker,而是先放入到消息缓冲区,等到缓冲区满或者消息个数达到限制后,再批量发送到Broker。Producer端需要注意以下参数:acks参数:**表示Producer发送消息后是否需要等待broker的应答。目前提供三个取值,acks=0 表示发送消息后立即返回,不需要等待broker的确认;acks=1 表示消息被写入到主分区后,broker需给予应答,此时并不
2022-05-19 10:37:42
2153
原创 kafka快速入门---思考与实现
一、为什么需要消息引擎?由于工作中经常用到kafka,但是对kafka的一些内部机制不是很熟悉,所以最近在看kafka相关的知识,我们知道kafka非常经典的消息引擎,它以高性能、高可用著称。那么问题来了,它是怎么做到高性能、高可用的?它的消息是以什么样的形式持久化的?既然写了磁盘,为何速度还那么快?它是如何保证消息不丢失的...?带着这一系列的问题,我们来扒开kafka的面纱。首先我们思考这样一个问题:为什么需要消息引擎?为什么不能直接走rpc? 以一个订单系统为例:当我们下了一个订单的时候,应该
2022-05-18 17:54:49
218
原创 Redis缓存穿透、击穿、雪崩、预热、更新、降级
Redis是高性能的分布式内存数据库,对于内存数据库经常会出现下面几种情况,也经常会出现在Redis面试题中:缓存穿透、缓存击穿、缓存雪崩、缓存预热、缓存更新、缓存降级。本篇分别介绍这些概念以及对应的解决方案。一、缓存穿透缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。一言以蔽之:查询Key,缓存和数据源都没有,频繁查询数据源。比如用一个不存在的用户id获取用户信息,无论论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可
2022-05-11 16:32:16
555
原创 Redis Cluster的扩容和缩容
在redis-5中redis-trib.rb的功能被集成到了redis-cli中,大大简化了redis的集群部署,加快了进群部署的速度,也方便后期维护与扩容。以下简要介绍一下redis-cli在集群中的操作:环境:Ubuntu 18.04.2 LTSredis版本:redis-5.0.5集群架构:3master+3slave(后期添加1master+1slave)创建集群:1、新建所需目录,创建配置文件,启动6个redis实例进程(配置参数尽量保持一致)。在这里原始集群端口号为637
2022-05-11 11:02:01
1239
原创 Redis事务详解
若对事务概念不清楚,请先阅读“彻底理解MySQL四种事务隔离级别”这篇文章,链接如下:彻底理解MySQL四种事务隔离级别_YaoYong_BigData的博客-CSDN博客转入正题,结合关系型数据库的事务来看看Redis中事务有什么不同;Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会受客户端传入的命令请求影响。Redis事务的相关命令如下:MULTI:标识一个事务的开启,即开启事务; EXEC:执行事务中的所有命令,即提...
2022-05-10 15:55:34
7979
6
原创 彻底理解MySQL四种事务隔离级别
一、事务特性(ACID):原子性(Atomicity)指事务内所有操作要么一起执行成功,要么都一起失败(或者说是回滚);如事务经典转账案例:A给B转账,A把钱扣了,但B没有收到;可见这种错误是不能接受的,最终会回滚,这也是原子性的重要性。一致性(Consistency)指事务执行前后的状态一致,如事务经典转账案例:A给B互相转账,不管怎么转,最终两者钱的总和还是不变;持久性(Durability)指事务一旦提交,数据就已经永久保存了,不...
2022-05-10 10:51:59
2287
2
原创 Hive级联求和
create table t_salary_detail(username string,month string,salary int)row format delimited fields terminated by ',';load data local inpath '/root/hivedata/t_salary_detail.dat' into table t_salary_detail;A,2015-01,5A,2015-01,15B,2015-01,5A,2015-01,8
2022-05-05 20:07:43
399
原创 Hive开窗函数总结
一、介绍分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化!到底什么是数据窗口?后面举例会详细讲到!Window Function又称为窗口函数、分析函数。窗口函数与聚合函数类似,但是每一行数据都生成一个结果。聚合函数(比如sum、avg、max等)可以将多行数据按照规定聚合为一行,一般来讲聚集后的行数要少于聚集前的行数。但是有时我们想要既显示聚
2022-05-05 11:04:18
2572
原创 mysql中case when的用法
case when的使用情况有三种等值转换 范围转换 列转行操作1.等值转换设计数据库的时候总会把用户的性别用int存储('0’为女,'1’为男),但是怎么把它抓换成汉字显示呢?select name as '姓名',(case sex when 0 then '女' else '男' end) as '性别'from test.student;查询结果:2.范围转换按照用户成绩显示优(90分以上)、良(80分-90分)、及格(60分-80分)、不及格(60
2022-05-01 17:36:30
75790
3
原创 MySql中group by的用法
先来看下表1,表名为test:执行如下SQL语句:SELECT name from test GROUP BY name ;你应该很容易知道运行的结果,没错,就是下表2:可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:1.FROM test:该句执行后,应该结果和表1一样,就是原来的表。2.FROM test Group BY name:该句执行后,我
2022-05-01 16:00:08
1791
原创 Hive Lateral View + explode 详解
hive中的函数分为3类,UDF函数、UDAF函数、UDTF函数UDF:一进一出 UDAF:聚集函数,多进一出,类似于:count/max/min UDTF:一进多出,如explore()、posexplode(),UDTF函数的时候只允许一个字段百度explode()时,经常会出现lateral view + explode相关的文章,很少单独写explode()。分别了解ecplode() 与lateral view的各自作用很重要,不然过程都不知道实现的,换个UDTF函数就不会使用了。..
2022-04-28 18:54:49
13978
5
原创 Hive中URL解析函数
Hive中URL解析函数1、parse_url函数功能:parse_url函数是Hive中提供的最基本的url解析函数,可以根据指定的参数,从url解析出对应的参数值进行返回,函数为普通的一对一函数类型。代码示例:parse_url函数弊端:如果想要解析多个参数,需要使用多次函数2、parse_url_tuple函数可以实现同时解析多个参数单个lateral view使用:多个lateral view使用:Outer La...
2022-04-28 18:20:16
2591
原创 Android 消息处理机制
一、概述:1、我们先说下什么是Android消息处理机制?消息处理机制本质:一个线程开启循环模式持续监听并依次处理其他线程给它发的消息。简单的说:一个线程开启一个无限循环模式,不断遍历自己的消息列表,如果有消息就挨个拿出来做处理,如果列表没消息,自己就堵塞(相当于wait,让出cpu资源给其他线程),其他线程如果想让该线程做什么事,就往该线程的消息队列插入消息,该线程会不断从队
2018-01-20 15:40:31
623
原创 java静态方法、非静态代码块{}、静态代码块static{}
(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执
2016-09-07 21:53:50
708
原创 Android屏幕适配
屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等屏幕分辨率屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。屏幕像素密度屏幕像素密度是指每英
2016-09-06 16:56:46
899
原创 Android的事件分发与消费机制
一、Touch的三个重要方法在Android中,与触摸事件也就是 Touch 相关的有三个重要方法,这三个方法共同完成触摸事件的分发。public boolean dispatchTouchEvent(MotionEvent ev) :事件分发public boolean onInterceptTouchEvent(MotionEvent ev):事件拦截public boolea
2016-07-09 11:24:51
1590
原创 HashMap和HashTable的区别
1 )继承不同第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。public class HashMapK, V> extends AbstractMapK, V> implements Cloneable, Serializable {...}public class Hashtable
2016-07-04 16:09:15
483
原创 Java中如何遍历Map对象的4种方法
方法一 在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Map map = new HashMap();for (Map.Entry entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Valu
2016-07-04 14:40:00
621
原创 eclipse点击一个变量使相同名称变量高亮显示的方法
1、alt+shift+o2、选择:windows-> preferences->Java->Editor->Mark Occurences 选择最上的复选框,下面的就有很多了。 其中的Local variables就是变量的高亮显示。
2016-06-06 15:26:47
15907
原创 Intent 和 Intent 过滤器
Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:启动 Activity:Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任
2016-05-19 11:38:10
683
原创 java中FileInputStream,FileReader等的区别
FileInputStream,FileReader C语言只需要一个File*就可以了,与C不同,java有一系列流类型,其数量超过60种。类库的设计者声称:“有足够的理由为用户提供丰富的流类型的选择:这样做可以减少程序的错误。”例如,在C语言种,许多人认为“将输出流写入一个只读模式的文件”是很常见的错误。(事实上,这并不常见。)我们认为在C++语言中,流接口设计者避免程
2016-05-18 17:36:19
924
原创 横竖屏切换时Activity 的生命周期
此时的生命周期跟清单文件里的配置有关系。1.不设置Activity 的android:configChanges 时,切屏会重新调用各个生命周期默认首先销毁当前activity,然后重新加载。2.设置Activityandroid:configChanges="orientation|keyboardHidden|screenSize"时,切屏不会重新调用各个生命周期,只会执行onCo
2016-05-09 18:42:52
599
原创 java中静态方法中调用非静态方法
我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法。 其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其引用变量调用它的非静态方法。class Test2{
2016-05-08 16:53:23
42181
2
原创 Java中静态变量与静态方法的继承
class A { static int a = 1; static int b = 2; public static void printA() { System.out.println(a); } public static void printB() { System.out.println(b); }}
2016-05-08 15:54:06
868
原创 equals 与hashCode 的关系
在研究这个问题之前,首先说明一下JDK 对equals(Object obj)和hashcode()这两个方法的定义和规范:在Java 中任何一个对象都具备equals(Object obj)和hashcode()这两个方法,因为他们是在Object 类中定义的。equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。hashc
2016-05-06 12:16:11
676
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人