近实时分析 – 对变化中的数据?供快速分析能力 前端
须要同时支持顺序和随机读/写的应用场景 sql
●在线交互式BI分析/决策辅助 数据库
○ 场景举例: 贷后风险实时监测,实时资产偏好视图,历史风险偏好趋势,市场监测 后端
○ 应用类型: 须要准实时的同步插入/修改,同时汇总分析和单条查询 浏览器
● 时间序列数据 安全
○ 场景举例: 股市行情数据; 欺诈检测和预防; 风险监控;线上实时反欺诈 服务器
○ 应用类型:须要实时捕获流数据,同时结合已有的T+1数据进行汇总、分析和计算 数据结构
● 机器日志数据分析 架构
○ 场景举例: 台机监控、故障预警 并发
○ 应用类型:须要过滤大量流数据,同时结合已有的T+1数据进行汇总、分析和计算
时速多少?他们在哪里?
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文件),将会很是不便。
• 成功将不一样领域的开源框架嫁接到一个统
一架构内,应对不一样类型的混合负载
• Batch Layer可应对数据的无限扩展
• Speed Layer可?供准实时的响应性能
• 须要大量的数据在不一样存储和格式中迁移,形成维护困难
• 数据结构从新声明或者数据修改都很困难
• Batch Layer和Speed Layer须要维护两套代码,但其实现逻辑须要一致
• 意外错误的捕获、处理和冲正很是复杂
• 前端查询的复杂度很是大,须要合并数据集
可是怎 样处理下面的问题 ?
● 怎么有效处理转换过程当中的错误?
● 如何定义将HBase数据转换成Parquet格式做业的周期?
● 从数据进入到报表中能体现之间的时延如何量化?
● 做业流程怎么保障不被其余操做打断?
改进点 :
● 只要一套系 统
●不须要后台定 时的批处理任务
● 轻松应对数据迟到和数据修正
●新数据当即用于在分析和 业务运营
• 扫描大数据量时吞吐率 高(列式存储和多副本机制)
目标 : 相对Parquet的扫?性能差距在2x以内
• 访问少许数据时延时低(主键索引和多数占优复制机制)
目标 : SSD上读写延时不超过1毫秒
• 相似的数据库语义(初期支持单行记录的ACID)
• 关系数据模型
相似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 的无缝对接
• 将对接更多处理引擎!
•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进行进一步的处理和供下游系统进一步分析
移动服务监听及跟踪工具
目标:
收集从移动App及后台服务发起的RPC程序调用重要的跟踪事件
服务监听及错误处理工具
需求:
>50亿条/天的写能力,且持续增加
快速定位错误并做出响应
更容易进行差错
在kudu以前,咱们的大数据分析pipeline大概是有这几种:
1. 数据源-> scribe打日志到HDFS -> MR/Hive/Spark -> HDFS
Parquet -> Impala -> 结果service这个数据流通常用来分析各类日志。
2. 数据源 -> 实时更新HBase/Mysql -> 天天批量导出Parquet->
Impala -> 结果serve这个数据流通常用来分析状态数据,也就是通常须要随机更新的数据,好比用户profile之类。
这两条数据流主要有几个问题:
改进后的数据流大概是这个样子:
1. 数据源 -> kafka -> ETL(Storm) -> kudu -> Impala
2. 数据源 -> kudu -> Impala
3. 数据流1 主要是为须要进一步作ETL的应用使用的,另外kafka能够当作一个buffer,当写吞吐有毛刺时,kafka能够作一个缓冲。若是应用严格的实时需求,就是只要数据源写入就必须可以查到,就须要使用数据流2。
环境:
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 关键字段
使用 impala 进行批加载 (INSERT INTO):
查询延时:
* HDFS parquet 文件复制因子= 3 , kudu 表复制因子= 3
*结果为每条查询执行5次并取平均值
Jd.com 中国第二大在线电商
• 点击流日志
• 应用/浏览器Trace日志
• 每条记录约70字段
• 150亿笔交易
• 高峰期每秒一千万条数据插入
• 集群200台服务器
业务需求:
架构说明:
业务需求:
架构说明:
客户流式计算测试要求实现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万条/秒
• 每一个节点12 块硬盘, 128GRAM
• Kudu 0.5.0+Impala 2.2+CDH 5.4
• TPC-H Scale Factor 100 (100GB)
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)
• 10 节点集群 (9 worker, 1 master)
• HBase 1.0, Phoenix 4.3
• TPC-H LINEITEM 表(60亿行记录)
• YCSB 0.5.0-snapshot
• 10 节点集群
(9 worker, 1 master)
• HBase 1.0
• 1亿条记录, 1千万 ops
多用户并发查询下性能最好