分类 | 名称 | 简介 | 功能特点 | 使用场景 |
大数据存储 | HDFS | HDFS是一个分布式的文件系统,它具有高度的容错,高吞吐量,弹性伸缩等优点。是高度容错性和高吞吐量的海量数据存储解决方案。 | 高容错性 HDFS通过多方面保证数据的可靠性,多个副本并且分布到物理位置的不同服务器上,数据校验功能、后台的连续自检数据一致性功能保证了高容错。 高吞吐量 HDFS的通过机架感知、多副本可就近读取数据。另外HDFS可以并行从服务器集群中读写,增加文件读写的访问带宽。保证高吞吐。 线性扩展 HDFS可以在线动态扩容,PB到EB级集群任意扩展。 |
数据存储分析 HDFS有完善的生态,可快速的导入数据到HDFS存储起来,在HDFS的基础上进行分析处理。 历史数据备份 HDFS可轻松扩展到PB、EB级别的大容量,高吞吐量,容错性保证数据安全。 |
大数据存储 | Hbase | HBase 是一个高可靠、高性能、面向列的开源非关系型分布式数据库, 它是Hadoop的生态系统, 提供对数据的随机实时读/写访问。 | 易用性 HBase 采用 JAVA 语言编写, 并提供了易于使用的 JAVA API 供客户端访问, 基本能满足开发者的需求。 强一致性 不论是从客户端还是服务端的视角, HBase 都可以确保并发读写情况下的强一致性, WAL机制为此提供了可靠的保证。 可扩展性强 HBase 作为一款分布式数据库, 具有良好的可扩展性, 扩展方便, 可通过集群扩展不断增强集群的存储能力和请求处理能力。 |
要求写操作吞吐量高 HBase 单台 Regionserver 的写 QPS 可以稳定在 2K~3K , 并且可以通过集群扩展不断增强集群的扩展性, 理论上不存在上限。 海量数据持久化 HBase 是分布式数据库, 可以真正存储海量的数据, 真正解决传统关系型数据库的痛点。 大规模数据集中进行随机访问 HBase 是列式存储, 可以保证在大规模数据集情况下依然具有很好的随机访问性能。 无需全部的关系型数据库特性 HBase 不适用于具有join, 多级索引, 表关系复杂的数据模型场景中。 |
大数据存储 | KAFKA | KAFKA是一个分布式的流式平台。 | 弹性扩展 当服务器资源达到限制时候,Kafka 支持在不停服情况下弹性扩容/缩容节点。 大吞吐量 Kafka 支持以增加 partition 个数的方式,来增加整个 topic 的吞吐量。 |
消息队列 通过 Kafka 作为消息队列,解耦了收消息和发消息的服务,收发过程在毫秒级完成。 海量日志 记录各类访问日志,后端通过顺序读写等技术,增加吞吐量。 |
大数据存储 | Hive | hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为数据库表,并提供HiveSql查询功能。 | 面向超大规模数据集 基于Hadoop生态,Hive具有存储和计算的扩展能力,可支持高可达千亿级的数据集查询。。 支持多种数据格式 Hive支持多种格式数据,如纯文本、RCFile、Parquet、ORC等格式,以及HBase中的数据、ES中的数据等。Hive表一般使用ORC和Parquet格式,二者都是列式存储,压缩率很低,查询效率较高。 易于上手 Hive采用HiveSql的查询方式,将HiveSql查询转换为job在Hadoop集群上执行,使用非常方便。 内置大量UDF Hive内置了大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具。UDF种类非常丰富。 |
大数据集的批处理作业 如网络日志分析,统计网站某一时间段内的pv、uv,多维度的数据分析。 |
OALP | Presto | Presto是一种分布式SQL查询引擎,用于查询分布在一个或多个异构数据源上的大型数据集。 | 不是数据库 Presto不是传统意义上的数据库,也不是MySQL、PostgreSQL或者Oracle的代替品.它并不存储数据,是一款OLAP分析工具. 多数据源 Presto不仅可以访问HDFS,也可以操作不同的数据源,包括:RDBMS和其他的数据源(例如:Hive、Cassandra)等.一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析. 海量数据 擅长对海量数据(TB或者PB级别)进行复杂的计算分析. 支持SQL Presto 已经可以完全支持 ANSI SQL,并提供了一个 SQL Shell 给用户,用户可以直接使用ANSI SQL 进行数据查询和计算. 速度快 低延迟高并发的全内存流水线式计算,比Hive快一个数量级. |
准实时计算 基准数据若实时更新,Presto可快速完成计算,实现准实时计算的场景. 交互式查询 以SQL语言作为接口的分布式实时查询引擎,可以对PB级的数据进行快速的交互式查询. |
OALP | ClickHouse | ClickHouse是一个用于快速OLAP分析的列式数据库管理系统 | 快速的明细数据查询 数据按列存储,查询时,将列向量化处并行处理,高效利用cpu,来使用当前服务器上可用的所有资源,充分压榨机器性能,达到亿级数据查询毫秒级返回 多服务器分布式处理 数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行的在所有shard上进行处理。这些对用户来说是透明的。 |
高实时性要求 ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断高效的写入到表中,并且写入的过程中不会存在任何加锁的行为,可达到每秒写入数十万的写入性能 大规模事件和日志快速分析 clickhouse支持万亿级数据的数据分析需求,达到每秒处理几亿行的吞吐能力,快速返回查询结果 漏斗分析 clickhouse提供了专用漏斗函数windowFunnel(window)(timestamp, cond1, cond2, cond3, ...),可快速进行漏斗型数据分析 适合在线查询 在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。 |
OALP | Kudu | Kudu 是一个列式存储管理系统。支持水平可扩展,并具有高可用性特性。 | 快速的明细数据查询 数据存储在kudu,kudu与Impala紧密集成, impala将谓词下推到kudu,尽可能的接近底层kudu的底层,提高整体查询性能 高实时性要求 数据可直接低延迟的落入kudu中存储,通过impala进行查询,经内部测试,kudu实时写入性能达到每秒几万条数据。同时数据写入后首先存储在内存,可立即提供查询服务,实时性高。 数据频繁更新 Kudu将底层数据分为base数据文件和delta数据文件,有更新的数据写入delta文件,后期自动做数据的merge,所以支持数据的频繁更新操作 |
实时更新的应用 Kudu 通过高效的列式扫描提供了快速插入和更新的强大组合,从而在单个存储层上实现了实时分析用例,刚刚到达的数据就马上能被被终端用户使用访问到 时间序列应用 kudu可以对某几列数据进行hash分区,将数据均匀的打散在不同节点,对于访问时序数据,不存在热点数据问题,充分利用集群性能。 |
OALP | Kylin | Kylin是一个开源的分布式分析引擎,通过预计算构建cube实现快速查询分析。 | 交互式查询能力 通过Kylin,用户可以在kylin查询页面上与数据数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能 kylin Cube多维数据的计算 Cube由多个Cuboid组合而成,Cuboid上的数据是原始数据聚合的数据,因此创建Cube可以看作是在原始数据导入时做的一个预计算预处理的过程。Kylin的强大之处在于充分利用了Hadoop的MapReduce并行处理的能力,高效处理导入的数据 |
查询类型比较固定的数据分析 通过固定的查询类型构建cube,将所有的维度组合事先计算,存储于HBase中,以空间换时间,提供快速查询 数据与HADOOP紧密结合 数据存于HDFS,利用Hive将HDFS数据以关系数据方式存取,通过构建cube存储于Hbase |
平台 | Redash | Redash是一款融合28种数据源的可视化查询工具,同时可以制作报表,分享成果. | ad-hoc查询 可接入Presto/Hive/Clickhouse等查询工具,快速查询数据,方便快捷. 报表分析 拥有数十种可视化图表,支持制作Dashboard,可以管理分享报表. |
SQL查询分析 创建query,填写正常的SQL逻辑,对于查询结果进行排序过滤,做成图表. |
平台 | StreamHub | Stream Hub支持结构化日志,永久存储和方便的离线分析等 | kafka-connect Kafka Connect是一种用于在Kafka和其他系统之间可扩展的、可靠的流式传输数据的工具。它使得能够快速定义将大量数据集合移入和移出Kafka的连接器变得简单。 Kafka Connect可以获取整个数据库或从所有应用程序服务器收集指标到Kafka主题,使数据可用于低延迟的流处理。导出作业可以将数据从Kafka topic传输到二次存储和查询系统,或者传递到批处理系统以进行离线分析。 avro-java-sdk java版 此avro-java-sdk主要为用户向kafka集群发送avro序列化数据/从kafka集群消费avro序列化数据提供了统一的接口。 schema申请系统 schema申请系统旨在优化schema的申请流程,统一用户接入,申请,审批,测试流程,并提供校验,权限控制等功能,该系统旨在解决 1. 用户上线流程复杂,查错困难,无法自行校验;2. 过分依赖管理员,管理员成为瓶颈;3. 流程漏洞较多,使用混乱; json hub 该中间件部署在大数据平台上,对外提供http接口服务,接收client端的消息(post请求),将数据进行avro序列化后转发到kafka。 |
avro数据自动落入hive/hbase/es 用户可以使用sdk将avro数据发送到kafka中,kafka-connect可以将数据自动落入hive/hbase/es中 自助式申请schema 当用户需要申请schma时,只需要在schema申请平台上发起申请,审核通过后即可注册成功并生成相应jar包 |
平台 | Compute Platform | Compute Platform是一个基于Hadoop的分布式全流程开发平台,通过可视化交互式方式降低门槛、提升研发效率。 各业务可以通过平台轻松实现通用ETL,可以组合使用平台提供的算子深度定制。计算内核基于Spark、TensorFlow,缺省支持SparkMLlib、TensorFlow常用算法库,供开发者选用。同时开发者可以贡献自己的算子,分享给所有的开发者。 | 数据ETL 支持数据ETL处理;支持6+种数据源,覆盖MySQL,Hive,HBase,Presto,HDFS等;支持7+种数据加载,转换,提取等操作,覆盖Map,Filter,SQL,Python,Join,Split等 可视化开发 支持在线可视化编辑和开发;支持在线拖拽执行拓扑;支持在线开发Python代码;支持在线开发SQL脚本; 算子商店 缺省支持SparkMLlib、TensorFlow常用算法库,开发者可以依据接口标准实现自己的算子贡献给平台,赋能技术团队 |
大规模ETL 大规模ETL;业务需求;数据处理 在线可视化开发 在线可视化开发;在线开发Python代码;在线开发SQL脚本 统计分析 适用于数据统计分析等业务场景,使用算子商店提供的能力快速完成开发 |
大数据计算 | Flink | Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台,在流式处理方面具有高吞吐、低延迟、高性能的特点,支持Exactly-once语义、高度灵活的窗口操作、event time等等 | 快速 快,是Flink的主要特点。利用基于内存的数据流,并将迭代处理算法深度集成到系统的运行时中,这样,Flink使得系统能够以极快的速度处理数据密集型和迭代任务。 可靠 轻量级分布式快照(Snapshot)实现的容错,在流处理失败时,通过这些Snapshot可以恢复数据流处理,支持Exactly-once语义。 强大 灵活的窗口,丰富的表达能力,基于事件时间处理机制配合水位线功能可以有效地处理乱序流、解决消息延迟的问题。 易用 面向用户提供了简单的DataStream和table sql API,在无需进行任何配置的情况下,Flink就可以运行在Yarn上。 |
实时ETL 对事实表的每一条新增记录进行转化计算,同时join维度表来扩充记录字段,将数据清洗的延迟控制在秒以内。 实时监控报警 对重要的事件做实时处理统计,动态获取报警规则,针对报警事件进行自定义处理。 统计网站PV,UV 在大数据量下,传统数据库或者HADOOP(hbase...)的count效率都不高。使用flink对用户访问记录增量做实时的窗口计算,提供更高的吞吐和更低的延时。 风控安全管理 使用CEP自定义匹配规则用来检测无尽数据流中的复杂事件。例如在安全应用中侦测异常行为;在金融应用中查找价格、交易量和其他行为的模式。 |
大数据计算 | Spark | Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎 | 快速 Apache Spark使用最先进的DAG调度程序,查询优化器和物理执行引擎,实现批处理和流数据处理的高性能。与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,而基于磁盘的运算也要快10倍以上。 易用 Spark支持Java、Python和Scala的API,还支持超过80种高级算子,可以轻松构建并行应用程序。 通用 Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。这些不同类型的处理都可以在同一应用中无缝使用。 到处运行 Spark可以使用自带的集群模式运行,也可以在EC2、在Hadoop Yarn上、Mesos上或Kubernetes上运行,同时可以访问HDFS、Alluxio、Cassandra、HBase、Hive及其它上百种数据源中的数据。 |
批处理 Spark的核心提供了分布式任务调度和基本的I/O功能,提供了基本的程序抽象RDD(弹性分布式数据集)。RDD是一个可以并行操作并有容错机制的数据集合,简化了编程复杂性,操纵RDD的方法类似于操纵本地数据集合。另外Spark SQL提供了领域特定语言,可使用Scala、Java或Python来操纵DataFrame/DataSet。这些都可用于批处理。 交互式查询或执行代码 Spark Thriftserver支持使用使用命令行界面和ODBC/JDBC服务器执行SQL。而交互式的Python和Scala的Shell可以使用Spark集群来验证解决问题的方法,而不是像以前一样,需要打包、上传集群、验证等。 流式计算 Spark Streaming充分利用Spark核心的快速调度能力来运行流分析。它截取小批量的数据并对之运行RDD转换。这种设计使流分析可在同一个引擎内使用同一组为批量分析编写而撰写的应用程序代码。 机器学习 MLlib是Spark上分布式机器学习框架,可使用许多常见的机器学习和统计算法,简化大规模机器学习时间 图形处理 GraphX是Spark上的分布式图形处理框架。它提供了一组API,可用于表达图表计算并可以模拟Pregel抽象化。GraphX还对这种抽象化提供了优化运行 |
调度 | YARN | YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统。 | 资源管理 YARN 通过一个全局的资源管理器(Resource Manager)以及运行在集群中所有节点上的节点管理器(Node Manager)在各种竞争的应用程序之间仲裁可用的集群资源,创建资源容器。支持内存和CPU的管理与分配。 资源调度 YARN 调度器可以根据既定策略为应用程序分配资源。YARN 有三种调度器:FIFO调度器(FIFO Scheduler),容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)。 任务调度与监控 YARN 通过一个称为ApplicationMaster的轻量型进程实例来协调应用程序内的所有任务的执行。这包括监视任务,重新启动失败的任务,推测性地运行缓慢的任务,以及计算应用程序计数器值的总和。 |
运行各类分布式计算 MapReduce、Spark、Tez、Flink 等分布式计算程序均可以运行在YARN集群中,YARN会为它们提供统一的资源分配及调度。 |
调度 | Airflow | Airflow是一个分布式的调度引擎,功能类似 crontab + work flow | 多样化调度 Airflow 可以根据配置的时间,补追历史数据,也可定义未来执行的任务 复杂workflow Airflow 可以记录每次执行的结果,实现case when |
ETL 可以将ETL分解成多个单一功能的小task,在airflow中配置执行逻辑顺序,增强可维护性 crontab crontab功能的增强版,方便管理,报警、日志更完善 |
ETL | Maxwell | Maxwell是一个数据库(MySQL)增量订阅工具。可解析MySQL数据增量,以相应的格式发送到kafka,供用户订阅使用。 | 全方位的数据库增量订阅 Maxwell可监控整个MySQL的数据增量,将数据写到kafka。 性能高效 Maxwell架构优雅、性能高效。一般情况下,从binlog产生到写入kafka,平均延迟在0.1秒之内。当MySQL端有大量数据增量产生时,Maxwell写入kafka的速率能达到7万行/秒。 运行稳定 Maxwell巧妙的设计,可有效地避免数据丢失。 支持多种消息格式 原生的Maxwell仅支持Json消息格式。大数据团队对Maxwell进行了定制化,使Maxwell支持canal格式和avro格式。avro格式的消息,可以直接接入kafka connect。 |
数据监控与分析 用户可消费Maxwell发送到kafka的数据,监控相应数据库的每一条数据变化,用于业务数据异常监控、业务数据分析等场景。 数据同步 Maxwell avro消息,可接入kafka connect,从而根据需求由kafka connect实时或近实时地同步其它数据库(如Hive、ES、HBase、KUDU等)中。 |