• 大数据的近实时分析系统架构


    近实时分析的场景

    近实时分析 – 对变化中的数据?供快速分析能力

    • 分析现实世界中正在发生的事件的能力,结合历史数据和实时流数据进行汇总分析、预测和明细查询
    • 绝对实时和批量不可调和,"近实时" 的意思是这是人机交互中能感受的尺度(秒级),而不是机器自动处理的实时性量级(ns / us级)
    • 数据价值从非结构化到结构化,分析从非范式到范式。SQL是结构化分析的最终手段,但是:
      • 汇总分析(顺序扫?)与明细查询(随机扫描)
      • 小数据量下都不是问题;但是放在海量数据下看,两种负载难以调和
      • 海量数据和实时流窗口上的SQL引擎实现也完全不同
    • 更接近实时Hadoop上是完全可行的,但是实时性要求会带来架构上的巨大变化

    典型场景

    需要同时支持顺序和随机读/写的应用场景

    在线交互式BI分析/决策辅助

    场景举例: 贷后风险实时监测,实时资产偏好视图,历史风险偏好趋势,市场监测

    应用类型: 需要准实时的同步插入/修改,同时汇总分析和单条查询

    时间序列数据

    场景举例: 股市行情数据; 欺诈检测和预防; 风险监控;线上实时反欺诈

    应用类型:需要实时捕获流数据,同时结合已有的T+1数据进行汇总、分析和计算

    机器日志数据分析

    场景举例: 台机监控、故障预警

    应用类型:需要过滤大量流数据,同时结合已有的T+1数据进行汇总、分析和计算

       

    更实时的、交互式BI

    传统数仓中增加实时汇总分析能力

       

       

    物联网(IoT)产生的实时分析和预测

       

    车联网

    • 历史分析
      • 开发人员希望知道如何优化充电性能
      • 新版本软件升级后随着时间推移是如何影响汽车性能的?
    • 实时洞察
      • 客户希望知道是否是未成年人在驾驶。他们加速多快?

        时速多少?他们在哪里?

      • 汽车设备——比如在服务前或服务中拿到最新的诊断数据包

       

    源于互联网的Lambda 架构

       

    Lambda 架构

       

       

    企业应用中Lambda的典型实现方式

       

       

    车联网的实时数据处理

    Hbase Provides:

    • Fast, Random Read & Write Access

    • "Mini-scans"

    • Scale-out architecture capable of serving Big Data to many users

       

    车辆网历史数据分析方案

       

       

    构建在混合架构上的分析管道

       

    但是,HBase+HDFS混合架构的复杂性无处不在

    同时供高性能的顺序扫?和随机查询,避免使用HBase+HDFS混合架构的复杂性:

    • 开发:必须编写复杂的代码来管理两个系统之间的数据传输及同步

    • 运维:必须管理跨多个不同系统的一致性备份、安全策略以及监控

    • 业务:新数据从达到HBase到HDFS中有时延,不能马上供分析

    在实际运行中,系统通常会遇到数据延时达到,因此需要对过去的数据进行修正等。如果使用不可更改的存储(如HDFS文件),将会非常不便。

       

    Lambda 复杂性一:同步

       

    Lambda 复杂性二:错误难以诊断

       

       

    Lambda Pros & Cons

    • Pros

      • 成功将不同领域的开源框架嫁接到一个统

      一架构内,应对不同类型的混合负载

      • Batch Layer可应对数据的无限扩展

      • Speed Layer可?供准实时的响应性能

    •  Cons - Complexity

      • 需要大量的数据在不同存储和格式中迁移,造成维护困难

      • 数据结构重新声明或者数据修改都很困难

      • Batch Layer和Speed Layer需要维护两套代码,但其实现逻辑需要一致

      • 意外错误的捕获、处理和冲正非常复杂

      • 前端查询的复杂度非常大,需要合并数据集

    基于Kudu实现简单的近实时分析

    当前的欺诈检测架构:存储架构太复杂

       

     但是怎 样处理下面的问题 ?

    怎么有效处理转换过程中的错误?

    如何定义将HBase数据转换成Parquet格式作业的周期?

    从数据进入到报表中能体现之间的时延如何量化?

    作业流程怎么保障不被其他操作打断?

    使用Kudu的Hadoop实时数据分析

       

    改进点 :

    只要一套系 统

    不需要后台定 时的批处理任务

    轻松应对数据迟到和数据修正

    新数据立即用于在分析和 业务运营

     

    Kudu: 在快速变化的数据上进行快速分析

       

       

    Kudu的设计目标

     扫描大数据量时吞吐率 高(列式存储和多副本机制)

    目标 : 相对Parquet的扫?性能差距在2x之内

    访问少量数据时延时低(主键索引和多数占优复制机制)

    目标 : SSD上读写延时不超过1毫秒

    类似的数据库语义(初期支持单行记录的ACID)

    关系数据模型

    • SQL查询
    • "NoSQL"风格的扫?/插入/更新(Java客户端)

    Kudu的使用

    类似SQL 模式的表

    • 有限的列数 (不同于HBase/Cassandra)

    • 数据类型: BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, STRING, BINARY,TIMESTAMP

    • 一部分列构成联合主键

    • ALTER TABLE快速返回

    "NoSQL" 风格的 Java和C++ APIs

    • Insert(), Update(), Delete(), Upsert(), Scan()

    与MapReduce, Spark 和Impala 的无缝对接

    • 将对接更多处理引擎!

    车辆网:一致的架构处理异构的数据分析管道

       

    在CDH技术堆栈上的准实时分析技术

       

    基于OGG 的数据库日志解析和Apache Kudu 的实时分析

    •Kudu Adapter (Handler)帮助保持DB和Kudu之间基于日志解析的数据同步。

    •使用OGG Java API将DB事务解码为kudu特定的事务。

    •使用KUDU API在Kudu结束执行事务操作。

    •Kudu Adapter (Handler) 支持数据的Inserts, Updates, Upsert 及Deletes 事务操作.

       

    更通用的实时数据处理集成/分析架构

    • 与Apache Spark Streaming 集成进行real-time 的数据分析

    • 处理完的数据再接入Kafka进行进一步的处理和供下游系统进一步分析

    使用案例分享

       

    小米(MI) 简介

       

       

    使用案例1

    移动服务监听及跟踪工具

    目标:

    收集从移动App及后台服务发起的RPC程序调用重要的跟踪事件

    服务监听及错误处理工具

    需求:

       

    • 高写吞吐

      >50亿条/天的写能力,且持续增长

    • 快速查询最新记录并做响应

      快速定位错误并作出响应

    • 能够确保单条记录快速查询

      更容易进行差错

         

    没有Kudu 之前大 数据分析处理

       

       

    在kudu之前,我们的大数据分析pipeline大概是有这几种:

    1. 数据源-> scribe打日志到HDFS -> MR/Hive/Spark -> HDFS

    Parquet -> Impala -> 结果service这个数据流一般用来分析各种日志。

    2. 数据源 -> 实时更新HBase/Mysql -> 每天批量导出Parquet->

    Impala -> 结果serve这个数据流一般用来分析状态数据,也就是一般需要随机更新的数据,比如用户profile之类。

     这两条数据流主要有几个问题:

    1. 数据从生成到能够被高效查询的列存储,整个数据流延迟比较大,一般是小时级别到一天;
    2. 很多数据的日志到达时间和逻辑时间是不一致的,一般存在一些随机延迟。
    3. 比如很多mobile app统计应用,这些tracing event发生后,很可能过一段时间才被后端tracing server收集到。我们经常看到一些hive查询,分 析一天或者一小时的数据,但是要读2-3天或者多个小时的日志,然后过滤出实际想要的记录。
    4. 对于一些实时分析需求,有一些可以通过流处理来解决,不过他肯定没用SQL方便,另外流式处理只能做固定的数据分析,对ad-hoc查询无能为力kudu的特点正好可以来配合impala搭建实时ad-hoc分析应用。

    大数据分析管道- 因为Kudu

    改进后的数据流大概是这个样子:

    1. 数据源 -> kafka -> ETL(Storm) -> kudu -> Impala

    2. 数据源 -> kudu -> Impala

    3. 数据流1 主要是为需要进一步做ETL的应用使用的,另外kafka可以当做一个buffer,当写吞吐有毛刺时,kafka可以做一个缓冲。如果应用严格的实时需求,就是只要数据源写入就必须能够查到,就需要使用数据流2。

     

    案例1: Benchmark

    环境:

    • 71 节点集群
    • 硬件

      CPU: E5-2620 2.1GHz * 24 core Memory: 64GB

      Network: 1Gb Disk: 12 HDD

    • 软件

      Hadoop2.6/Impala 2.1/Kudu

    数据:

       

    1 天的服务器端跟踪数据

       

    ~26亿行记录

    ~270 bytes/行

    每条记录17 字段, 5 关键字段

    案例 1: Benchmark 结果

    使用 impala 进行批加载 (INSERT INTO):

       

    查询延时:

       

    * HDFS parquet 文件复制因子= 3 , kudu 表复制因子= 3

    *结果为每条查询执行5次并取平均值 

    案例2: 京东案例

       

    Jd.com 中国第二大在线电商

    1. 使用Kafka实时收集数据

      • 点击流日志

      • 应用/浏览器Trace日志

      • 每条记录约70字段

    2. 6/18 sale day

      • 150亿笔交易

      • 高峰期每秒一千万条数据插入

      • 集群200台服务器

    3. 查询使用JDBC -> Impala -> Kudu

       

    案例3 某互联网金融 使用 Kafka 、Spark 、Kudu 和Impala 构建

       

     业务需求:

    • 根据当前客户的操作行为进行风险等级实时分析,防范金融风险

    架构说明:

    • 数据源Stream API的数据由Kafka接入
    • Spark Streaming消费Kafka数据,并注入到Kudu中
    • 流数据接入Spark Streaming作业进行实时处理,并使用Mlib进行预测
    • 预测的结果保存到Kudu
    • 客户使用Impala或Spark SQL进行交互式结果查询
    • 分析工具使用JDBC接口访问数据进行分析

       

    案例4 某银行使用 Kafka 、Kudu 和Impala 实现准实时数据仓库应用

       

     业务需求:

    • 数仓应用建立在多维分析模型上,维度表需要根据需要保留历史记录

    架构说明:

    • 数据源Stream API的数据由Kafka接入到Spark Streaming或Flume,并保存到Kudu
    • 通过Impala对维度数据进行SCD操作:
      • SCD I: 存在即update
      • SCD II: 存在则先insert一条新记录,并更新历史记录,如End Time 或 Flag
    • 客户使用Impala进行交互式结果查询
    • 分析工具使用JDBC接口访问数据进行分析

    案例5 使用 Kafka、Kudu 和Impala实现准实时数据仓库分析应用

     

    业务要求:

    客户流式计算测试要求实现Hadoop产品从KAFKA快速加载数据,主要有2个应用场景:

    • Append模式即简单将记录添加到数据表中,类似MySQL的insert into,并需要保证数据不重复。

    • Insert_update模式即对于有主键的数据表,如果新的记录的主键在数据表中已存在,则用新的记录update旧的记录,如果新的记录的主键 在数据表中不存在,则将新的记录insert导数据表中。

    设计实现思路:

    1. 基于本次流式计算的测试要求,无论是Append还是Insert_update本来都可以通过使用HBase来实现,因为HBase的Rowkey可以保证数据的唯一性约束,达到Append去重的目的,而HBase的API也支持通过Rowkey去更新已经存在的数据。

    2. 但是在本次流计算测试的性能场景要求中,还需要测试混合负载,需要进行数据集的统计查询,即在入库的同时需要进行大量的SQL统计分析查询,还包括join操作。这样HBase肯定无法满足,因为HBase只适合于随机插入以及简单的Rowkey条件查询。

    所以我们最终选择了Kudu来完成,既可以满足快速的随机插入,包括去重和更新操作,同时支持并发的SQL查询的混合负载要求。

       

    总体架构设计

       

    • Append:Kudu是用于存储结构化的表。表有预定义的带类型的列(Columns),每张表有一个主键(primary key)。主键带有唯一性(uniqueness)限制,可作为索引用来支持快速的随机查询。如果我们使用insert()方法,通过Kudu主键的唯一性,我们可以达到去重的目的,当有重复数据导入的时候,Kudu自身会通过主键判断,如果存在,则直接丢弃。

    • Insert_update:Kudu源生提供了Upsert()方法,直接可以达到本次测试insert_update的目的,即根据主键判断,如果存在则更新该数据,否则则作为新的数据插入到Kudu

       

    测试数据集及测试结果

    本次测试主要用到了五个表:

    HDFS中的表主要用来SQL混合负载的join表,并验证Impala跨存储执行性能。

       

     Append,无重复

       

    Upsert,去重

       

    Upsert,去重时有SQL查询的混合负载

       

    稳定的入库速度

       

    0min-6min,

    指数行情:63万条/秒,

    现货行情:18万条/秒,

    委托:40万条/秒,

    成交:35万条/秒,

    总的吞吐在:160万条/秒

     

    案例6: 某车企的实时车辆网分析平台

       

    应用场景4:企业大数据中心 技术架构

       

    规划中的技术框架

       

    性能基准测试

    TPC-H (Analytics benchmark)

    • 集群由75个TS 和一个master构成

      • 每个节点12 块硬盘, 128GRAM

      • Kudu 0.5.0+Impala 2.2+CDH 5.4

      • TPC-H Scale Factor 100 (100GB)

    • 分析语句举例(6表关联统计分析):

    SELECT n_name, sum(l_extendedprice * (1 - l_discount)) as revenue FROM customer,

    orders, lineitem, supplier, nation, region WHERE c_custkey = o_custkey AND

    l_orderkey = o_orderkey AND l_suppkey = s_suppkey AND c_nationkey = s_nationkey

    AND s_nationkey = n_nationkey AND n_regionkey = r_regionkey AND r_name = 'ASIA'

    AND o_orderdate >= date '1994-01-01' AND o_orderdate < '1995-01-01' GROUP BY

    n_name ORDER BY revenue desc;

       

    - 对内存数据,Kudu性能比Parquet高31% (几何平均)

    - 对硬盘数据,Parquet性能应该比Kudu更好(larger IO requests)

    Kudu vs Phoenix

    • 10 节点集群 (9 worker, 1 master)

    • HBase 1.0, Phoenix 4.3

    • TPC-H LINEITEM 表(60亿行记录)

       

       

    与NoSQL数据库PK随机查询性能 (YCSB)

    • YCSB 0.5.0-snapshot

    • 10 节点集群

    (9 worker, 1 master)

    • HBase 1.0

    • 1亿条记录, 1千万 ops

     

       

    多用户并发查询下性能最好

  • 相关阅读:
    风讯DotNetCMS sp5安装笔记
    datalist中实现自动编号写法
    windows server 2008 自动登录设置
    C#软件监控外部程序运行状态
    WPF启动屏幕SplashScreen
    Windows Server 2019 在桌面上显示“我的电脑”
    使用jquery的load方法加载html页面,html引入的js无效
    sql查询文章上一篇下一篇
    C#调用user32.dll Win32的API函数
    C#调用dll提示"试图加载格式不正确的程序
  • 原文地址:https://www.cnblogs.com/starzy/p/10571955.html
Copyright © 2020-2023  润新知