用友华表任少斌:三面突围大数据存储

2024-04-08 12:58

本文主要是介绍用友华表任少斌:三面突围大数据存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

正在学习大数据相关的知识,发现用友的一篇文章不错,可以当作入门科普。

当然,我不清楚他讲的方案是不是合理的,但确实很易懂,也能学到不少知识。

转自:http://www.enet.com.cn/article/2012/0702/A20120702130582.shtml


大数据时代给传统数据仓库架构带来了一系列的冲击和挑战,仅从源数据采集和存储层面,就让仓储的构建者不得不重新认真地思考:数据在哪里?这个问题的答案改写了企业数据仓库对数据源的既有定义,同时也传递了两方面的焦虑,一是数据规模急速增长,现有的单节点或者共享磁盘架构能否适应海量数据的存储;二是数据结构复杂多样,现有的基于结构化数据为主体的存储方案能否兼容无模式的非结构化数据。

  面对企业大数据的挑战,用友华表作为一家提供商业分析产品的供应商,在技术上我们将如何解决大数据的问题呢?目前面对大数据给现有仓库存储架构带来的量的冲击和数据种类增加的挑战,不同的公司会选择不同的技术路线,我们最初试图通过一个大而全的存储架构来解决海量数据和多种数据类型的问题。但结过一段时间反复研究,我们认为大而全的存储架构不是解决大数据的最佳方案,我们目前决定采用的技术路线是让不同种类的数据存储在最适合他们的存储系统里,然后再将不同的数据类型进行融合,企业在融合的数据基础上做商业分析。

  本文我将从用友华表的技术思路、存储方案、存储之后的数据如何融合三个层次来阐述我们如何应对大数据的挑战。

  分而治之 三面突围

  第一,有“容”乃大。“容”,即有足够的容量来存储数据。对于大规模数据,我们将采用分而治之的思想,构建分布式存储系统,并且做到易扩展。保证系统可以方便的增加节点,当企业的数据快速增加时,可以使数据分布始终保持在平衡状态;

  第二,有“荣”乃大。即兼用多种存储引擎。大数据因结构复杂多样使得数据仓库要采集的源数据种类无比“繁荣”,因此新的仓储架构也要改变目前以结构化为主体的单一存储方案的现状,针对每种数据的存储特点选择最合适的解决方案:对非结构化数据采用分布式文件系统进行存储,对结构松散无模式的半结构化数据采用面向文档的分布式key/value存储引擎,对海量的结构化数据采用shared-nothing的分布式并行数据库系统存储;

  第三,有“融”乃大。如上所述可以兼用多种分布式存储引擎来解决“容”和“荣”的挑战,但企业存储多元化数据的一个重要目标是集成分析,而多种类型数据孤立存储对后续的集成分析会带来极大不便。因此我们还需要构建分布式数据库系统和分布式文件系统之间的连接器,使得非结构化数据在处理成结构化信息后,能方便的和分布式数据库中的关系型数据快速融通,保证大数据分析的敏捷性。

  存储方案各不同

  上面提到针对大数据规模大、种类多的特点,我们可以采用“容”、“荣”的方案,兼用多种分布式存储引擎分而治之。那么我们就拿非结构化、半结构化和结构化这三大类数据的存储方案分别举例说明,以便让大家更清楚的了解到不同类型的海量数据通常都是通过哪些方式来进行存储的。由于谈到的都是业界普遍使用的开源或商业方案,因此不做深入讨论。

  首先,适合存储海量非结构化数据的分布式文件系统。

  HDFS(Hadoop Distributed File System),是鼎鼎大名的开源项目Hadoop的家族成员,是谷歌文件系统GFS(Google File System)的开源实现。HDFS将大规模数据分割为多个64兆字节的数据块,存储在多个数据节点组成的分布式集群中,随着数据规模的不断增长,只需要在集群中增加更多的数据节点即可,因此具有很强的可扩展性;同时每个数据块会在不同的节点中存储3个副本,因此具有高容错性;因为数据是分布式存储的,因此可以提供高吞吐量的数据访问能力,在海量数据批处理方面有很强的性能表现。

  其次,适合存储海量无模式的半结构化数据的分布式Key/Value存储引擎。

  HBase(Hadoop Database),也是开源项目Hadoop的家族成员,是谷歌大表Bigtable的开源实现。HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它不同于一般的有模式的关系型数据库,HBase存储的数据表是无模式的,特别适合结构复杂多样的半结构化数据存储。此外,HBase利用HDFS作为其文件存储系统,利用MapReduce技术来处理HBase中的海量数据。

  第三,适合存储海量结构化数据的分布式并行数据库系统。

  Greenplum是基于PostgreSQL开发的一款MPP(海量并行处理)架构的、shared-nothing无共享的分布式并行数据库系统。采用Master/Slave架构,Master只存储元数据,真正的用户数据被散列存储在多台Slave服务器上,并且所有的数据都在其它Slave节点上存有副本,从而提高了系统可用性。

  Greenplum最核心的技术就是,大表数据分片存储,可以应对海量数据;基于大表的查询语句在经过Master分析后可以分片发送到Slave节点进行并行运行,所有节点将中间结果返回给Master节点,由Master进行汇总后返回给客户端,大大提高了SQL的运行速度。

  “三融合一”--Xnet数据交换网络

  各种复杂而大量的数据犹如一张立体的大网,三类数据是网里三种不同的结点,前面提到的三类分布式存储引擎可以将不同的结点有序的安排在网上,并且每种相同的结点都可以直接用线相互连接起来。但此时只是三个孤立的面,就如同三类数据间存在的孤岛。若要把这三个面也相互连接起来,形成一张可以从点到面,从点到点,从面到面的大网,则需要构建一个方便、快速的数据交换组件,它是一个连接器,可以实现“三融合一”,满足大数据存储有“融”乃大的特性。

  下面先介绍一下数据交换网络Xnet(Exchange Net)的一些基本构思,它是一个可以完成分布式文件系统和分布式数据库之间海量数据快速交换的组件。

用友华表任少斌:三面突围大数据存储

  上图仅是一个简化的逻辑图,在实际的物理部署中,HDFS集群和并行数据库集群共用一个服务器集群,即在服务器集群的每个节点上既有HDFS数据节点也有并行数据库的数据库单实例。处于中间融通两方数据的蓝色部分就是我们本节要探讨的分布式、可并行运行的高速连接器Xnet。

  Xnet实际就是运行在Hadoop集群上的一系列Mapreduce任务,它要完成从HDFS读取源数据、处理中间结果集、最后写入分布式数据库的若干作业,这些作业对调用者而言是完全透明的,仅需要配置简单的业务信息,调用Xnet就可自动完成:

  ·源数据文件:需要同步至分布式数据库的HDFS文件

  ·文件头:源数据的列分隔符、以及与目标表列名的映射

  ·目标表:要写入的数据库表

  ·过滤条件:选择写入的数据行条件

  ·散列键:根据散列键的值和哈希算法确定数据要写入分布式数据库的节点,对数据进行分片保证数据均衡分布

  Xnet组件的主要功能设计如下:

  第一,拆分列表。将源数据文件符合过滤条件的面向行的记录拆分为多个列表,并存入如下的目录结构中:

用友华表任少斌:三面突围大数据存储

  一级目录为表名,二级目录为列名,这样方便后续的基于列的数据传输、装载以及基于列的统计信息采集,其Mapreduce过程可以模拟如下:

  Map阶段:

  a、源数据文件被splitable接口分割为多个数据段,对每个段Jobtracker会启动一个Mapper检索每一行记录,根据Xnet的配置信息得到符合过滤条件的记录

  b、根据Xnet配置信息得到每条记录的散列键,结合哈希算法计算出该记录的散列值HK

  c、根据Mapper处理的数据段号和当前处理的行号产生一个行标识RID

  d、Mapper结合Xnet的配置信息对当前记录的每一列都产生输出,数据格式为HK:(Cn;RID;Cv),其中HK为散列值,Cn为列名,RID为行标识,Cv为列值

  Reduce阶段:

  a、Reducer远程读取Mapper产生的中间数据集,通过实现定制化的MultipleOutputFormat接口并根据记录中Cn即列名,将记录写入如上的树结构目录中,数据格式为HK:(RID;Cv)。

  第二,散列列表。将拆分得到的列表数据文件根据每条记录的散列值HK汇聚到相应的数据库实例节点,进行排序等操作,并行加载入分布式数据库中,其Mapreduce过程模拟如下:

  Map阶段:

  a、Mapper从对应的二级目录结构中读取每个列表的数据文件

  Reduce阶段:

  a、Mapper产生的中间数据集根据散列值HK进行Partition汇聚到不同的Reducer进程

  b、Reducer对数据集按照列值即Cv进行排序操作,并通过实现定制化的MultipleOutputFormat接口将数据通过分布式数据库的装载接口写入相应的数据库实例中

  第三,统计信息。该功能主要是以单位列表为对象进行全量或者抽样计算,产生列级统计信息,利用Xnet的数据交换过程进行统计信息采集,减轻分布式数据库后续分析表的相关运算。这些统计信息有助于分布式数据库的查询引擎做出最合理的执行计划,提高用户的数据分析效率。

  我们将统计信息采集的操作实现为独立的算子,嵌入到Xnet的数据交换过程中,保证代码的独立性,可以方便的控制何时进行统计信息的采集。主要算子描述如下:

  ·StatisticsGather

  简单的聚集统计采集,如空值数、记录数,最大最小值等

  ·HistogramGather

  等高直方图、常用值统计等

  ·SampleGather

  数据采样算子,在采样统计情景下,将命中的记录传给其它两个算子进行统计

  下面通过举例看看统计信息采集的处理过程。

  首先,准备阶段。Mapreduce过程要对输入的数据进行分割split操作,在统计信息的采集过程中不用对所有的splits都进行统计分析,每次采集任务只选择指定数量的split进行。这些数量值需要在统计信息任务里进行配置,如采样的splits数量num_sample_splits,采样的记录数num_sample_records。

  采样的选择方法:

  ·如果num_sample_splits大于splits总数,那么所有splits都需要进行采样,每个split采样的记录数为num_sample_records / total_splits

  ·如果num_sample_splits小于splits总数,计算splits挑选的间隔sample_step = total_splits / num_sample_splits,按照sample_step的间隔从splits列表中选出num_sample_splits个split,每个split需要采样的任务数为num_sample_records / num_sample_splits

  其次,采样算子。在海量数据中,对每个字段统计一个精确的直方图信息的代价太大,而且也没有意义。因此采用采样的手段来统计每个字段的直方图信息比较可取,下面描述两种采样方式,如果能清楚知道每个分割文件的记录数目那么直接采用采样算法Algorithm S或者Algorithm R是最好的,具体采样算法这里不做讨论。

  ·顺序读取:SampleGather接收需要处理的记录,如果达到配置的采样数目则跳过不做任何操作;如果没有达到则传递给HistogramGather进行统计分析

  ·估值读取:SampleGather统计前n条记录的平均长度,根据平均长度和当前分割文件的总长度,估算当前包含的总记录数。有了总记录数N就可进行采样算法如Algorithm S或者Algorithm R,将采样命中的记录传递给HistogramGather进行统计分析

  第三,MR流程。在此模拟统计信息采集的Mapreduce过程,包括字段记录总数、空值记录比例、常用值统计和等高直方图统计。

  Map阶段:

  a、Mapper从文本文件中解析得到的一行记录,并传递给StatisticsGather和SampleGather

  b、StatisticsGather的处理:统计记录数num_all加1,如果该字段同时为空则num_null加1

  c、SampleGather进行采样后,将采样的记录传递给HistogramGather进行直方图统计(在Map阶段直方图统计包括常用值统计和等高直方图统计)

  d、常用值统计:将该字段放入HashTable进行去重操作,统计该字段的重复类;HashTable中按照值出现的次数排序,并且保证HashTable的大小在指定的范围内,比如250个Key

  e、等高直方图统计:直接将所有采样到的所有记录输出到Reduce阶段,因为等高直方图需要一个全局的采样统计

  Map阶段输出:

  a、StatisticsGather输出:该split中包含的总记录数num_all,该字段的空值数量num_null

  b、HistogramGather输出:常用值(MCV)统计输出,HashTable中key的数目,key的列表,以及每个key在split中占有的数量;等高直方图统计输出,采样得到的所有记录

  Reduce阶段:

  a、StatisticsGather输出:累加每个Map输出的num_all,得到总记录数;累加每个Map输出的字段的空值数量,并与总记录数相除,得到空值比例

  b、HistogramGather的常用值统计输出:利用Mapper和Reducer的Sort机制,对常用值出现次数进行累加统计。基于常用值统计可以进一步产生更多的统计信息,如遍历常用值的HashTable,统计出现次数大于1的键值,如果该值为0,则说明该字段具有唯一性。还可以利用常用值输出计算该列的离散度等,这里不再赘述。

  c、HistogramGather的等高直方图统计输出:利用Mapper和Reducer的Sort机制,将每个Mapper输出的采样记录进行排序。根据配置的直方图箱个数,将这些值分到不同的bin中,记录每个bin的起始值和结束值。输出等高的直方图。(如下图所示,得到等高直方图的例子)

用友华表任少斌:三面突围大数据存储

这篇关于用友华表任少斌:三面突围大数据存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885648

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav