- 博客(96)
- 收藏
- 关注
原创 Linux
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux发行版本,但它们都使用了Linux内核。而客户机上,需要启动ssh客户端(种类众多,有windows上的,linux上的,安卓上的,mac上等)> 或 >> ,叫做重定向,作用:将左边命令的标准(错误)输出,重定向到右边所指定的文件。
2023-07-13 19:52:00
441
原创 模拟日志数据
Flume可以采集文件,socket数据包(网络端口)、文件夹、kafka、mysql数据库等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中 一般的采集、传输需求,通过对flume的简单配置即可实现;同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一. 补充:cloudera公司的主打产品是CDH(hadoop的一个企业级商业发行版)(安装部署、修改配置文件)
2023-07-10 18:13:46
1231
原创 Spark SQL 6-7
默认情况下,服务器会在 localhost:10000 上进行监听,我们可以通过环境变量(HIVE_SERVER2_THRIFT_PORT 和 HIVE_SERVER2_THRIFT_BIND_HOST)修改这些设置,也可以通过 Hive配置选项(hive. server2.thrift.port 和 hive.server2.thrift.bind.host)来修改。第三步:用最大销售额和统计好的每个货品的销售额join,以及用年join,集合得到最畅销货品那一行信息。
2023-07-06 11:19:11
843
原创 Spark Sql 4/5
这个阶段的优化器主要是基于规则的(Rule-based Optimizer,简称 RBO),而绝大部分的规则都是启发式规则,也就是基于直观或经验而得出的规则,比如列裁剪(过滤掉查询不需要使用到的列)、谓词下推(将过滤尽可能地下沉到数据源端)、常量累加(比如 1 + 2 这种事先计算好) 以及常量替换(比如 SELECT * FROM table WHERE i = 5 AND j = i + 3 可以转换成 SELECT * FROM table WHERE i = 5 AND j = 8)等等。
2023-07-05 16:26:07
884
原创 Spark SQL
3.3 DF数据运算操作3.3.1 纯SQL操作核心要义:将DataFrame 注册为一个临时视图view,然后就可以针对view直接执行各种sql临时视图有两种:session级别视图,global级别视图;session级别视图是Session范围内有效的,Session退出后,表就失效了;全局视图则在application级别有效;注意使用全局表时需要全路径访问:global_temp.people Scala// application全局有效df.create
2023-07-04 21:21:53
767
原创 Spark SQL
如果想让spark中集成的hive,看见你外部集群中的hive的表,只要修改配置:把spark端的hive的元数据服务地址,指向外部集群中hive的元数据服务地址;Sparksql加载“外部独立hive”的数据,本质上是不需要“外部独立hive”参与的,因为“外部独立hive”的表数据就在hdfs中,元数据信息在mysql中。// 如果程序能从classpath中加载到hive-site配置文件,那么它访问的hive元数据库就不是本地内置的了,而是配置中所指定的元数据库了。
2023-07-03 22:27:56
1666
原创 Spark SQL
在老的版本中,SparkSQL提供两种SQL查询起始点,一个叫SQLContext,用于Spark自己提供的SQL查询,一个叫HiveContext,用于连接Hive的查询,SparkSession是Spark最新的SQL查询起始点,实质上是。(开发封装平台很有用哦!Spark SQL可以将针对DataFrame/Dataset的各类SQL运算,翻译成RDD的各类算子执行计划,从而大大简化数据运算编程(请联想Hive),它可以理解为一个基于RDD数据模型的更高级数据模型,带有结构化元信息(schema),
2023-07-03 10:19:04
1406
原创 Spark17-18-19
DAG(Directed Acyclic Graph)叫做有向无环图,是的一系列RDD转换关系的描述,原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage,对于窄依赖,partition的转换处理在Stage中完成计算。窄依赖指的是父 RDD 中的一个分区最多只会被子RDD 中的一个分区使用,意味着父RDD的一个分区内的数据是不能被分割的,子RDD的任务可以跟父RDD在同一个Executor一起执行,不需要经过 Shuffle 阶段去重组数据。
2023-06-28 14:34:47
288
原创 Spark15-16
Executor内运行的并发任务共享JVM堆内内存,这些任务在缓存RDD和广播(Broadcast)数据时占用的内存被规划为存储(Storage)内存,而这些任务在执行Shuffle时占用的内存被规划为执行(Execution)内存,剩余的部分不做特殊规划,那些Spark内部的对象实例,或者用户定义的Spark应用程序中的对象实例,均占用剩余的空间。作为一个JVM进程,Executor的内存管理建立在JVM的内存管理之上,Spark对JVM的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。
2023-06-27 14:27:26
207
原创 spark12-13-14
触发一次Action,并且将附带的统计指标计算出来,可以使用Accumulator进行处理,Accumulator的本质数一个实现序列化接口class,每个Task都有自己的累加器,避免累加的数据发送冲突。在一个Executor可以同时运行多个Task,如果多个Task使用同一个共享的单例对象,如果对共享的数据同时进行读写操作,会导致线程不安全的问题,需求:在处理数据的同时,统计一下指标数据,具体的需求为:将RDD中对应的每个元素乘以10,同时在统计每个分区中偶数的数据。
2023-06-26 19:17:05
641
原创 Spark10-11
原因是spark的Task是在Driver端生成的,并且需要通过网络传输到Executor中,Task本身实现了序列化接口,函数也实现了序列化接口,但是函数内部使用到的外部引用不支持序列化,就会函数导致无法序列化,从而导致Task没法序列化,就无法发送到Executor中了。根据IP规则数据,计算出给定日志中ip地址对应的省份信息,由于IP地址的规则数据相对较小,所以可以将IP规则数据先广播出去,以后关联IP规则数据,就可以在内存中进行关联了,这样可以避免shuffle,提高执行效率!
2023-06-25 22:26:05
619
原创 Spark7-9
如果以后再次触发Action,使用到了以前shuffle的中间结果,那么就不会从源头重新计算而是,而是复用shuffle中间结果,所有说,shuffle是一种特殊的persist,以后再次触发Action,就会跳过前面的Stage,直接读取shuffle的数据,这样可以提高程序的执行效率。Shuffle的功能是将具有相同规律的数据按照指定的分区器的分区规则,通过网络,传输到指定的机器的一个分区中,需要注意的是,不是上游的Task发送给下游的Task,而是下游的Task到上游拉取数据。
2023-06-24 21:23:11
450
原创 阶段性复习 迭代器, Lambda表达式, 泛型, 单例模式
在实际使用中,Lambda 表达式通常应用于函数式接口、集合的遍历、线程的创建等方面,这些场景都需要传入一个函数作为参数。从而实现类型的约束和灵活性的提升。缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance没有创建对象,通过这些方法,遍历者可以顺序访问集合中的元素,而不需知道如何访问集合内部的数据结构。
2023-06-23 23:20:51
752
原创 Java类 继承
类是Java中最基本的代码单元,它是一种用户自定义的数据类型,用于封装数据和方法。类可以看作是一个模板或蓝图,描述了一类对象的属性和行为。在Java中,类的定义通常包括类名、类的成员变量、类的方法等。其中,类名是唯一的,并且必须与文件名相同。类的成员变量是描述类的属性的变量,可以是基本数据类型或其他类的对象。类的方法是描述类的行为的函数,可以访问类的成员变量和其他类的对象。我们可以通过创建对象来实例化一个类,即在内存中分配空间来存储该类的实例,并调用其方法来操作实例的属性和行为。
2023-06-22 21:31:41
2179
原创 Spark 6
一个RDD多次触发Action缓存才有意义,如果将数据缓存到内存,内存不够,以分区位单位,只缓存部分分区的数据,cache底层调用persist,可以指定更加丰富的存储基本,支持多种StageLevel,可以将数据序列化,默认放入内存使用的是java对象存储,但是占用空间大,优点速度快,也可以使用其他的序列化方式。如果Driver的内存相对较小,并且每个分区对应的数据比较大,通过网络传输的数据,返回到Driver,当返回到Driver端的数据达到了一定大小,就不收集了,即将一部分无法收集的数据丢弃。
2023-06-21 23:42:53
1375
原创 Spark 4/5
spark shell是spark中的交互式命令行客户端,可以在spark shell中使用scala编写spark程序,启动后默认已经创建了SparkContext,别名为sc。//spark写Spark程序,就是对抽象的神奇的大集合【RDD】编程,调用它高度封装的API。指定masterd地址和端口,协议为spark://,端口是RPC的通信端口。指定masterd地址和端口,协议为spark://,端口是RPC的通信端口。//往HDFS中写入数据,将程序的所属用户设置成更HDFS一样的用户。
2023-06-20 22:38:40
869
原创 Spark 1--3章简介,架构体系, 环境搭建
非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。自带了80多个高等级操作算子,并且允许在Scala,Python,R 的使用命令进行交互式运行,可以非常方便的在Spark Shell中地编写spark程序。Spark可以运行在Hadoop的YARN上面;有高度封装的API,算子丰富,并且使用了更先进的DAG有向无环图调度思想,可以对执行计划优化后在执行,并且可以数据可以cache到内存中进行复用,shuffle时,数据可以不排序。
2023-06-19 20:08:34
880
原创 Kafka架构
Kafka 中的索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引;每当写入一定量(由 broker 端参数 log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小 log.index.interval.bytes的值,对应地可以缩小或增加索引项的密度;通过offset可以快速定位到消息的存储位置;
2023-06-18 19:35:39
2337
原创 Scala(最终9/10/11章)
可以使用方法定义声明异常。因此,在 catch 子句中,越具体的异常越要靠前,越普遍的异常越靠后,如果把越普遍的异常写在前,把具体的异常写在后,在 Scala 中也不会报错,但这样是非常不好的编程风格。Scala 的异常的工作机制和 Java 一样,但是 Scala 没有“checked(编译期)”异常, 即 Scala 没有编译异常这个概念,异常都是在运行的时候捕获处理。(3)可以有多个 catch,分别捕获对应的异常,这时需要把范围小的异常类写在前面,把范围大的异常类写在后面,否则编译错误。
2023-06-17 15:49:50
912
原创 Scala--04
在scala里,curry化对类型推演也有帮助,scala的类型推演是局部的,在同一个参数列表中后面的参数不能借助前面的参数类型进行推演,curry化以后,放在两个参数列表里,后面一个参数列表里的参数可以借助前面一个参数列表里的参数类型进行推演。模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需要匹配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。定义一个匿名函数,并将它作为值赋给变量 fun。
2023-06-16 20:39:45
1086
原创 Scala--03
第6章 面向对象Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。Scala 中语法和 Java 不同,补充了更多的功能。6.1类和对象详解6.1.1组成结构构造函数: 在创建对象的时候给属性赋值成员变量:成员方法(函数)局部变量代码块6.1.2构造器每个类都有一个主构造器,这个构造器和类定义"交织"在一起类名后面的内容就是主构造器,如果参数列表为空的话,()可以省略scala的类有且仅有一个主构造器,要想提供更加丰富的构造器,就需要使用辅助构造器,辅助
2023-06-15 19:28:28
1525
原创 Scala--02
需求一:定义一个方法,传入一个1-9中任意的整数,如果这个整数是在1-9内,那么就打印九九乘法表中到第几行,如果传进去的不是一个1-9的数,打印:干啥呢,不好好听课,要传1-9的整数。在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递,函数可以当成值来进行传递,方法的参数和返回值都可以是函数。需求二:写一个二分查找的方法,传入一个数组,再传入一个整数,去查找这个整数是不是在这个数组中,如果在,就返回他的索引位置,如果不在,就返回:对不起,你查找的数不存在。嵌套分支不要超过 3 层。
2023-06-14 20:59:33
211
原创 Scala
访问Scala官网http://www.scala-lang.org/下载Scala编译器安装包,目前最新版本是3.1.3,但是目前大多数的框架都是用2.12.x编写开发的,Spark3.x使用的就是2.12.x,所以这里推荐2.12.x版本,下载scala-2.12.11.msi后点击下一步就可以了!Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。正常情况下,会scala的程序员都是会Java的,scala是基于java的,所以我们先搞清楚java,scala和jvm的关系。
2023-06-13 19:27:21
1234
原创 Hbase-- 03
regionServer其实是hbase的服务,部署在一台物理服务器上,region有一点像关系型数据的分区,数据存放在region中,当然region下面还有很多结构,确切来说数据存放在memstore和hfile中。如果Rowkey是按时间戳的方式递增,因为rowkey是按照字典顺序排序的,这样会出现大量的数据插入到一个reion中,而其他的region相对比较空闲从而造成热点问题,所以尽量不要将开头相同的内容作为rowkey造成热点问题,可以将时间戳反转后在作为rowkey。
2023-06-12 15:57:00
1772
原创 Hbase--02
中没有库的概念,说一个数据说的是哪一个名称空间下的那一张表下的哪一个行键的哪一个列族下面的哪一个列对应的是这个数据。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。操作Hbase系统DDL,对名称空间等进行操作。
2023-06-11 20:11:02
1097
原创 Hbase
Hbase 的扩展性主要体现在两个方面,一个是基于运算能力(RegionServer) 的扩展,通过增加 RegionSever 节点的数量,提升 Hbase 上层的处理能力;HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle,mysql等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS并不是取代关系,而是一种补充。在 HBase 的列族中,可以指定任意多的列,为空的列不占用存储空间,表可以设计得非常稀疏。
2023-06-10 19:56:57
1072
原创 Kafka关键原理加强及一些面试题
发文章是对自己所学的内容做个记录, 同时看看能否帮助更多需要帮助的人 .6.kafka关键原理加强6.1日志分段切分条件日志分段文件切分包含以下4个条件,满足其一即可:当前日志分段文件的大小超过了broker端参数 log.segment.bytes 配置的值。log.segment.bytes参数的默认值为 1073741824,即1GB当前日志分段中消息的最小时间戳与当前系统的时间戳的差值大于log.roll.ms或log.roll.hours参数配置的值。如果同时配置
2023-06-09 19:28:39
1477
原创 kafka 02
假设刚刚提交完一次消费位移,然后拉取一批消息进行消费,在下一次自动提交消费位移之前,消费者崩溃了,那么又得从上一次位移提交的地方重新开始消费,这样便发生了重复消费的现象(对于再均衡的情况同样适用)。如果消费者采用的是正则表达式的方式(subscribe(Pattern))订阅, 在之后的过程中,如果有人又创建了新的主题,并且主题名字与正表达式相匹配,那么这个消费者就可以消费到新添加的主题中的消息。在默认的方式下,消费者每隔5秒会将拉取到的每个分区中最大的消息位移进行提交。
2023-06-07 11:14:21
453
原创 kafka--多易杰哥讲解
每个分区的leader会维护一个ISR列表,ISR列表里面就是follower副本的Borker编号,只有跟得上Leader的 follower副本才能加入到 ISR里面,这个是通过replica.lag.time.max.ms =30000(默认值)参数配置的,只有ISR里的成员才有被选为 leader 的可能。echo ---------- kafka $i 停止 ------------消费位移,是组内共享的!kafka的消费者,可以记录自己所消费到的消息偏移量,记录的这个偏移量就叫(消费位移);
2023-06-06 20:25:25
531
原创 Redi事务,数据持久化
可以一次性的执行多个命令,redis的指令执行是单线程 : [sadd set get lpush lrange] ---> (统一执行),简而言之就是将一系列的命令一起打包。mysql中有binlog ,默认服务是关闭的, 开启binlog监控服务 , 当mysql中的数据发生变化, 记录在binlog中 , 我们可以监听binlog的变化, 确定数据的变化!Redis是基于内存的,如果不想办法将数据保存在硬盘上,一旦Redis重启(退出/故障),内存的数据将会全部丢失。
2023-06-05 20:10:36
433
原创 redis
3.2 value数据类型: 1. String3.2.1SET Plain TextSET key value [EX seconds] [PX milliseconds] [NX|XX]将字符串值 value 关联到 key 。 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。 可选参数 从 Redis 2.6.12 版本开
2023-06-04 17:09:38
978
原创 redis
在 Redis 2.4 版本中,过期时间的延迟在 1 秒钟之内 —— 也即是,就算 key 已经过期,但它还是可能在过期之后一秒钟之内被访问到,而在新的 Redis 2.6 版本中,延迟被降低到 1 毫秒之内。移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )。将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除。
2023-06-03 19:45:55
559
原创 Apache Doris
从 example_repo 中恢复备份 snapshot_1 中的表 backup_tbl 到数据库 example_db1,时间版本为 "2021-05-04-16-45-08"。这其实是一个空快照(因为刚创建的表是没有数据的),其目的主要是在 Backend 上产生对应的快照目录,用于之后接收从远端仓库下载的快照文件。备份操作是将指定表或分区的数据,直接以 Doris 存储的文件的形式,上传到远端仓库中进行存储。恢复操作需要指定一个远端仓库中已存在的备份数据,然后将这个备份的内容恢复到本地集群中。
2023-06-02 14:22:27
515
原创 zookeeper相关,安装,认识......
Zookeeper 是 Apache Hadoop 项目下的一个子项目, 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员.简称zk.Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。其本质上就是提供一种集中式信息存储服务.就是一个将数据存放到内存中,以树形结构存储数据的服务.我们根据其存储数据的特点可以实现分布式统一配置中心,分布式锁等功能,主要用于分布式应用程序的高性能协调,集群高可靠等.主要功能:配置管理分布式锁。
2023-06-01 20:38:29
814
原创 Doris的一些进阶用法
如果此时将分区粒度改为 MONTH,则系统会尝试创建范围为 ["2020-05-01", "2020-06-01") 的分区,而该分区的分区范围和已有分区冲突,所以无法创建。在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。p1 分区不再存在。在第二天,即 2020-05-30,会创建新的分区 p20200602: ["2020-06-02", "2020-06-03")
2023-06-01 19:19:10
4098
原创 【无标题】
产生这个问题的原因可·能是外部的恶意攻击,例如,对用户信息进行了缓存,但恶意攻击者使用不存在的用户id频繁请求接口,导致查询缓存不命中,然后穿透 DB 查询依然不命中。使用 Redis 缓存数据时,为了提高缓存命中率,尽量将所有热数据存在缓存中,可以将内存最大使用量设置为热点数据占用的内存量,然后启用allkeys-lru淘汰策略,将最近最少使用的数据淘汰。• 在各类会往mysql写入数据的系统中,植入更新缓存的逻辑(判断哪些表的数据是热点数据,那么就可以在这些表数据的更新操作逻辑中植入缓存刷新逻辑)
2023-05-31 22:15:41
502
原创 Apache Doris
娜娜 | 数学 | 56 | 84 | 94 | 234 | 2 || 宋宋 | 数学 | 86 | 84 | 64 | 234 | 3 || 孙悟空 | 数学 | 95 | 68 | 87 | 250 | 1 |
2023-05-30 20:03:29
938
原创 Apache Doris 数据导入导出 , Binlog Load
4.数据的导入导出按照使用场景划分点击图片可查看完整电子表格4.1使用 Insert 方式同步数据用户可以通过 MySQL 协议,使用 INSERT 语句进行数据导入。INSERT 语句的使用方式和 MySQL 等数据库中 INSERT 语句的使用方式类似。INSERT 语句支持以下两种语法:SQL对于 Doris 来说,一个 INSERT 命令就是一个完整的导入事务。因此不论是导入一条数据,还是多条数据,我们都不建议在生产环境使用这种方式进行数据导入。
2023-05-29 20:21:13
1560
原创 Apache Doris :Rollup 物化视图
而 bitmap_union_count 等于 bitmap_union 的结果求 count,所以如果查询中涉及到count(distinct) 则通过创建带 bitmap_union 聚合的物化视图方可加快查询。(10000,‘zss’,‘北京’,18,0,12345678910,'北京朝阳区 ',‘2017-10-01 07:00:00’),(10000,‘zss’,‘北京’,18,0,12345678910,'北京朝阳区 ',‘2017-10-01 08:00:00’),
2023-05-28 19:59:08
834
原创 Doris数据表模型
表中的列按照是否设置了 AggregationType,分为 Key(维度列)和 Value(指标列),没有设置 AggregationType 的称为 Key,设置了 AggregationType 的称为 Value。即使两行数据完全相同,也都会保留。虽然同样无法利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势(只读取相关列,而不需要读取所有 Key 列).一个人不能同时干两件事情,所以我加一个字段,让这个数据灌入的时间精确到时分秒,确保他组合起来的key都是唯一的,是不是就能搞定了?
2023-05-27 15:04:29
1368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人