- 博客(97)
- 收藏
- 关注
原创 Flink容错机制(CheckPoint)
Checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一个状态,保证应用流图状态的一致性。每个需要CheckPoint的应用在启动时,Flink的JobManager为其创建一个CheckpointCoordinator(检查点协调器),CheckpointCoordinator全权负责本应用的快照制作。
2023-05-01 19:24:48 271
原创 Coprocessor构建二级索引
使用Coprocessor,可以将业务代码封装,并在RegionServer上运行,也就是数据在那里,就在哪里跑代码,这样就节省了很大的数据传输的网络开销。可以静态实现(通过HBase配置文件),也可以动态完成(通过shell或Java API)2.2引用完整性约束:HBase并不支持关系型数据库中的引用完整性约束,但是我们可以通过使用Coprocessor增强这种约束。通过建立列值到rowKey的映射来建立二级索引,通过列值找到rowKey,再通过rowKey找到相应的需求值。jar包放在lib目录下。
2023-03-29 14:12:47 230
原创 Phoenix
Phoenix是以JDBC驱动方式嵌入到HBase,在部署时只有一个包,直接放在HBase的lib目录下。每个RegionServer节点上,都会有一个Phoenix协处理器来处理每个表、每个Region的数据,应用端通过Phoenix客户端与HBase客户端打交道,从而实现Sql化访问HBase数据。
2023-03-29 14:11:29 198
原创 HMaster工作机制
HMaster只维护表和region的元数据,而不参与表数据IO过程,HMaster下线仅导致所有元数据的修改被冻结(无法删除表,无法修改表的schema,无法进行Region的负载均衡,无法处理Region上下线,无法进行Region合并;Region的split可以正常进行,因为只需要HRegion Server参与),表的数据读写可以正常进行。4.扫描.META.region的集合,计算得到当前还未分配的HRegion,将他们放入待分配Region列表。1)master上线。2)master下线。
2023-03-29 14:10:33 259
原创 Region管理
当需要分配新的Region,并且有一个HRegion Server上有可用空间时,HMaster就给这个HRegion Server发送一个装载请求,把Region分配给这个HRegion Server。无论哪种情况,HRegion Server都无法继续为它的Region提供服务,此时HMaster会删除server目录下代表这台HRegion Server的znode数据,并将这台HRegion Server的Region分配给其它还活着的节点。2.HRegion Server挂了。
2023-03-29 14:07:08 155
原创 HBase热点(数据倾斜)问题
热带发生再大量的client直接访问集群的一个或极少数个节点(访问可能是读、写或者是其它操作)。大量访问会使热点region所在的单个机器超出自身承受能力,引起性能下降甚至region不可用,这也会影响同一个RegionServer上的其它region,由于主机无法服务其它region的请求。某个小的时间段内,对HBase的读写请求集中到极少数的Region上,导致这些region所在的RegionServer处理数据请求量骤增,负载量偏大,而其它的RegionServer明显空闲。
2023-03-29 13:29:16 476
原创 HBase的LSM结构
这些 Block 的 index 会被存储在 SSTable 的尾部,用于帮助快速查找特定的 Block。当一个 SSTable 被打开时,index 表会被加载到内存,然后根据 key 在内存 index 中进行一个二分查找,查到该 key 对应的磁盘的 offset 后,去磁盘把响应的块数据读取出来。LSM-Tree并不是一种严格的树结构,而是一种内存+磁盘的多层存储结构。MemTable是LSM-Tree在内存中的数据结构,只用于保存最新的数据,按照key排序。HBase使用调表来实现。
2023-03-29 08:23:49 291
原创 HBase和关系型数据库(传统数据库)的区别
数据类型:HBase只保存简单的字符穿类型,类型相对较少;关系型数据库有丰富的数据类型:int doubel String.数据操作:HBase只有简单的插入、查询、删除、清空等操作;关系型数据库有多种连接操作。存储模式:HBase是列式存储;关系型数据库是基于行式存储,表格结构的存储。数据维护:HBase的更新操作实际是插入数据;关系型数据库是替换修改。可伸缩型:HBase兼容性较高
2023-03-28 08:40:50 1291
原创 HBase的rowkey设计原则
100字节以内,8的倍数最好,可能的情况下越短越好。因为HFile按照key-value存储,过长的rowkey会影响存储效率;其次,过长的rowkey在memstore中较大,影响缓冲效果,减低检索效率。最后,操作系统大多为64位,8的倍数,充分利用操作系统的最佳性能。必须在设计上保证其唯一性,rowkey是按照字段顺序排序存储的。因此在设计rowkey的时候,要充分利用排序的特点,将经常读取的数据存储到一块,将醉经可能会被访问的数据放到一块。(1)生成随机数、hash、散列值。
2023-03-28 08:39:49 155
原创 HBase的rowkey设计原则
100字节以内,8的倍数最好,可能的情况下越短越好。因为HFile按照key-value存储,过长的rowkey会影响存储效率;其次,过长的rowkey在memstore中较大,影响缓冲效果,减低检索效率。最后,操作系统大多为64位,8的倍数,充分利用操作系统的最佳性能。必须在设计上保证其唯一性,rowkey是按照字段顺序排序存储的。因此在设计rowkey的时候,要充分利用排序的特点,将经常读取的数据存储到一块,将醉经可能会被访问的数据放到一块。(1)生成随机数、hash、散列值。
2023-03-28 08:36:40 215
原创 HBase MemStore刷写
hbase.regionserver.global.memstore.size.lower.limit(默认值 0.95), region 会按照其所有 memstore 的大小顺序(由大到小)依次进行刷写。直到 region server 中所有 memstore 的总大小减小到上述值以下。当 region server 中 memstore 的总大小达到 java_heapsize。
2023-03-28 08:35:01 161
原创 HBase读写数据流程
写流程:Client先访问zookeeper,获取hbase:meta表位于那个Region Server。访问对应的Region Server,获取hbase:meta表。根据写请求的namespace:table/rowkey,查询出目标数据位于那个Region Server指标的那个Region中。并将改table的region信息以及meta表的位置信息缓存在客户端的meta cache中,方便下次访问。与目标Region Server进行通讯。将数据顺序写入(追加)到WAL。将数据写
2023-03-28 08:33:47 190
原创 HBase和HDFS各自使用场景
5.业务场景简单,不需要关系数据库中很多特性(例如:交叉列、交叉表、事务、连接等)3.可以部署在许多廉价机器中,通过副本提高可靠性,提高容错和恢复机制。3.HBase不适用于与有join,多级索引,表关系复杂的数据模型。1.瞬间写入大量数据,数据库不好支撑或需要很高成本支撑的场景。2.数据需要长久保存,且量会持久增长到比较大的场景。4.大数据量且有快速随机访问需求。HBase是基于HDFS来存储。1.一次性写入,多次读取。
2023-03-28 08:30:58 148
原创 HBase架构
由于数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写如MemStore中。写缓存,由于HFile中的数据要求有序的,所以数据是先存储在MemStore中,排好序之后,等到达刷写时机写到HFile,每次刷写都会形成一个新的HFile。MemStore内存中的数据写到文件后就是StoreFile,StoreFile底层时以HFile的格式保存。
2023-03-28 08:30:16 159
原创 HBase和HDFS各自使用场景
5.业务场景简单,不需要关系数据库中很多特性(例如:交叉列、交叉表、事务、连接等)3.可以部署在许多廉价机器中,通过副本提高可靠性,提高容错和恢复机制。3.HBase不适用于与有join,多级索引,表关系复杂的数据模型。1.瞬间写入大量数据,数据库不好支撑或需要很高成本支撑的场景。2.数据需要长久保存,且量会持久增长到比较大的场景。4.大数据量且有快速随机访问需求。HBase是基于HDFS来存储。1.一次性写入,多次读取。
2023-03-28 08:28:11 209
原创 HBase介绍
2. HBase不支持表的关联操作,因此数据分析是HBase的弱项。常见的group by或order by只能通过编写MapReduce来实现。HBase时建立在HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写是NoSql数据库系统。1.架构设计复杂,且使用HDFS作为分布式存储,因此就存储少量数据,也不会很快。:主要需是数据分析,比如做报表。数据规模不大,对实时性要求高。3.HBase部分支持ACID(行级事务)。:单表超千万、上亿,且高并发。
2023-03-28 08:26:57 144
原创 Kafak如何保证数据的ExactlyOnce
重复数据的判断标准:具有相同的主键的消息提交时,Broker只会持久化一条。其中PID是kafka每次重启都会重新分配。所以幂等性只能保证在单分区 单会话内不重复。当出现幂等性的缺陷无法解决的时候,可以考虑使用事务。事务可以支持多分区的数据完整性,原子性。并且支持跨会话的ExactlyOnce处理语义,如果producer宕机重启,依旧能保证数据只处理一次。Producer无论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复。
2023-03-28 08:26:02 172
原创 那些情形会造成消息丢失
自动提交设置offset自动提交,当offset被自动定时提交时,数据还在内存中未处理,此时刚好线程kill,导致部分内存中数据丢失。生产者发送消息发送消息设置为fire-and-forget(发后即忘),它只管发送消息,不关系消息是否正确到达。消费者端先提交位移,但是消息还没消费就挂掉了,造成消息没有被消费
2023-03-27 08:12:17 100
原创 Kafka如何实现多线程消费
获取消息的线程可以是一个,也可以是多个,每个线程维护专属的KafkaConsumer实例,处理消息则由特定的线程池来做,从而实现消息获取与消息处理的真正解耦。一个现成话对饮一个KafkaConsumer实例,我们可以称之为消费线程。一个消费线程可以消费一个或多个分区中的消息,所有消费线程隶属同一个消费者组。2.消费者程序使用单或多线程获取消息,同时创建多个消费线程执行消息处理逻辑。1.线程封闭,即为每个线程实例化一个KafkaConsumer对象。
2023-03-27 08:10:21 1667
原创 Kafak如何清理过期文件
Kafka默认日志保存时间为7天,每五分钟检查一次是否超期,超期就清理数据。Kafka提供两种日志清理策略delete和compact。
2023-03-27 08:09:31 990
原创 Coordinator生命周期
Initialize:Coordinator处于初始化状态,Coordinator从Zookeeper中读取相关的消费者组数据,对于接受到消费者心跳或者加入组的请求都会返回错误。Stable:Coordinator处理消费者心跳请求,但是还未开始初试化generation,Coordinator正在等待消费者加入组的请求。Coordinator生命周期共有5种状态:Down,Initialize,Stable,joining,AwaitingSync。
2023-03-27 08:07:46 58
原创 为什么Kafak不支持读写分离
在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实现的是一种主写主读的生产消费模型。
2023-03-27 08:07:44 93
原创 Kafka组消费Rebalance机制
每个消费者组都有一个broker负责协调(group coordinator),各个消费者通过发送心跳的方式向组协调者同步状态,当有消费者一定时间没有给组协调者发送心跳或者有新的消费者加入到消费者组是,机会触发消费者组的再平衡。再平衡是指分区的所属权从一个消费者转移到另一个消费者的行为,它为消费者组具备高可用性和伸缩性提供保障,使我们可以既方便又安全地删除消费者组内的消费者或往消费者组内添加消费者。1.根据消费者组的ID对保存offset主题的分区数求模,计算出将那个分区的节点作为Coordinator。
2023-03-27 08:06:56 708
原创 Kafka文件存储机制
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储的就是Producer生产的数据。Producer上产的数据会被不断追加到该log文件末端,为了防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment(1G)包括:.index文件,.log文件和.timeindex等文件。稀疏索引可以减少内存的消耗,但是查询可能消耗更多时间。
2023-03-27 08:06:37 138
原创 Kafka的数据offset读取流程
连接Zk集群,从ZK中拿到对应topic的partition信息和partition的Leader的相关信息连接到对应Leader对应的brokerconsumer将自己已保存的offset发送给LeaderLeader根据offset等信息定位到segment(索引文件和日志文件)根据索引文件中的内容,定位到日志文件中该偏移量对应的位置读取相应长度的数据并返回给consumer。
2023-03-27 08:05:59 363
原创 Kafka的数据offset读取流程
连接Zk集群,从ZK中拿到对应topic的partition信息和partition的Leader的相关信息连接到对应Leader对应的brokerconsumer将自己已保存的offset发送给LeaderLeader根据offset等信息定位到segment(索引文件和日志文件)根据索引文件中的内容,定位到日志文件中该偏移量对应的位置读取相应长度的数据并返回给consumer。
2023-03-26 08:51:31 506
原创 Kafka怎么保证数据不丢失,不重复
唯一例外的情况是,我们在程序中给原本做不同功能的两个consumer组设置 KafkaSpoutConfig.bulider.setGroupid的时候设置成了一样的groupid,这种情况会导致这两个组共享同一份数据,就会产生组A消费partition1,partition2中的消息,组B消费partition3的消息,这样每个组消费的消息都会丢失,都是不完整的。Kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常能够被收到,其中状态有0,1,-1.
2023-03-26 08:50:16 1603
原创 Kafka架构
broker:一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。一个Kafka的集群通常由多个broker组成,这样才能实现负载均衡、以及容错broker是无状态的,它们通过Zookeeper来维护集群状态一个Kafka的broker每秒可以处理十万次读写,每个broker都可以处理TB消息而不影响性能Zookeeper:Zookeeper用来管理和协调broker,并且存储了Kafka的元数据(例如:有多少topic,part
2023-03-26 08:44:58 254
原创 Kafka介绍
每个分区只能由有个消费者组内的一个消费者消费,可以由不同的消费者组消费;:topic是消息的归类,一个topic可以有多个分区,每个分区保存部分topic数据,所有partition当中的数据全部合并起来,就是一个topic当中的所有数据。流式处理:Kafka不仅为每个流式处理框架提供了可靠的数据来源,还提供了一套流式处理类库,比如窗口、连接、变换和聚合等各类操作。Kafka是一个分布式,分区的,多副本的,多订阅者的日志系统,可以用于搜索日志、监控日志、访问日志。4.在kafka集群中,可以有无数的主题;
2023-03-26 08:44:01 298
原创 Hive Server2
概念HiveServer2(HS2)是一个服务端接口,使远程客户端可以执行对Hive查询并返回结果。目前基于Thrift RPC的实现是HiveServer的改进版本,并支持多客户端并发和身份验证。Hive与hiveServer的关系hiveserver是hive与client端的交换终端,client通过hiveserver构建查询语句,访问hadoop,并把数据通过hiveserver返回到client端hiveserver架构hiveserver的核心是基于Thrift,Thrift负责h
2023-03-26 08:25:25 420
原创 Hive有哪些保存元数据的方式,都有什么特点
内嵌模式:将元数据八寸在本地内嵌的derby数据库中,内嵌的derby数据库每次只能访问一个数据文件,不支持多会话连接。本地模式:将元数据保存在本地独立的数据库中(mysql),可以支持多会话连接。远程模式:将元数据保存在远程独立的mysql数据库中,避免每个客户端都要安装mysql数据库。
2023-03-26 08:23:28 252
原创 HQL:行转列,列传行
lateral view 用于和split、explode等UDTF一起使用,能够将一行数据拆成多行数据,再次基础上可以对拆分后的数据进行聚合。lateral view 首先为原始表的每行调用UDTF,UTDF会把一行拆分成一行或多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。collect_set(col):函数只接受基本数据类型,将某字段的值进行去重汇总,产生array类型字段。Split(str, separator):将字符串按照分割符切割,转化成字符array。
2023-03-26 08:23:07 221
原创 Hive的数据存储
以二进制方式存储,所以不可以直接读取,ORC文件也是自解析的,它包含许多元数据。ORC文件:保存在文件系统上的普通二进制文件,一个ORC文件可以包含多个stripe,每个stripe包含多条记录,这些记录按照列进行独立存储。parquet文件以二进制方式存储,所以不可以直接读取,和ORC一样,文件的元数据和数据一起存储。行存储文件(每一行就是一条记录),可以使用任意的分隔符进行分割,但无压缩,所以数据存储空间大。(1)ORC列式存储,有多种文件压缩方式,并且很高的压缩比。(2)可被各种文件系统识别的格式。
2023-03-26 08:17:12 972
原创 Hive的cluster by、sort by、distribute by、order by区别
*sort by:**不是全局排序,在数据进入reducer前完成排序。**distribute by:**类似MR中的partition ,进行分区,结合sort by使用。**order by:**对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。**cluster by:**当distribute by和sort by字段相同时,可以使用cluster by方式。排序只能时升序,不能指定排序规则。
2023-03-26 08:16:23 117
原创 Hive小文件过多如何解决
使用hive自带的concatenate命令,自动合并小文件concatenate 命令只支持 RCFILE 和 ORC 文件类型。使用concatenate命令合并小文件时不能指定合并后的文件数量,但可以多次执行该命令。当多次使用concatenate后文件数量不在变化,这个跟参数 mapreduce.input.fileinputformat.split.minsize=256mb 的设置有关,可设定每个文件的最小size。调整参数减少Map数量减少Reduce的数量reduce
2023-03-25 10:05:53 251
原创 Hive数据倾斜以及解决方案
发生数据倾斜的原因:1.任务重需要处理大量相同的key的数据。2.任务读取不可分割的大文件。6.确实无法减少数据量引发的数据倾斜。3.不可拆分大文件引发的数据倾斜。2.不同数据类型引发的数据倾斜。4.数据膨胀引发的数据倾斜。5.表连接时引发的数据倾斜。1.空值引发的数据倾斜。
2023-03-25 10:03:00 491
原创 Hive优化
针对hive中表的存储格式通常有orc和parquet,压缩格式一般使用snappy。因为hive底层使用MR计算架构,数据流是hdfs到磁盘再到hdfs,而且会有很多次,所以使用orc数据格式和snappy压缩策略可以降低IO读写,还能降低网络传输量,这样在一定程度上可以节省存储,还能提升hql任务执行效率;大表对大表:尽量减少数据集,可以通过分区表,避免扫描全表或者全字段。大表对小表:设置自动识别小表,将小表放入内存中去执行。并行执行,调节parallel参数;设置map、reduce参数;
2023-03-25 10:02:53 53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人