自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(319)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 存储技术架构演进

和传统的集中式系统相比,分布式系统的整体性价比更高,同时凭借其扩展性,可以很好的满足大规模数据存储和处理场景的需求,可以很好的解决高并发场景下性能瓶颈问题。

2024-01-29 23:03:53 390

原创 HDFS文件系统之存储优化篇1

首先介绍一下EC,EC是Erasure coding的简称,是一种编码容错技术。HDFS 默认的EC编码为RS-6-3-1024,若应用此编码相比默认的三副本大概可以节省一半的成本。HDFS数据的布局方式分为两种,一种是连续布局,如果出现问题EC修复粒度太大,容易造成资源瓶颈问题,第二种是条行布局,EC修复粒度较小,修复成本低。

2024-01-29 08:47:28 252

原创 数据湖技术之应用场景篇

随着数据湖技术的不断成熟与稳定,后续会在越来越多的应用场景中帮助到业务解决实际问题,同时在降本增效方面的作用也会越来越明显

2024-01-28 21:40:12 868

原创 数据湖技术之平台建设篇2

数据湖技术之平台建设:一站式湖仓服务平台的相关管理能力、小文件相关处理

2024-01-28 20:53:34 386

原创 数据湖技术之平台建设篇1

融合数据湖技术,形成湖仓一体化平台,平台建设相关能力介绍。

2024-01-28 10:00:42 941

原创 数据湖技术之核心特性篇

湖仓一体化可以很好的去帮忙业务进行架构升级以及解决一些核心的痛点问题,而且在降本增效方面也有很大的优势

2024-01-28 08:27:04 217

原创 数据湖技术之发展现状篇

数据位置信息索引查找对于hudi 索引主要分为两大类:**非全局索引:**索引在查找数据位置信息时,只会检索当前分区的索引,索引只保证当前分区内数据做upsert。如果记录的分区值发生变更就会导致数据重复。**全局索引:**顾名思义在查找索引时会加载所有分区的索引,用于定位数据位置信息,即使发生分区值变更也能定位数据位置信息。这种方式因为要加载所有分区文件的索引,对查找性能会有影响(hbase 索引除外)。spark 索引实现主要有如下几种:布隆索引(BloomIndex),全局布隆索引.

2024-01-27 23:20:08 578

转载 zookeeper的ACL权限控制

ACL:Access Control List访问控制列表1. 简介0.概述ACL 权限控制,使用:scheme:id:perm来标识,主要涵盖 3 个方面:  权限模式(Scheme):授权的策略  授权对象(ID):授权的对象  权限(Permission):授予的权限其特性如下:  ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限  每个znode支持设置多种权限控制方案和多个权限  子节点不会继承父节点的权限,客户端无权访问某节点,但...

2021-11-10 14:02:36 607

转载 图文带你理解 Apache Iceberg 时间旅行是如何实现的?

为了更好的使用 Apache Iceberg,理解其时间旅行是很有必要的,这个其实也会对 Iceberg 表的读取过程有个大致了解。不过在介绍 Apache Iceberg 的时间旅行(Time travel)之前,我们需要了解 Apache Iceberg 的底层数据组织结构。Apache Iceberg 的底层数据组织我们需要先了解一下 Apache Iceberg 关于底层数据结构的一些术语。Apache Iceberg 用到的一些术语:数据文件(data files)数据文件(

2021-09-14 14:16:24 733

转载 Hive 的事务支持

Hive 开始支持事务,是在 Hive 0.14 之后。HDFS 的文件,只能允许新建,删除,对文件中的内容进行更新,不允许单条修改。Hive 的文件存储是基于 HDFS 文件存在的,所以原则上不会直接对 HDFS 做文件内容的事务更新,只能是采取另外的手段来完成。即用 HDFS 文件作为原始数据,用 delta 文件作为操作日志的记录。当访问 Hive 数据时,根据 HDFS 文件和 delta 文件做合并,查询最新的数据。综上,Hive 支持事务的前提是,初始化数据和增量操作,分开存储。这种存储方

2021-09-10 14:17:28 1750

转载 HBase——Replication(复制)原理

前言Replication:复制,指的是持续的将同一份数据拷贝到多个地方进行存储,是各种存储系统中常见而又重要的一个概念,可以指数据库中主库和从库的复制,也可以指分布式集群中多个集群之间的复制,还可以指分布式系统中多个副本之间的复制。它的难点在于数据通常是不断变化的,需要持续的将变化也反映到多个数据拷贝上,并保证这些拷贝是完全一致的。通常来说,数据复制到多个拷贝上有如下好处: 多个备份提高了数据的可靠性 通过主从数据库/主备集群之间的复制,来分离OLTP和OLAP请求

2021-06-22 14:21:05 1158

转载 hbase hbck及region RIT处理

hbase hbck主要用来检查hbase集群region的状态以及对有问题的region进行修复。hbase hbck :检查hbase所有表的一致性,如果正常,就会Print OKhbase hbck -details:检查hbase所有表的一致性,并且输出详细报告。hbase hbck table1 table2:指定检查某些表,可以输入多个表,用空格隔开。HBCK - HBCK检查什么?(1)HBase Region一致性集群中所有region都被assign,而..

2021-05-18 15:40:13 840

转载 linux查看服务器配置(CPU、物理核数、逻辑核数、内存)

总核数 = 物理CPU个数 X 每颗物理CPU的核数总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数1、查看物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l或grep 'physical id' /proc/cpuinfo | sort -u | wc -l2、查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep "cpu cores"|

2021-05-14 11:09:47 2419

转载 OpenJDK ZGC 源码分析(二)触发GC的时机

1. 简介ZGC的回收周期触发时机与其他GC算法略有不同,VM内部有个线程轮询定期检查是否满足开始回收的条件,如果满足则开始回收。ZGC提供四种策略,其中一种满足条件即触发回收:rule_timer,定时策略,距离上次GC时间超过interval即触发GC rule_warmup,VM启动后,如果从来没有发生过GC,则在堆内存使用超过10%、20%、30%时,分别触发一次GC,以收集GC数据 rule_allocation_rate,根据对象分配速率决定是否GC rule_proactiv

2021-03-31 11:24:41 653

转载 OpenJDK ZGC 源码分析(一)概览

1. 前言G1是JDK中最新最成熟的垃圾回收器,其稳定性和性能得到了广泛的认可。但是,一方面随着硬件的发展,堆空间越来越大,几十GB、上百GB的内存在生产环境逐渐出现;另一方面,对于停顿时间的需求日益严苛,从最初的秒级到百毫秒级,再到十毫秒级和毫秒级。G1对于这种情况逐渐力不从心,下一代低延迟垃圾回收器主要有ZGC和Shenandoah。本文将详细介绍ZGC相关原理。2. 历史Oracle在2017年将ZGC贡献给OpenJDK社区。在JDK 11中作为实验性功能加入(JEP 333: ZG

2021-03-31 10:50:31 399

转载 ParNew收集器复习

以下摘自:《深入理解Java虚拟机:JVM高级特性与最佳实践》第3章垃圾收集器与内存分配策略ParNew收集器其实就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、 -XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、对象分配规则、回收策略等都与Serial收集器完全一样,实现上这两种收集器也共

2021-02-22 15:41:28 176

转载 JVM 中的 GC Roots 和可达链

什么是GC Root 对象?简单讲,凡是被常量、静态变量、全局变量、运行时方法中的变量直接引用的对象,原则上不能被GC释放。JVM中对内存进行回收时,需要判断对象是否仍在使用中,可以通过 GC Roots Tracing辨别。GC Roots 定义:通过一系列名为”GCRoots”的对象作为起始点,从这个节点向下搜索,搜索走过的路径称为ReferenceChain,当一个对象到GCRoots没有任何ReferenceChain相连时,(图论:这个对象不可到达),则证明这个对象不可用。

2021-02-17 23:14:07 477

转载 【Hadoop学习】HDFS 短路本地读

Hadoop版本:2.6.0背景在HDFS中,通常是通过DataNode来读取数据的。但是,当客户端向DataNode请求读取文件时,DataNode就会从磁盘读取该文件并通过TCP socket将数据发送到客户端。所谓“短路”是指旁路DataNode来读取文件,也就是说,允许客户端直接读取文件。很明显,这种情况只在客户端与数据放在同一地点(译者注:同一主机)时才有可能发生。短路读对于许多应用程序会带来重大的性能提升。创建要配置短路本地读,你需要使能libhadoop.so。详见..

2021-02-01 23:10:39 653

转载 HDFS 本地短路读取 Short-Circuit Local Reads

背景在 HDFS 中,读操作通常要经过 DataNode。因此,当客户端请求 DataNode 读取文件时,DataNode 从磁盘读取该文件并通过 TCP 套接字将数据发送给客户端。所谓的“短路”读取就是绕过 DataNode,允许客户端直接读取文件。当然,这只有在客户端与数据共存的情况下才可能实现。短路读取为许多应用程序提供了实质性的性能提升。设置要配置短路本地读操作,您需要启用libhadoop.so,有关启用此库的详细信息,请参阅https://hadoop.apache.org/doc

2021-02-01 22:43:09 527

转载 HBase MemStore简介

MemStore 是 HBase 非常重要的组成部分,MemStore 作为 HBase 的写缓存,保存着数据的最近一次更新,同时是HBase能够实现高性能随机读写的重要组成。MemStoreHBase Table 的每个 Column family 维护一个 MemStore,当满足一定条件时 MemStore 会执行一次 flush,文件系统中生成新的 HFile。而每次 Flush 的最小单位是 Region。MemStore的主要作用: 更新数据存储在 MemStore 中,使

2021-01-24 18:41:42 672 1

原创 HBase中LSM-tree的应用

前言传统的关系型数据库一般使用B树作为索引结构,而在大数据场景下,比较多的存储引擎使用LSM-tree这种数据结构,比如hbase、kudu等,本篇文章介绍下HBase中LSM-tree的具体应用以及针对读性能的具体优化机制(compaction、应用BloomFilter以及BlockCache),HBase中的LSM应用我们知道LSM树的存储结构由2部分组成,一部分是内存部分,一部分是磁盘部分。在hbase实现中,内存部分采用跳跃表来维护一个有序的KeyV...

2020-12-17 23:50:08 795

原创 LSM-Tree介绍

前言2006年的OSDI有两篇Google的论文,分别是BigTable和Chubby。Chubby是一个分布式锁服务,基于Paxos算法;BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapReduce并称为谷歌技术"三宝"。Google发布的BigTable这篇论文的一个很有价值的方面是它使用

2020-12-16 23:03:28 13680

转载 LSM Tree存储组织结构介绍

LSM Tree(Log Structured Merge Trees)数据组织方式被应用于多种数据库,如LevelDB、HBase、Cassandra等,下面我们从为什么使用LSM tree、LSM tree的实现思路两方面介绍这种存储组织结构,完成对LSM tree的初步了解。存储背景回顾LSM tree相较B+树或其他索引存储实现方式,提供了更好的写性能。究其原因,我们先回顾磁盘相关的一点背景知识。顺序操作磁盘的性能,较随机读写磁盘的性能高很多,我们实现数据库时,也是围绕磁盘的这点特性进行

2020-12-15 22:24:27 370

转载 跳跃表(skiplist)

跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,从而可以实现更高的并发性。正因为这些优点,跳跃表广泛使用于KV数据库中,诸如Redis、LevelDB、HBase都把跳跃表作为一种维护有序数据集合的基础数据结构。众所周知,链表这种数据结构的查询复杂度为O(N),这里N是链表中元素的个数。在已经找到要删除元素的情况下,再执行链表的删除操作其实非常高效,

2020-12-14 22:27:05 3435

原创 聊聊java的Fork/Join框架

背景某日线上hdfs集群namenode状态切换出现长时间延迟情况,排查zkfc log发现有调用namenode 的切换状态的rpc方法超时的报错。通过打印切换过程时的火焰图发现几乎所有的调用时间都花费在了递归更新namespace quota上。梳理具体的代码逻辑,namenode端处理zkfc transitionToActive切换状态请求,需要保证所有的editlog已加载完成,并调用递归方法updateCountForQuotaRecursively更新整个fsimage下的配额和使用量信.

2020-12-13 01:08:12 234

原创 浅谈copy-on-write

写入时复制(Copy-on-write)是一个被使用在程序设计领域的最佳化策略。其基础的观念是,如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,以避免被修改的资源被直接察觉到,这过程对其他的呼叫只都是通透的(transparently)。此作法主要的优点是如果呼叫者并没有修改该资源,就不会有副本(private copy)被建立。--百度百科简介.

2020-12-11 21:44:01 1112

原创 读写锁饥饿问题解决方案之StampedLock

引言ReentrantReadWriteLock可以让多个读线程同时持有读锁(只要写锁未被占用),而写锁是独占的,所以在读多写少的场景上可以提高吞吐量,比如hdfs文件系统。但是,读写锁如果使用不当,很容易产生“饥饿”问题,比如在读线程非常多,写线程很少的情况下,很容易导致写线程“饥饿”,虽然使用“公平”策略可以一定程度上缓解这个问题,但是“公平”策略是以牺牲系统吞吐量为代价的。导致写线程饥饿的情况:当线程 A 持有读锁读取数据时,线程 B 要获取写锁修改数据就只能到队列里排队。此时又来了线程 C

2020-12-09 22:23:25 3467 3

转载 StampedLock原理分析

背景ReentrantReadWriteLock可以让多个读线程同时持有读锁(只要写锁未被占用),而写锁是独占的,所以在读多写少的场景上可以提高吞吐量,比如hdfs文件系统。但是,读写锁如果使用不当,很容易产生“饥饿”问题,比如在读线程非常多,写线程很少的情况下,很容易导致写线程“饥饿”,虽然使用“公平”策略可以一定程度上缓解这个问题,但是“公平”策略是以牺牲系统吞吐量为代价的。导致写线程饥饿的情况:当线程 A 持有读锁读取数据时,线程 B 要获取写锁修改数据就只能到队列里排队。此时又来了线程 C

2020-12-08 23:53:41 923 1

转载 Kylin、Druid、ClickHouse核心技术对比

文章作者:吴建超内容来源:jackywoo.cn出品平台:DataFunTalk导读:Kylin、Druid、ClickHouse是目前主流的OLAP引擎,本文尝试从数据模型和索引结构两个角度,分析这几个引擎的核心技术,并做简单对比。在阅读本文之前希望能对Kylin、Druid、ClickHouse有所理解。01Kylin数据模型Kylin的数据模型本质上是将二维表(Hive表)转换为Cube,然后将Cube存储到HBase表中,也就是两次转换。第一次转换,其实就是传统数据库的C

2020-12-04 22:52:30 223

转载 OpenTSDB 数据存储详解

随着互联网、尤其是物联网的发展,我们需要把各种类型的终端实时监测、检查与分析设备所采集、产生的数据记录下来,在有时间的坐标中将这些数据连点成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。这些数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。基于时间序列数据的特点,

2020-11-30 22:45:15 968

转载 性能优化之cpu的 us和sy

随着系统数据量的不断增长, 访问量的不断提升, 系统的响应通常会越来越慢, 又或是编写的新的应用在性能上无法满足需求, 这个时候需要对系统的性能进行调优, 调优过程是构建高性能应用的必备过程, 也是一个相当复杂的过程, 而且涉及到了很多的方面, 硬件、操作系统、 运行环境软件以及应用本身, 要实现调优, 首先需要做的是找到性能低的根本原因, 然后才是针对性的进行调优, 本章节就来介绍下寻找性能瓶颈以及调优的一些技术上的方法。CPU 消耗分析当 CPU 消耗过高时, 对于多线程的 Java 应用而言,

2020-11-30 22:05:17 1245

转载 解读linux iowait

%iowait 是使用linux检测工具(iostat、sar 等)检查CPU使用率时显示的一个指标,在一些Unix版本上显示为 %wio。这个指标常常被误读,很多人把它当作I/O出现瓶颈的参考指标,我自己每隔一段时间就会遇到对 %iowait 紧张兮兮的客户,不得不费尽唇舌反复解释。事实上这个指标所含的信息量非常少,不能单独用来判断系统有没有I/O问题。接下来我们详细探讨一下它真正的含义。man iostat :Linux的man page上的解释是:%iowait 表示在一个采样周期内有百分

2020-11-30 21:43:06 1579

转载 58HBase平台实践和应用—时序数据库篇

OpenTSDB是一个分布式、可伸缩的时序数据库,支持高达每秒百万级的写入能力,支持毫秒级精度的数据存储,不需要降精度也可以永久保存数据。其优越的写性能和存储能力,得益于其底层依赖的HBase,HBase采用LSM树结构存储引擎加上分布式的架构,提供了优越的写入能力,底层依赖的完全水平扩展的HDFS提供了优越的存储能力。在58,OpenTSDB目前主要用于数据平台监控系统中相关性能指标的存储查询,58智能监控系统中回归模型和分类模型原始明细数据存储查询,以及风铃监控预警系统数据的存储查询等。Open

2020-11-29 22:57:59 961

原创 聊聊自旋锁

自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。---百度百科背景由于在多处理器环境中资源的有限性和并发安全问题,很多时候需要进行互斥访问(mutual exclusion),所以需要引入锁的机制,只有获取了锁的线程才能够对资源进行访问,由于多线程运行是依赖cpu的时间分片,所以同一时刻只能有一个线程获取到锁。那么没有获取到锁的线程通常有两种方式.

2020-11-29 22:44:05 1231

原创 SMP、NUMA、MPP体系结构

前言:系统的性能很大程度上依赖于cpu 硬件架构的支持,所以了解cpu不同架构体系对开发人员优化性能非常重要,且可以通过学习相关的架构体系,借鉴或者应用到开发架构上。本篇内容参考和摘录一些技术博客进行整理,如有错误之处欢迎指正。从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构(SMP :Symmetric Multi-Processor) ,非一致存储访问结构 (NUMA :Non-Uniform Memory Access) ,以及海量并行处理结构 (MPP :Massive P.

2020-11-29 22:40:12 2512 1

原创 git常见使用命令&常见问题解决方法记录

常见操作1. checkout操作:git checkout -b branch1(本地分支名) origin/branch1(远程分支名)2. diff操作:#比较一个文件两个版本的区别$ git diff HEAD^^ HEAD main.c$ git diff HEAD^^..HEAD -- main.c$ git diff HEAD~2 HEAD -- main.c3. stash操作# 当git pull发现有代码冲突时,本地的所有修改就需要被暂时存储起来gi

2020-11-29 22:36:10 216

转载 OpenTSDB介绍

OpenTSDB 2.0, the scalable, distributed time series database可扩展、分布式时间序列数据库1、背景一些老的监控系统,它常常会出现这样的问题:1)中心化数据存储进而导致单点故障。2)有限的存储空间。3)数据会因为时间问题而变得不准确。4)不易于定制图形。5)不能扩展采集数据点到100亿级别。6)不能扩展metrics到K级别。7)不支持秒级别的数据。OpenTSDB解决上面的问题:1、它用hbase存储所有的

2020-11-23 23:03:17 329

转载 ClickHouse内核分析 MergeTree的存储结构和查询加速

注:以下分析基于开源 v19.15.2.2-stable 版本进行引言ClickHouse是最近比较火的一款开源列式存储分析型数据库,它最核心的特点就是极致存储压缩率和查询性能,本人最近正在学习ClickHouse这款产品中。从我个人的视角来看存储是决定一款数据库核心竞争力、适用场景的关键所在,所以接下来我会陆续推出一系列文章来分析ClickHouse中最重要的MergeTree存储内核。本文主旨在于介绍MergeTree的存储格式,并且彻底剖析MergeTree存储的极致检索性能。MergeT

2020-11-22 23:30:45 500

原创 浅谈TCP的keep-alive机制

相关背景:hbase集群大量的regionserver节点因Linux服务器上的fd数量不足导致进程主动退出,每台服务器上处于CLOSE_WAIT状态的tcp连接有10万+,排查发现是regionserver访问datanode产生的大量tcp连接;首先简单回顾一下TCP断开连接的过程,如下图所示。CLOSE_WAIT产生的原因是被动方收到FIN请求后没有调用close();一般是由于对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()

2020-11-16 21:52:12 5029

转载 一文读懂HBase多租户

本文从三个方面介绍了HBase的多租户实现。多租户(multi-tenancy technology),参考维基百科定义,它是在探讨与实现如何于多用户的环境下共享相同的系统或程序,并且仍可确保各用户间数据的隔离性。随着云计算时代的到来,多租户对于云上服务显得更加重要。所以HBase也有许多多租户相关的功能,其为多个用户共享同一个HBase集群,提供了资源隔离的能力。本文将从Namespace&ACL,Quota,RSGroup三个方面来进行介绍。Namespace&ACL在HBa

2020-11-10 17:49:13 446

hdfs编译流程

hadoop hdfs编译文档,详细编译流程,环境安装步骤~~

2018-09-26

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

TA关注的人

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