精华内容
下载资源
问答
  • 光环国际线下交流PPT,主要内容:1、数据量极大带来的挑战;2、lambda架构平台;3、实时统计;4、离线统计;5、数据存储;6、统计质量设计;7、小结。
  • 但是,很多应用场景往往要求在数秒内完成对几亿、几十亿甚至几百上千亿数据分析,从而达到不影响用户体验的目的。如何能够及时有效的获取分析结果提高工作效率,这是许多分析人员在面对大数据所不得不面临的问题。...
    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎大数据时代的来临为众多企业带来了更多的全新的发展机遇。而搜索引擎已经成为大数据领域的一个核心应用,其重要性不言而喻。很多公司在大数据离线统计分析方面已经具备了一定的能力。但是,很多应用场景往往要求在数秒内完成对几亿、几十亿甚至几百上千亿的数据分析,从而达到不影响用户体验的目的。如何能够及时有效的获取分析结果提高工作效率,这是许多分析人员在面对大数据所不得不面临的问题。拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎实时检索分析引擎Eagles,是DATATOM研发的为大数据检索、分析业务提供一套实时的、多维的、交互式的查询、统计、分析系统,它是DANA智能数据开发者服务中一个核心模块,具有高扩展性、高通用性、高性能的特点, 能够为公司各个产品在大数据的统计分析方面提供完整的解决方案,让万级维度、千亿级数据下的秒级统计分析变为现实。

    今天,小拓结合Eagles产品特性,给大家介绍这款产品。

    1.易管理性

    Eagles自带Web的管理控制台,方便进行远程维护和管理。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎2. 高扩展性

    Eagles拥有非常灵活的扩展性,您只需添加一个个新节点,即可轻松应对更高级别的数据量,可以扩展到上百台服务器,高效处理PB级数据。

    数据索引库可以设置任意多分片,分片会在集群节点之间平均的负载, 当集群扩容或缩小的时候,Eagles会自动在节点之间迁移分片,以保证集群的负载平衡。

    用户提交查询请求时,请求也会分发到每个涉及的节点,在多个分片中并发查询, Merge操作会选择其中一个负载较轻的分片中进行,此特性在海量数据的时候优势就体现的非常明显。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎3.高可用性

    Eagles拥有非常完善的故障异常处理机制,任何节点故障不影响系统正常使用。因Eagles采用对等节点机制,集群内部自动检测节点的增加、失效和恢复,并重新组织索引。

    同时索引库支持设置多副本机制,任一索引分片都在不同的节点上有副本,任意节点故障系统会在毫秒级检测到异常并启动副本复制,不影响应用系统的正常使用。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎4.多种数据源支持

    Eagles通过整合Crab数据收集引擎,能够支持多种数据源的定时收集,如传统ETL工具,网页Spider, 数据库,文件系统,邮件,RabbitMQ消息队列, Log 等数据源,索引可完全自定义索引结构。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎5.实时数据分析

    Eagles提供了丰富的聚合/分类算法,利用其冗长但是强大的Aggregation DSL可以表达出比SQL还要复杂的聚合逻辑, 为数据分析提供了有力的支撑, 目前Eagles支持:

    1)域的折叠与融合

    2)百分位等级聚合,该功能展示了观测值在某个特定值之下的百分率

    3)地理范围聚合,该功能提供了一个覆盖了所有位置值的范围框图

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎  (图:使用Eagles统计热点违停区域)

    6.数据地图搜索

    Eagles内置Geo字段支持,只要文档中包含空间信息字段,即可使用Eagles搜索API进行空间搜索、距离搜索、范围搜索、空间统计等高级功能。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎(图:使用Eagles实现巡逻范围预警)

    7.Schema-Free

    Eagles既可以搜索、也可以保存数据。它提供了一种半结构化、不依赖schema并且基于JSON的模型,你可以直接传入原始的JSON文档,Eagles会自动地检测出你的数据类型,并对文档进行索引。你也可以对schema映射进行定制,以实现特殊的自定义需求,例如对单独的字段或文档进行boost映射,或者是定制全文搜索的分析方式等。

    8.多语言分词

    Eagles内置了多种语言的分词器,目前内置英文、中文、日文、俄文、法文、拼音分词,不同的分词器有不同的分词算法,用户可以根据自己的需求选择适合的分词器。词典支持自定义,以提升分词的准确率。

    9.Query DSL

    完整的支持了基于JSON的QueryDSL通用查询框架,QueryDSL是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句。它有几大特点:

    1)QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。

    2)QueryDSL可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。

    3)借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。

    10.兼容SQL

    除了QueryDSL 查询语法的支持,Eagles还支持类SQL的查询方式,让熟悉数据库的你轻松上手,目前支持常用语法 Select, Delete, Where, Order By, Group By, And/Or, Like,Count, Sum, Between等。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎11.RESTFul 跨平台接口

    Eagles支持RESTful的API,可以使用JSON通过HTTP调用它的各种功能,包括搜索、分析与监控。此外,它还为Java、PHP、Perl、Python以及Ruby等各种语言提供了原生的客户端类库。

    12.与Hadoop兼容和集成

    DATATOM将其在数据检索处理上的丰富经验与 Hadoop 开源平台高效整合。Eagles实时搜索引擎与Hadoop无缝集成, MapReduce 的引入大大扩展了系统在数据分析方面的扩展能力; Eagles 机器数据挖掘引擎是基于Hadoop平台进行数据挖掘与分析, Eagles将分片的信息暴露给Hadoop,以此可以实现协同定位。Job的任务会在每个Eagles分片所在的同一台机器上运行, Eagles能够提供近乎实时的响应速度,这极大的改善了Hadoop job的执行速度以及执行的各种开销.。

    检索引擎的功能和性能决定了大数据系统的响应能力和可用性,同时很多大数据分析和挖掘操作也是依赖于底层实时查询技术,因此在海量数据规模下,能获得秒级的响应是大数据应用系统的一个关键指标。

    拓闻 <wbr>| <wbr>万级维度、千亿级数据,看我Eagles实时检索分析引擎而应对万级维度、千亿级数据,看我EAGLE实时检索分析引擎大显神威吧。






    http://blog.sina.com.cn/s/blog_882057360102vxr5.html

    展开全文
  • 千亿数仓的sql

    千次阅读 2020-04-28 19:59:59
    数据: 链接: https://pan.baidu.com/s/1M6xkkbZUSpXneaNX0d–Rg 提取码: unkt • 统计2019年期间每个季度的销售订单笔数、订单总额 select case When month(createTime) between 1 and 3 then ‘一季度’ When ...

    需求1
    数据:

    链接: 链接: https://pan.baidu.com/s/1xGebplPwEccjN8fjUa-nYg 提取码: tyqe

    • 统计2019年期间每个季度的销售订单笔数、订单总额

    select case
    When month(createTime) between 1 and 3 then ‘一季度’
    When month(createTime) between 4 and 6 then ‘二季度’
    When month(createTime) between 7 and 9 then ‘三季度’
    When month(createTime) between 10 and 12 then ‘四季度’ end,count(orderid),sum(totalMoney)
    From itcast_orders where year(createTime)=2019 group by case
    When month(createTime) between 1 and 3 then ‘一季度’
    When month(createTime) between 4 and 6 then ‘二季度’
    When month(createTime) between 7 and 9 then ‘三季度’
    When month(createTime) between 10 and 12 then ‘四季度’ end;
    结果:
    在这里插入图片描述

    • 统计2019年期间每个月的销售订单笔数、订单总额

    select case when substr(createtime,6,2)=‘01’ then ‘1月’
    when substr(createtime,6,2)=‘02’ then ‘2月’
    when substr(createtime,6,2)=‘03’ then ‘3月’
    when substr(createtime,6,2)=‘04’ then ‘4月’
    when substr(createtime,6,2)=‘05’ then ‘5月’
    when substr(createtime,6,2)=‘06’ then ‘6月’
    when substr(createtime,6,2)=‘07’ then ‘7月’
    when substr(createtime,6,2)=‘08’ then ‘8月’
    when substr(createtime,6,2)=‘09’ then ‘9月’
    when substr(createtime,6,2)=‘10’ then ‘10月’
    when substr(createtime,6,2)=‘11’ then ‘11月’ else ‘12’ end ,
    count(orderid),sum(totalMoney) from itcast_orders
    where createtime like ‘%2019%’
    group by
    case when substr(createtime,6,2)=‘01’ then ‘1月’
    when substr(createtime,6,2)=‘02’ then ‘2月’
    when substr(createtime,6,2)=‘03’ then ‘3月’
    when substr(createtime,6,2)=‘04’ then ‘4月’
    when substr(createtime,6,2)=‘05’ then ‘5月’
    when substr(createtime,6,2)=‘06’ then ‘6月’
    when substr(createtime,6,2)=‘07’ then ‘7月’
    when substr(createtime,6,2)=‘08’ then ‘8月’
    when substr(createtime,6,2)=‘09’ then ‘9月’
    when substr(createtime,6,2)=‘10’ then ‘10月’
    when substr(createtime,6,2)=‘11’ then ‘11月’ else ‘12’ end ;
    结果:
    在这里插入图片描述

    • 统计2019年期间每周一到周日的销售订单笔数、订单总额
    // 2019-01-08 17:50:13

    Select
    IF( pmod(datediff(substr(createtime,1,10),‘1920-01-01’) -3,7) =‘0’, 7,pmod(datediff(substr(createtime,1,10),‘1920-01-01’) -3,7)) as week,
    count(distinct orderid),
    sum(goodsprice*goodsnum)
    from
    itcast_order_goods
    group by
    IF( pmod(datediff(substr(createtime,1,10),‘1920-01-01’) -3,7) =‘0’, 7,pmod(datediff(substr(createtime,1,10),‘1920-01-01’) -3,7));
    结果:
    在这里插入图片描述

    展开全文
  • 几千台的 Hadoop 集群近百 P 级的存储总量,每日产生万亿的消息数据入库,需要针对几十亿 iemi 手机设备去重,并关联数千亿的历史全表,进行曝光、点击、PV、UV、日活、新增、留存等统计指标分析,当前所有业务的 ...

    http://www.databanker.cn/point/242750.html

    背景介绍

      对于腾讯庞大的大数据分析业务,几千台的 Hadoop 集群近百 P 级的存储总量,每日产生万亿的消息数据入库,需要针对几十亿 iemi 手机设备去重,并关联数千亿的历史全表,进行曝光、点击、PV、UV、日活、新增、留存等统计指标分析,当前所有业务的 ETL 清洗、统计计算、用户画像都全部依赖离线 m/r 和 Hive SQL,给集群造成很大压力,系统负载高任务积压重,计算耗时久业务响应慢(t+1),难以及时反馈市场信息的变化,不仅是技术上的巨大挑战,同时业务的迅速增长变化也在挑战着当前技术团队的工作模式和流程。如何突破现有大数据分析架构瓶颈?

      本文内容将带来腾讯大数据技术的新发展和架构实践,介绍基于自研 bitmap 技术的大数据系统“锋刃”,以及 OLAP 全新驱动模式的架构战略,真正做到秒级实时查看每分钟指标、全维度的用户 OLAP 自助分析、闭环的动态运营体系。

      讲锋刃大数据方案之前,我们先整体看看大数据平台架构,有诸形于内必形于外,很多局部状况的问题,需要从整体来看,为此,我们按照集群状况,典型业务流程和数据流、系统架构瓶颈点的思路顺序,以表知里的进行一下梳理。

      一、集群状况的反馈

      当前 Hadoop 集群系统性能繁忙(3 大区域 7 大机房),1000 多存储机器对应 4000 多计算机器,cpu 平均值 70%-80%(晚 20 点到 0 点较低),5 分钟负载很高,任务积压重;ech1 几百兆,峰值几个 g;磁盘 io 约几百兆,峰值几 g,读写 iops3000。存储计算比为 1:2,业务 job 还在增长之势,1:3 到 1:4 将达到集群瓶颈。

      很多时候我们看到集群繁忙,只当作运维问题去解决,扩容集群机器,调整机房部署,优化调度能力和虚拟化,增强任务监控管理等。却很少关心集群上跑的都是些什么任务,为什么会给集群造成这么大的压力,我们接下来通过梳理业务流程和数据流来搞清楚这个问题。

      二、典型业务流程和数据流

      手机浏览器业务场景典型流程:从手机浏览器的资讯日志数据,统计每板块的 PV,并挖掘用户浏览咨讯的内容提取标签,并计算标签权重,进行推荐,再将推荐结果反馈到日志。

    image.png

      三、贯穿业务场景的数据流

      多份业务 log 和产品如灯塔 sdk 产生多份数据日志,分别有各自的通道和 hdfs 数据模型,对集群存储和计算有很大重复,也造成各自数据的不完整,目前尚未在“通道采集—基础数据—集市数据——高级画像”数据流链路上形成统一数据模型,这样即能优化节省资源,又能数据建模标准化,所有统计计算和算法挖掘都基于统一数据标准进行,上层可以提供大量工具化用户产品。

    image.png

      四、系统架构瓶颈全链路分析

      综上所述,我们通过对集群、采集、通道、统计、存储、数据治理、idc、业务场景的全链路架构分析,归纳出以下瓶颈点:

      Hadoop 集群的繁忙压力

      所有业务全部依赖离线 m/r 计算和 Hive SQL

      log 采集的大量重复内容

      mq 集群每日消息总量万亿但无法提供内容过滤

      冷热存储、短期存储(天内)、长期存储(T+1,周、月、年)混一起

      做到小时和分钟级别统计很难。

      没有一个统一精简的数据模型形成标准。

      业务的存储和计算还在迅速增长…

      但是不可能所有的架构瓶颈都能在短时间内进行优化改进,我们需要寻找一个最合适的切入点,先解决最迫切的问题。

      五、迁入实时计算的优化和问题

      (一)从业务流程和数据处理的逻辑,反思当前架构和处理方式:

      1、采集源头的 log 生成:如应用宝产生 6000 多 log,其中 30%-40% 的内容是重叠(设备信息、身份信息等),开发人员根据需要自定义新的 log,每个 log 产生后续一系列存储表,以及新的工作流 job,不断累加。对于每个 log,有的超过 100 个字段,支持很多种统计任务,但是每种统计只需要其中很少字段即可完成。

      (1)、Log 进行重新梳理和合并,减少冗余,制定 log 规则

      (2)、考虑从源头进行 log 梳理和分流,以统计业务维度接收局部消息内容:

    image.png

      2、通过大量 hdfs 存储表实现数据流处理:以手机浏览器业务,每个 log 表会产生多个清洗结果表,多张清洗结果表汇合清洗统计表,完成统计计算后,还需要汇合多张统计结果表,形成通过大量的 hdfs 中间存储表,来实现统计和集市的数据处理逻辑。如果考虑用实时流取代存储表处理流,可以带来很大的资源节省和效率提升:

    image.png

      3、当前离线处理方式,以灯塔为例,每 10 分钟接收 MQ 通道的日志数据,在 HDFS 建立一个分区,一天共 144 个分区,每个分区建立 3600 个几 K 到 10M 的小文件不等,再提交 144 个离线 JOB 去执行清洗任务,产生 1500 个解析表,再按照小时、天、月建立统计统计任务,反复关联全表热表操作,完成新增用户等典型统计。离线处理方式计算和磁盘耗用严重,解决 1 天内的实时需求难以满足。除灯塔外,其他的业务也按照这种方式源源不断产生大量的离线任务进行统计,除计算外还会产生大量数据存储冗余,现在我们终于明白集群为什么如此繁忙的症结所在了。

      (二)迁入实时计算进行优化的考虑:

      1、经过分析了灯塔、应用宝、手机浏览器和手机管家,业务的相似主线模式如下,更适合实时处理;

    image.png

      2、清洗部分实时处理 DEMO 验证:相对于离线计算 MAP/REDUCE 的时间消耗换算,耗用机器数从 84 台降低到 15 台 m10,完成了 90% 的数据量进行流式清洗,包括:从 kafka 拉数据 ->解包 ->byte2string->清洗 ->string2byte->,5 分钟处理 10 亿消息数据,333w/s,接近 mq 纯拉取消费的 360w/s;

      3、清洗转换步骤,采用实时流处理架构如 STORM,通过 spout 从 MQ 获取输入流,自定义多个 bolt 并行处理输入流,再依此组合设计;

    image.png

      4、业务迁移计划,以灯塔广告监测 CASE 为切入逐步安排计划迁移。

      (三)实时计算框架选型问题:

      其实我们的技术团队当时也考虑过通过实时计算来优化,但是基于传统流处理实时计算方案 storm、spark streaming、flink 框架进行实施时,面临一系例问题阻碍,导致无法大范围推行:

      当时团队现状:storm 和 spark streaming 研发支持和运维能力较成熟,原始 flink 还需要优化,尚不具备直接大规模工程化实施的条件。

      storm 的算子封装和开发成本较大,但是能很好解决 1 分钟到 1 小时实时计算和离线资源释放,SQL 支持弱,业务分析团队更习惯写 SQL 做清洗和统计。

      spark streaming 开发成本低,能解决 5 分钟 10 分钟实时批量计算,但是 1 小时计算无法释放离线资源,统计 1 分钟级结果会产生大量调度任务。

      flink 提供流式和批量结合的实时处理和完善 SQL 支持,适合完成清洗和 count 计算,但其有限时间窗口并不太适合大批量用户去重和统计。

      六、锋刃大数据架构方案

      到目前为止,我们需要寻找一种新的大数据架构方案,针对海量大数据的实时统计场景进行专门设计,得到更先进的解决办法。我们把业务场景简化一下如下表述,按照因果关系,我们通过手机设备获取到一些 app 维度的 log 数据,经过大数据平台的统计处理,最后得到用户相关的结果和一些 count 类结果(pv,uv, 金额,数量等),现在我们想在内存中按照维度组合来实时计算这些结果,削峰填谷把离线累积的数据统计变成每分钟实时流处理。

    image.png

      (一)BitMap 位存储和位计算

      为了解决海量用户的去重问题,我们发现使用 bitmap 有两个非常显著的优势:位存储占用空间低,位计算效率高。

      1、将需要做统计计算的 id 转换成数字序号,每个只占 1 个 bit,对于 20 亿的用户 id,只需要 20 亿 bit 约 238m 大小,压缩后占用空间更小,最少只要 200k;

      2、通过单个 bitmap 可以完成去重操作,通过多个 bitmap 的且、或、异或、反等位操作可以完成日活、月活、小时分钟活跃、重度用户、新增用户、用户流向等绝大部分的统计计算,而且能在单机毫秒级完成,真正做到实时计算出结果,同比 Hadoop/Hive 离线计算执行“select distinct count…from…groupby join…”类似 SQL 的方式统计,往往需要几百台机器,耗用 30 分钟才能完成,对比非常悬殊,而且容易形成大量 SQL 任务调度和大表 join 给集群带来繁重压力。

      (二)BitMap 聚合计算

      通过多个不同维度的 bitmap 聚合计算,来解决离线统计里复杂的 join 问题,几乎可以涵盖所有用户统计相关的场景:

      去重用户:求 1 的总数

      活跃用户:   取或 bitmap1 | bitmap2

      非活跃用户:取反:——bitmap1

      重度用户:取且:Bitmap1 & bitmap2

      留存用户:取且再求百分比:Bitmap1 & Bitmap2 相对于 Bitmap1 的百分比

      新增用户:取或加异或:(Bitmap1 | bitmap2)^bitmap1

      流失用户: Bitmap1 相对于 bitmap2 的新增用户

      用户流向:app1time1 的流失用户 &app2time2

      多种指标组合:Bitmap1 & bitmap2 & bitmap3 &…

      等等

    image.png

      按照不同维度生成用户 bitmap 后,会得到如下面表格描述的数据结构:

    image.png

      我们可以看到,这个数据结构是个大的 0,1 矩阵,每一行代表某维度取值的用户 bitmap,把 1 累计可以求的此维度取值的用户指标,比如 hw 机型有多少用户在使用。每一列实际上可以获取到该用户的画像,比如 u6 用户用 oppo 机型、经常在北京和深圳等等,维度越多,画像信息越详细。另外,全盘用户的矩阵结构还有更深远的意义,我们在机器学习推荐中,基于特征处理后的 01 矩阵,可以完成大量的算法训练。

      实际上,bitmap 的维度组合还有一些复杂性问题需要权衡,比如维度 A(共 10 个取值) 和维度 B(共 10 个取值),如果聚合 AB,有两种方式:

      第 1 种,An&Bn,共 10+10=20 个 bitmap;

      第 2 种,An_Bn,共 10*10=100 个 bitmap。

      第 1 种存在数据叠加的影响,第 2 种不存在;

      第 1 种消耗更少的空间,第 2 种消耗更多空间,但是根据业务实际数据出现建立 bitmap,实际占用空间小于理论组合全部值(比如 mi_kashi 不存在)。

      (三)  Bitmap 压缩分析

      对于 bitmap 数量很多的场景,压缩有利于节省大量空间,对于 20 亿的用户 id,需要 20 亿 bit 约 238m 大小,压缩后占用空间最少只要 200k。

      按照灯塔当前业务流量,42 亿范围的 id 不会全部来,去重后 1-2 亿进入 bitmap,按照 2:42 的数据分布,压缩后还是能省很多空间。

      如果业务流量单位时间内(10 秒),42 亿用户全部来或者来 30 多亿,这时 bitmap 大部分为 1,压缩率反而很高,空间耗用不大。反而,对于只来 10-20 亿去重用户,这是要面临极端最坏的情况,数据分布广且稀疏,压缩有限,空间耗用很大。

      不同的压缩算法压缩率和耗时成反比,考虑实时性和空间节省,选用压缩率和耗时比较平衡的 gzip 压缩。

      (四)流式处理 +Bitmap 实时计算框架

      将离线批量处理改成消息流式实时处理,并按照上面基于 bitmap 做去重和聚合的思路,我们得到下面新的架构:借助 flink 的 SQL 能力做清洗逻辑,并提供基于 SQL 的去重和统计 udf 的封装给到业务分析人员使用,构建一个分布式的 bitmap 集群服务来提供 bitmap 的计算引擎支持,统计结果的数据实时写到数据库里提供报表展示。

    image.png

      注意到,上面的架构里增加来一个 ID 查询服务的模块,它用来负责将手机 IMEI 号在线查询转换为数字 ID。

      1、初始化:通过离线任务,按照最后活跃时间初始化用户 id 的数字序号,很久没来的用户放前面,最近的用户放后面,新增的用户在后面加 1,这样直接从 bitmap 的数字 ID 范围知道是大致什么时间的用户,目前约 50 亿范围的用户 id,除去虚假用户和僵尸用户,还有 20 亿左右正常用户。结果:仅通过数字序号可以区别最近的用户还是很久以前的。

      2、运行时:

    image.png

      未来:手机设备上,灯塔 sdk 直接携带设备 ID 的数字序号进入通道,逐步减少 id 查询,也就是说,未来对市场上几十亿手机设备,腾讯都能有一个除 imei 外自己的数字编号,这样会极大提升后台的大数据统计分析能力。

      (五)BitMap 的空间耗用

      1、大范围数字的空间浪费问题,如果不分区,一个值为 20 亿的数字需要耗用 238m 的空间;

    image.png

      2、分区 bitmap 的优势和问题,对于数字最大范围为 20 亿,按照不同的大小分区如下:如果每个分区很大,那么少量分布均匀的数字很容易占满所有分区;如果每个分区很小,分区数(key 的数量)就很多,key 的空间开销也很大。那么如何做到最优的空间消耗呢?

    image.png

      3、RoaringBitmap 的核心原理和不足:

      RoaringBitmap(官网地址,论文地址)是 druid、spark、hive 等很多大数据框架依赖的 bitmap 核心组件,我们先看看它是怎么做到空间优化的。

      RoaringBitmap 将一个整型数字拆分成高低 2 个短整型,并共用高位做 key,可以知道最大分区为 65535,低位做 value,可以用一个 short[][] 来存储,相同 key 的 value 存储在同一个 short[] 里,进行二分查找去重,当 value 的数量到达 4096 时,空间消耗已经等同于一个长度为 65535 的 bitmap,这时进行 bitmap 转换。 RoaringBitmap 在理论上通过高低分位成两个 short 类型数字,从而有效节省数据量小时的空间开销,并在数据增长到临界点 4096 时转换成 bitmap,数据量大时不再增长空间开销。

    image.png

      但是 RoaringBitmap 在落地的实现和应用中仍然通常在面临以下问题,不能做到性能和空间最优:

      高低分位后,实际上形成一个 65535*4096 的固定分区,对不同的数据特点,不能灵活设置分区大小和分区数量以满足不同数据范围和不同增长幅度的场景需求;

      在其 java 的实现版本里,由于 short 数组的动态变长,产生大量的无用对象不能及时垃圾回收(gc),而且只有当每个分区抵达 4096 数量时才能转为 bitmap 停止内存增长,容易导致在分区均匀情况下接近 4096 的时候空间开销很大,这时 bitmap 的数量很少,而 65535 个 short[] 动态增长产生的大量垃圾内存,其实际空间消耗已经远远超出理论的预估值。

      耗时慢,由于二分查找去重需要进行数组排序,会产生额外的性能消耗,特别是数据量低于 5000 万时,二分查找的性能并不比线性查找有优势,反而耗时更多。当数据量很大时,数组结构已经转成 bitmap,此时二分查找已经不再起作用。

      4、原创实现的高效 ArrayBitmap

      为了克服数据量小而且稀疏时导致的 bitmap 空间浪费问题,经过实践摸索寻找到一种动态增长的分桶数组结合 bitmap 数据结构的新设计方案来解决,经过大量测试证明,相对于 RoaringBitmap 有更好的性能和更优的内存空间消耗。

    image.png

      性能测试对比:

      经过和 roaring bitmap 不同数据大小的测试对比(20 亿范围随机),情况如下:

      10 万、50 万、100 万、500 万、1000 万数据范围:内存占用略同于 roaring bitmap,但耗时只有一半;

      5000 万数据:由于超过 3000 万转 bitmap 存在拷贝空间耗用,内存占用大于 roaring bitmap,但是耗时更低;

      1 亿数据:内存占用和 roaring bitmap 接近,但是耗时只有三分之一。

      2 亿及以上数据:内存占用低于 roaring bitmap,耗时只有四分之一。

      为了方便读者理解上面的思想,作者抽取出了两个简化的 java 实现类供参考,CoolBitSet.java 实现了 bitmap 的所有操作,CoolBitMap.java 是集成了数组和 bitmap 存储的高级结构,可在附件下载。

      (六)锋刃大数据平台的建立

      在成功解决了以上 bitmap 的各种问题后,经过 1 年多的建设,基于流式处理结合 bitmap 技术,从最开始的架构方案和程序 demo,已经实施落地为完整的大数据计算系统“锋刃” ,系统边界不仅解决实时计算,还包括离线提速和 OLAP,和当前数据工厂( Hadoop+Hive )互补,并且作为平台提供 bitmap 结构的文件存储,以及 OLAP 的大数据分析系统。PCG 运营数据应用框架团队提供锋刃平台开发和场景实施支持。

      七、业务场景实施及架构升级

      (一)腾讯灯塔实时统计上线

      腾讯灯塔产品介绍:

      腾讯灯塔是基于腾讯海量大数据开发的移动应用智能数据分析平台,聚焦数据驱动用户增长,为业务提供分析云与营销云服务。提供包括应用分析、广告效果监测、广告渠道反作弊、DMP 标签、市场指数等全链路大数据运营服务。腾讯灯塔秉承独立第三方的数据服务理念,去伪存真,指引有价值的增长。目前日均处理 4000 亿 + 日志,覆盖 MAU 13 亿,积累 7 大类,1000+ 标签。

      产品官网:beacon.qq.com

      1、灯塔实时计算经历“实时清洗上线—实时统计开发实施—试运行 1 个月—故障演练”共 3 个月,目前已经全量上线,所有产品可以查看一维 1 分钟和 10 分钟到实时新增、启动用户、启动次数。当前运行状况正常。

    image.png

      2、确定了实时系统服务保障量化指标,保证实时查看结果,对延迟情况保障:平均延时不超过 5 分钟,异常延时(版本更新重启等)不超过 30 分钟,超过 30 分钟属故障。vip 产品(1 分钟,10 分钟,日)保证和离线统计结果偏差不超过万分之五,长尾产品结果偏差不超过千分之五。

      3、数据核对情况:以 10 分钟为标准,目前实时计算结果和离线统计结果核对一致。1 分钟离线没有统计,日统计离线有策略补充基准不一样,经过和灯塔业务确认,统一了核对结果。

      资源耗用情况:

      约 35 台机器(去重服务:6 台 m10,flink:11 台 m10,去重 dcache:4 台 m10 共 200g,id server:10 台 docker 合计 1 台 m10,id server dcache:10 台 m10+3ts80)。

      (二)腾讯某安全产品场景离线提速上线

      需求:当前离线 hive 计算每日 25 亿数量大 app 的卸载留存很难算出,复杂任务计算耗时从早上 8 点到晚上 11 点。

      方案:现改用 bitmap 方案对 1200 个 app 进行优化提速,按 app_ 渠道 _ 日划分为 12 万个 bitmap 进行聚合计算。

      效果:现统计留存卸载的耗时为,日 10 秒,周 20 秒,月 1-2 分钟(90 个 bitmap 聚合)

      耗用资源:20 台机器(flink2 台、去重服务 7 台、dcache10 台(400g)、id 查询 1 台)

      目前已经上线一期、二期。

      (三)腾讯某大数据分析产品离线分析架构升级

      需求:当前离线 hive 跑 3000 亿全表 join1000 亿日表耗时 7 小时以上,难以满足模型频繁验证。

      方案:3000 亿全表按照 app 维度理论生成 3000 万的 bitmap(其中用于统计的数量在 100 以上有 200 万),1000 亿日表用于统计的数量 100 以上的有 48 万,20 亿用户大盘表生成 1 个 bitmap,通过三类 bitmap 求新增并更新历史全表和大盘用户表。

    image.png

      (四)ABTest 实时数据分析平台

      1、ABTest 的应用场景可以分为两大类型:

      (1)、算法类:浏览器资讯、广告、搜索、推送

      (2)、运营活动:浏览器框架改版、浏览器 vivo 装机新用户推送、应用宝活动类

      2、ABTest 需求:

      为了衡量算法投放前后或者是运营行为活动前后的效果,我们需要实时计算下述指标及综合指标的前后变化,并且通过用户标签(搜索类、看资讯类、点快链类、无行为类)划分人群来分析。

      (1)、PV,UV,CTR;活跃,留存,新增,收入… 等实时/离线指标提升

      (2)、模型量化计算综合提升

      如下图,需要通过实时计算将表格内的统计指标完成:

    image.png

      3、Abtest 系统架构方案:

    image.png

      4、ABtest 实时数据分析平台上线

      之前几个小时才能看到线上数据,现在只要五分钟!

      实时数据能让我们能更快的看到实验数据,及时发现并下线异常实验。同时也能实时监控实验,及大盘核心指标,发现异常数据。更快发现问题就能更及时解决问题,从而降低异常对线上用户的的影响。

    image.png

      (五)业务实施推动架构升级

      在实施上线以上实时统计、离线加速的业务场景,业务系统获得了高性能的同时,也暴露了在高可用性和高可靠性的某些不足,为此,也推动着锋刃实施团队进行自身的架构升级。

      1、首先 flink 的清洗和去重改造成基于消息通道的生产消费模式,借助消息 offset 消费位可以更准确的故障恢复消费。

      2、增加配置平台工具化方便业务配置自己的清洗逻辑、统计逻辑、聚合逻辑等。

    image.png

      3、我们发现,锋刃系统大部分的时间精力耗在上面的虚线框内,实现一个分布式的 bitmap 计算引擎、内存结构、及持久化存储上,以及稳定性保障上。将 bitmap 引擎迁移到部门 kv 存储产品 decache 和 bdb 上,并提供专门的热备、故障恢复、冷热切换、内存管理、分布式扩容等特性。这样锋刃复杂繁重的去重服务模块就简化成一个代理模块,可以更专注在业务需求的满足上。如下图:

    image.png

      八、OLAP 的愿景目标

      我们的大数据统计需求其实可以归纳为两大类型:

      关键维度的实时监控:适合少量关键维度比如 app 的去重用户、新增用户指标监控,周期性强,每分钟每天都需要统计输出。

      所有维度的 OLAP 查询:适合业务的自定义排查分析,比如一次促销活动后,新增用户指标上去了,业务人员想通过地区、版本、版面栏目、动作等多种维度信息分析新增用户的构成,这是一种非周期性的排查分析需求。之前这样的特定需求都是业务方提交给数据分析人员专门写 hive 离线任务去完成。如果我们的大数据 OLAP 能力足够强大,可以让业务和产品人员完成所有维度的自定义查询,而且能在 5 秒内接近实时得到查询结果。可以很大提升我们的大数据统计效率和满足业务的灵活多样型,同时这样我们的数据分析人员也可以从繁琐的统计工作中得到释放,去转型做模型分析。

      总的来说,做到让用户“关键维度自助看实时监控、所有维度分析自助 OLAP”,彻底解放我们的技术人员,这是我们想通过技术手段实现的愿景。

      锋刃系统可以很好满足第 1 点的关键维度实时监控,但是要支持所有维度的统计,会产生大量的维度组合生成的 bitmap,并不适合走实时内存处理,并且高度灵活的根据维度取值来自定义查询,需要增加维度列式存储和索引设计。锋刃系统接下来需要在设计上增强对 OLAP 能力的满足。

      我们先看看以 druid 为代表的大数据 OLAP 技术的主要设计原理

      (一)Druid 的主要原理

    image.png

      简言之,druid 的设计原理可以通过上述步骤归纳:

      1、提出 rowid、时间戳、维度(多个)、指标(多个)的 OLAP 数据模型,并按列压缩存储,导入明细数据时设置 rollup 为 true 可以实现自动上钻合并,比如点击数累加。

      2、在数据导入时,进行预计算,根据维度取值生成 rowid 的 bitmap 索引,而锋刃系统则是根据业务的特点,基于手机用户(IMEI)生成 bitmap 索引,这是两者的本质区别。

      3 和 4、当执行带维度条件的 SQL 语句时,将 gd 和 1.1 对应的 bitmap 做聚合后得到关联的 rowid

      5、通过关联的 rowid 找到列存储对应的指标点击数,进行累加得到最后结果

      由于列存储和 bitmap 索引机制的高效性,druid 不需要遍历整个数据集也不需要读取整行数据就能接近实时的计算出结果。

      但是 druid 在解决海量用户精确去重存在以下不足:

      由于 druid 的指标只能是数字,imei 无法当作指标,只能当作维度,几十亿 imei 会产生几十亿的 bitmap 索引,对内存会产生压力导致益出风险;

      druid 是按行号建立 bitmap 索引,只能做根据维度取值的关联,找出关联行,但是 bitmap 索引不做 imei 去重。去重只能通过常规的 distinct 方法完成,对于几十亿的 imei 去重耗时长,容易超时。

      druid 要保证统计高精确性,必须要以明细存储,要牺牲导入时做聚合处理,增加查询时的处理压力。

      (二)druid、锋刃、impala 各自适用场景

      druid 最擅长解决“点击数/下载数”这样的指标,并且维度取值不是太大的业务场景;解决几十亿 imei 统计场景比较吃力,需要约束业务范围和数据量,按 app 和业务分类分表,针对不同业务特定分析。但是对于含有历史新增 imei 去重的 OLAP、以及多宽表关联仍然不太合适。

      如前面提到的,锋刃当前适合解决预先定义的关键维度的实时统计和离线统计,是针对 imei 场景的高清确性的,但是设计上还不能覆盖所有维度的自定义 OLAP。

      impala 适合解决数据范围不大的集群内存能覆盖的业务场景,超出内存限制性能会直线下降。

      (三)统一的 OLAP 架构方案

      如果在 OLAP 架构上没有统一规划,完全由各业务团队自由搭建,就会形成基于 druid,impala,kudu,kylin 等各式各样框架的方案解决各自业务小范围需求的局面,造成功能重叠及人员浪费,而且长期来看业务团队自身也不具备强大的运维能力。如果我们完全自研一套 OLAP 系统,比如在锋刃上实现自研 rowid 反向索引、分布式节点存储、查询、任务调度等 druid 的功能,到最后测试稳定可运行,也需要耗费很久时间,业务团队面临用户压力,没有足够的耐心等待。

      所以我们在保持自研能力的同时,也在构思可以用于马上满足业务需求的架构集成方案,把锋刃和 druid 的优势整合进来,虽然底层设计没打通,但是通过上层的集成和封装能得到一套统一的 OLAP 架构方案。

      1、Cube 模型归纳

      经过思考,首先架构方案需要满足一个 cube 的索引模型,才能很好支持自定义 OLAP 查询,由于维度长短不齐,这是一个看上去不规整立方体(cube),可以通过时间、维度、取值切蛋糕似得拿到 rowid 和 imei 的 bitmap 索引。这样就能很快找到维度条件关联的 rowid 计算 count 类指标,并拿到对应的 imei 的 bitmap 计算用户去重类指标。

      Cube[t][d][v] = bitmap(rowid) ,bitmap(imei)

      t:时间 (Z 轴) ,d:维度 (Y 轴) ,v:取值 (X 轴)

      横切:查找 t2 时间数据,cube[t2][ ][ ]

      竖切:查找 d2 维度数据, cube[ ][d2][ ]

      切块:查找 t0-t1 时间,d0=v0 and d0=v1 的数据,cube[<2][d0][<2] (红框内)

    image.png

      2、锋刃 +druid 的 OLAP 架构方案

      如果我们不是直接自研实现,而是把锋刃和 druid 通过如下架构方案集成,也是可以间接满足上面的 cube 的索引模型,虽然看上去有一点小别扭。

      (1)锋刃继续承担消息的接入、实时清洗、和用户去重,这里把用户去重分成上面归纳的两种类型,一类是实时出的关键指标,基于内存结构;一类是可适当延迟出的所有维度指标,基于持久化存储,把这两部分的用户去重结果都导入到 druid。

      (2)Druid 承担所有维度的自定义查询,由于锋刃完成了用户去重的功能,druid 除了可以快速根据自定义维度过滤,并完成 count 类指标统计外,还可以同时查到用户去重的结果,结果记录是按照 group 展开的。

    image.png

      我们注意到上面的方案还有一点缺陷,如果查出一个时间范围内的多条用户结果,不能通过 druid 直接合并显示,这时需要返回锋刃系统找到对应的用户 bitmap 再做去重后返回结果。

    image.png

      (3)我们把用户的自定义查询过程封装成一个统一的输入输出如下,这样看上去就是一个基本实现 OLAP 功能的完整方案了。

      总   结

      本文从集群压力到大数据平台整体架构,再到实时优化的切入,一步步阐述了锋刃大数据系统产生的来龙去脉,重点介绍了流式处理结合 bitmap 技术架构方案的主要原理,相关业务场景实施上线,以及后续的 OLAP 目标规划。关于锋刃大数据系统更多的内容,请参考锋刃团队后续的设计文档、使用指南、以及开源计划。

    转载于:https://www.cnblogs.com/davidwang456/articles/10021916.html

    展开全文
  • 2011年5月金融统计数据报告 一、广义货币增长15.1% 5月末,广义货币(M2)余额76.34万亿元,同比增长15.1%,分别比上月末和上年同期低0.2和5.9个百分点;狭义货币(M1)余额26.93万亿元,同比增长12.7%,分别比上月末...

      2011年5月金融统计数据报告

       一、广义货币增长15.1%

      5月末,广义货币(M2)余额76.34万亿元,同比增长15.1%,分别比上月末和上年同期低0.2和5.9个百分点;狭义货币(M1)余额26.93万亿元,同比增长12.7%,分别比上月末和上年同期低0.2和17.2个百分点;流通中货币(M0)余额4.46万亿元,同比增长15.4%。当月净回笼现金894亿元,现金投放回笼正常。

      二、人民币贷款增加5516亿元,外币贷款增加130亿美元

      5月末,本外币贷款余额54.0万亿元,同比增长16.9%。人民币贷款余额50.77万亿元,同比增长17.1%,分别比上月末和上年同期低0.4和4.4个百分点。当月人民币贷款增加5516亿元,同比少增1005亿元。分部门看,住户贷款增加2175亿元,其中,短期贷款增加912亿元,中长期贷款增加1263亿元;非金融企业及其他部门贷款增加3249亿元,其中,短期贷款增加1386亿元,中长期贷款增加1184亿元,票据融资增加568亿元。外币贷款余额4981亿美元,同比增长21.2%;当月外币贷款增加130亿美元,同比多增146亿美元。

      三、人民币存款增加1.11万亿元,外币存款增加11亿美元

      5月末,本外币存款余额78.28万亿元,同比增长17.0%。人民币存款余额76.73万亿元,同比增长17.1%,分别比上月末和上年同期低0.2和3.9个百分点。当月人民币存款增加1.11万亿元,同比多增195亿元。其中,住户存款增加713亿元,非金融企业存款增加4697亿元,财政性存款增加3531亿元。外币存款余额2391亿美元,同比增长17.1%;当月外币存款增加11亿美元,同比多增50亿美元。

      四、银行间市场交易活跃,市场利率有所上升

      5月份银行间市场人民币交易累计成交17.86万亿元,日均成交8505亿元,日均同比多成交1492亿元,同比增长21.3%。

      5月份银行间市场同业拆借月加权平均利率为2.93%,比上月上升0.77个百分点;质押式债券回购月加权平均利率为3.03%,比上月上升0.81个百分点。

      注:贷款余额已扣除2011年3月份核销历史政策性财务挂账924亿元。

    展开全文
  • 导读 国家统计局21日发布的数据显示,中国大陆人口逼近14亿,男比女多3164万人!不少女性问,为何男比女多,“我还是单身呢”?网友回复亮了...男:女=104.64:100!人数差三万 国家统计局局长宁吉喆21日说,截至...
  • 国家工信部和统计局等相关部门的数据显示,2017年玩具行业产销率97.8%,主营业务收入2357.1亿元,同比增长8.5%;利润总额127.8亿元,同比增长8.8%。综合各方数据估测,2017年中国玩具市场整体消费680亿人民币,同比...
  • 【阅读原文】  作者: 楠沨  ...房地产经济愈发不被看好,P2P面临大洗牌,千亿资本何去何从?   据研究院数据中心统计,截至2016年10月底,我国 P2P贷款余额已经攀升至7,470亿元左右,环比增长6.
  • 广东作为我国经济第一大省,GDP总量已经连续30年排在全国第一位,作为全国经济最大的...下面是根据2018年统计数据统计到的目前广东营业收入达到1000亿以上的企业:1、平安集团(深圳)2018年平安集团营业收入是9...
  • 千亿银行外溢资金扎堆信托理财

    千次阅读 2011-06-08 14:37:00
    央行统计数据显示,4月份的人民币存款增加3377亿元,同比少增8325亿元;同时各家银行4月份的居民储蓄存款锐减,其中住户存款(较居民户范围更宽,统计上包含了个体经营户存款)的净减少额就达到了4678亿元之多。 业内...
  • 中关村在线消息:据悉,近日工信部给出的最新数据显示,截至11月底三家基础电信企业的固定互联网宽带接入用户总数达4.52亿户,其中,光纤接入(FTTH/O)用户4.18亿户,占固定互联网宽带接入用户总数的92.5%。...
  • 1 前言1.1 绪论数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。迈的过去,将会海阔天空!迈不过去,就要做好准备:很可能有几周...
  • 在工程端渠道,国产品牌美 的、格力、海尔占比居前三,大金、日立分列四、五,整体上国产品牌在工程端渠道拥有较大优势,特别是在 轨道交通项目方面,2018 年国产品牌囊括了接近 70%的市场份额(产业在线数据统计)...
  • 相关数据统计显示,去年全年,华为总营收为925亿美元,逼近千亿美元大关。而仅到今年6月底,华为的总营收就已达490亿美元,同比增长15%。而今年下半年华为动作频繁,在接下来的一个月想要全年...
  • 此前,国家统计局发布了10月份CPI及PPI,数据显示,入冬以来能源价格打开上升通道,居民用煤、液化石油气、柴油、汽油价格均现涨幅。与传统能源相比,风电、光伏、光热发电等新能源越来越多的被大众提起,而今年最热...
  • 缓慢变化维 4.1 什么是缓慢变化维(SCD) 1、缓慢变化维简介 缓慢变化维,简称SCD(Slowly Changing ...例如:用根据用户维度,统计不同出生年份的消费金额占比。(80后、90后、00后)。 而期间,用户可能去修改用户数

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 193
精华内容 77
关键字:

统计千亿数据