文章目录
- 1 Apache Beam: 下一代的大数据处理标准
- 2 Apache Eagle: 分布式实时Hadoop数据安全方案
- 3 Apache Ranger:统一授权管理框架
- 4 Apache Metron:实时网络安全检测框架
- 5 Apache SystemML:为大数据优化的声明式机器学习平台
- 6 Apache CarbonData:列式存储文件格式
- 7 Apache Fluo:大规模增量处理系统
- 8 Apache DistributedLog:高性能分布式复制日志系统
- 9 Apache MADlib:基于SQL可扩展的机器学习库
- 10 Apache RocketMQ:分布式消息传递和流数据平台
- 11 Apache Impala:新一代开源大数据分析引擎
- 12 Apache Trafodion:基于 Hadoop 平台的事务数据库引擎
本文主要盘点了 2017 年晋升为 Apache Top-Level Project (TLP) 的大数据相关项目,项目的介绍从孵化器毕业的时间开始排的,一共十二个。
Apache Beam: 下一代的大数据处理标准
Apache Beam(原名Google DataFlow)是Google在2016年2月份贡献给Apache基金会的Apache孵化项目,被认为是继MapReduce,GFS和BigQuery等之后,Google在大数据处理领域对开源社区的又一个非常大的贡献。Apache Beam的主要目标是统一批处理和流处理的编程范式,为无限,乱序,web-scale的数据集处理提供简单灵活,功能丰富以及表达能力十分强大的SDK。Apache Beam项目重点在于数据处理的编程范式和接口定义,并不涉及具体执行引擎的实现,Apache Beam希望基于Beam开发的数据处理程序可以执行在任意的分布式计算引擎上。
Apache Beam 主要有两大特点:
- 将数据的批处理(batch)和流处理(stream)编程范式进行了统一;
- 能够在任何的执行引擎上运行。
Apache Beam 仅仅是一个SDK,是一个应用顶层的API,主要由Beam SDK和Beam Runner组成,Beam SDK定义了开发分布式数据处理任务业务逻辑的API接口,生成的的分布式数据处理任务Pipeline交给具体的Beam Runner执行引擎。支持的执行引擎(官方叫做Apache Beam Pipeline Runners)包括Apache Apex,Apache Flink,Apache Spark以及它自己的Google Cloud Dataflow。 Apache Beam目前支持的API接口包括 Java 和 Python,其他的语言正在开发中。如下图所示:
Apache Beam 官方网址:https://beam.apache.org/
Apache Eagle: 分布式实时Hadoop数据安全方案
Apache Eagle 是由 eBay 公司开源的一个识别大数据平台上的安全和性能问题的开源解决方案。该项目于2017年1月10日正式成为 Apache 顶级项目。 Apache Eagle 提供一套高效分布式的流式策略引擎,具有高实时、可伸缩、易扩展、交互友好等特点,同时集成机器学习对用户行为建立Profile以实现实时智能实时地保护 Hadoop 生态系统中大数据的安全。
Apache Eagle 主要包括三大层:
- 数据收集及存储层(Data Collection and Storage)
- 数据处理层(Data Processing)
- 可视化层(Visualize)
整个组成如下:
Apache Eagle 依赖于 Apache Storm 来进行数据活动和操作日志的流处理,并且可以执行基于策略的检测和报警。它提供多个API:作为基于Storm API上的一层抽象的流式处理API和 policy engine provider API的抽象,它将WSO2的开源Siddhi CEP engine作为第一类对象。Siddhi CEP engine支持报警规则的热部署,并且警报可以使用属性过滤和基于窗口的规则(例如,在10分钟内三次以上的访问)来定义。
Eagle 支持根据用户在Hadoop平台上历史使用行为习惯来定义行为模式或用户Profile的能力。拥有了这个功能,不需要在系统中预先设置固定临界值的情况下,也可以实现智能地检测出异常的行为。Eagle中用户Profile是通过机器学习算法生成,用于在用户当前实时行为模式与其对应的历史模型模式存在一定程度的差异时识别用户行为是否为异常。目前,Eagle 内置提供以下两种算法来检测异常,分别为特征值分解(Eigen-Value Decomposition)和 密度估计(Density Estimation)。这些算法从HDFS 审计日志中读取数据,对数据进行分割、审查、交叉分析,周期性地为每个用户依次创建Profile 行为模型。一旦模型生成,Eagle的实时流策略引擎能够近乎实时地识别出异常,分辨当前用户的行为可疑的或者与他们的历史行为模型不相符。
下图简单描述了目前Eagle中用户Profile的离线训练建模和在线实时监测的数据流:
Apache Eagle 官方网址:https://eagle.apache.org/
Apache Ranger:统一授权管理框架
Apache Ranger 是一个用在 Hadoop 平台上并提供操作、监控、管理综合数据安全的框架。Ranger 的愿景是在 Apache Hadoop 生态系统中提供全面的安全性。 目前,Apache Ranger 支持以下 Apache 项目的细粒度授权和审计:
- Apache Hadoop
- Apache Hive
- Apache HBase
- Apache Storm
- Apache Knox
- Apache Solr
- Apache Kafka
- YARN
对于上面那些受支持的 Hadoop 组件,Ranger 通过访问控制策略提供了一种标准的授权方法。作为标准,Ranger提供了一种集中式的组件,用于审计用户的访问行为和管理组件间的安全交互行为。
Ranger 使用了一种基于属性的方法定义和强制实施安全策略。当与 Apache Hadoop 的数据治理解决方案和元数据仓储组件Apache Atlas一起使用时,它可以定义一种基于标签的安全服务,通过使用标签对文件和数据资产进行分类,并控制用户和用户组对一系列标签的访问。
Ranger 的总体架构如下图所示,主要由以下三个组件构成:
- AdminServer: 以RESTFUL形式提供策略的增删改查接口,同时内置一个Web管理页面。
- AgentPlugin: 嵌入到各系统执行流程中,定期从AdminServer拉取策略,根据策略执行访问决策树,并且定期记录访问审计。插件的实现原理将在后文详细介绍。
- UserSync: 定期从LDAP/File中加载用户,上报给AdminServer。
整个过程如下:
Apache Ranger 官方网址:https://ranger.apache.org/
Apache Metron:实时网络安全检测框架
Apache Metron 是一个网络安全的实时数据处理、分析、查询、可视化框架。Metron 集成了各种开源大数据技术,为安全监控和分析提供了集中工具。 Metron 拥有支持大规模摄取、处理、检索与信息可视化的所有适当元素,一些关键的网络数据将推动数据保护、监控、分析与检测,并且有助于对恶意的非法行为予以回应。该项目最早可溯源至Cisco的开源大数据系统安全框架项目OpenSOC。Apache Metron 的主要功能包括:
- 可扩展的接收器和分析器能够监视任何Telemetry数据源
- 是一个扩展性很强的框架,且支持各种Telemetry数据流
- 支持对Telemetry数据流的异常检测和基于规则实时告警
- 通过预设时间使用Hadoop存储Telemetry的数据流
- 支持使用ElasticSearch实现自动化实时索引Telemetry数据流
- 支持使用Hive利用SQL查询存储在hadoop中的数据
- 能够兼容ODBC/JDBC和继承已有的分析工具
- 具有丰富的分析应用,且能够集成已有的分析工具
- 支持实时的Telemetry搜索和跨Telemetry的匹配
- 支持自动生成报告、和异常报警
- 支持原数据包的抓取、存储、重组
- 支持数据驱动的安全模型
Apache Metron 官方网址:https://metron.apache.org/
Apache SystemML:为大数据优化的声明式机器学习平台
Apache SystemML 是由 IBM 开发并开源的优化大数据机器学习平台,为使用大数据的机器学习提供了最佳的工作场所。 它可以在 Apache Spark上运行,会自动缩放数据,逐行确定代码是否应在驱动程序或 Apache Spark 群集上运行。
SystemML 是声明式机器学习 (DML),包含线性代数原语,统计功能和 ML 指定结构,可以更容易也更原生的表达 ML 算法。算法通过 R 类型或者 Python 类型的语法进行表达。DML 通过提供灵活的定制分析表达和独立于底层输入格式和物理数据表示的数据显著提升数据科学的生产力。
其次,SystemML 提供自动优化功能,通过数据和集群特性保证高效和可伸缩。SystemML 可以在 MapReduce 或者 Spark 环境运行。
Apache SystemML 目前支持的机器学习算法有:
- 描述性统计 Descriptive Statistics
该类中的算法用于描述数据集的主要特征。它们提供了对不同观察或数据记录计算的有意义的摘要收集在研究中。这些摘要通常构成初步数据探索的基础,作为其中的一部分更广泛的统计分析。
- 单变量统计 Univariate Statistics
- 双变量统计 Bivariate Statistics
- 分层双变量统计 Stratified Bivariate Statistics
- 分类 Classification
该类中的算法用于基于一些预定义的类或对象对数据进行分组。这是监督学习的特点。分类算法的一个例子是将社交媒体的评论分为正面评价,负面评价或中立评价。
- 多项 Logistic 回归 Multinomial Logistic Regression
- 支持向量机 Support Vector Machines
- 二进制类支持向量机 Binary-Class Support Vector Machines
- 多类支持向量机 Multi-Class Support Vector Machines
- 朴素贝叶斯 Naive Bayes
- 决策树 Decision Trees
- 随机森林 Random Forests
- 聚类 Clustering
聚类是一种无监督的学习类算法。数据集中没有预定义的类 -
算法在数据中找到关系。聚类算法将数据排列或聚类成若干数量的逻辑组。例如,确定商店客户的购买模式。- K 均值聚类 K-Means Clustering
- 回归 Regression
回归是另一类监督学习算法。该数据集中的目标变量是连续的。股票市场预测是回归算法的一个例子。这里的股票价格是目标变量,或者是我们想预测的,而且每天都有变化。
- 线性回归 Linear Regression
- 逐步线性回归 Stepwise Linear Regression
- 广义线性模型 Generalized Linear Models
- 逐步广义线性回归 Stepwise Generalized Linear Regression
- 回归计分与预测 Regression Scoring and Prediction
- 矩阵分解 Matrix Factorization
矩阵分解算法用于发现嵌入在不同实体之间的交互中的潜在特征。它们利用多个矩阵,当它们相乘时,生成一个类似于原先矩阵的新矩阵。亚马逊和 Netflix 使用矩阵因式分解算法来提出产品建议。例如每行代表您的一个客户,每列表示您的一个产品,矩阵是大而稀疏的。因此,每个单元代表由特定客户购买的特定产品。该矩阵首先填充历史数据,然后将原始矩阵分解为"产品因素"和"客户因素"两个因素。通过将这两个因子相乘在一起,我们产生添加到矩阵中的新的非零值。这些新的非零值表示产品建议。
- 主成分分析 Principal Component Analysis
- 通过交替最小化完成矩阵 Matrix Completion via Alternating Minimizations
- 生存分析 Survival Analysis
生存分析检查感兴趣的特定事件发生所需的时间。换句话说,它们用于估计生存概率。
例如,在医学研究中,原型的这种事件是患者的死亡,但是该方法可以应用于其他应用领域,例如在心理实验中完成个人的任务或者在工程中的电气部件的故障。- Kaplan-Meier 生存分析 Kaplan-Meier Survival Analysis
- Cox 比例风险回归模型 Cox Proportional Hazard Regression Model
Apache SystemML 官方网址:https://systemml.apache.org/
Apache CarbonData:列式存储文件格式
Apache CarbonData 是由华为开发、开源并支持 Apache Hadoop 的列式存储文件格式,支持索引、压缩以及解编码等,其目的是为了实现同一份数据达到多种需求,而且能够实现更快的交互查询。
Apache CarbonData 文件格式是基于列式存储的,并存储在HDFS之上;其包含了现有列式存储文件格式的许多有点,比如:可分割、可压缩、支持复杂数据类型等;并且CarbonData为了解决上面5点要求,加入了许多独特的特性,主要概括为以下四点:
- 存储数据及其索引:在有过滤的查询中,它可以显著地加速查询性能,减少I/O和CPU资源。CarbonData的索引由多级索引组成,处理框架可以利用这些索引信息来减少调度和一些处理的开销;在任务扫描数据的时候它可以仅仅扫描更细粒度的单元(称为blocklet),而不需要扫描整个文件。
- 可操作的编码数据:通过支持高效的压缩和全局编码模式,它可以直接在压缩或者编码的数据上查询,仅仅在需要返回结果的时候才进行转换,这种技术被称为late materialized。
- 列组:支持多列组成一个列组,并且使用行格式进行存储,这减少了查询时行重建的开销。
- 支持多种使用场景:比如支持类OLAP风格的交互式查询、顺序存取、随机访问等。
Apache CarbonData 官方网址:https://carbondata.apache.org/
Apache Fluo:大规模增量处理系统
Apache Fluo 是 Google Percolator(搜索索引)的开源实现,允许用户对存储在 Apache Accumulo 中的大型数据集进行增量更新,无需重新处理所有的数据。与批处理和流处理框架不同的是,Fluo 提供了更低的延迟,并且可以在极大的数据集上运行。
Apache Fluo 官方网址:https://fluo.apache.org/
Apache DistributedLog:高性能分布式复制日志系统
Apache DistributedLog 是由 Twitter 开发并开源的低延时(毫秒级)、高吞吐的分布式复制日志流系统。能提供持久的可复制的强一致性(分布式事务机制),可以作为基础构建设施用于创建可靠的分布式系统,例如可复制的状态机(replicated-state-machine)、一般的pub/sub系统、分布式数据库和分布式队列等。Apache DistributedLog已经在Twitter的线上运行了三四年,支持从分布式数据库、实时搜索引擎、跨机房数据同步到实时流计算等多种业务。Apache DistributedLog每天为Twitter传递1.5 trillion条记录(合17.5 PB数据)。Apache DistributedLog 主要有以下特点:
- 高性能:Apache DistributedLog可以在具有大量并发日志的持久写入中提供毫秒延迟,并且可以从数千个客户端处理每秒大量的读和写操作。
- 持久性和一致性:消息被持久化到磁盘上,并复制以存储多个副本以防止数据丢失。在严格的排序下,它们保证了写入者和读取者之间的一致性。
- 高效的扇入和扇出:Apache DistributedLog提供了一个高效的服务层,优化运行的多租户数据中心环境便或纱等。服务层能够支持大规模的读(扇入)和写(扇出)。
- 不同的工作负载:Apache DistributedLog支持各种工作负载,从那些对延迟敏感的联机事务处理(OLTP)应用程序(如分布式数据库和内存复制状态机),实时摄取和计算,到分析处理。
- 多租户:为了支持多租户的大量日志,Apache DistributedLog专为I/O在实际工作负载中隔离而设计。
- 分层体系架构:Apache分布式日志系统有一个现代的分层架构设计,它将无状态的服务层与有状态的存储层分离。支持大规模写入(扇入)和读取(扇出),允许扩展存储独立的CPU和内存。
Apache DistributedLog 体系结构如下:
Apache DistributedLog 官方网址:https://bookkeeper.apache.org/distributedlog/
关于 Kafka 和 DistributedLog 的比较可以参见: Kafka 和 DistributedLog 技术对比
Apache MADlib:基于SQL可扩展的机器学习库
Apache MADlib 是 Pivotal 与 UCBerkeley 合作的基于SQL可扩展的机器学习库,提供了精确的数据并行实现、统计和机器学习方法对结构化和非结构化数据进行分析。MADlib提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN聚集,文本挖掘,数据校验等。MADlib支持Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大扩展了数据库的分析功能,充分利用MPP架构使其能够快速处理海量数据集。
Apache MADlib 体系结构如下:
从上图可以看到,MADlib 由以下主要组件构成:
- Python驱动函数(Python driver functions)
- C++实现的核心函数(C++ implementations functions)
- C++数据库抽象层(C++ database abstraction layer)
Python驱动函数:用户输入的主入口点,主要负责算法的流程控制。通常这些函数的实现包括输入参数验证、SQL语句执行、结果评估,并可能循环执行更多的SQL语句直到达到某些收敛标准。
C++实现的核心函数:这部分函数是由C++编写的核心函数,实现特定机器学习算法。出于性能考虑,这些函数是用C++而不是Python编写的。
C++数据库抽象层:这些函数提供一个编程接口,将所有的Postgres内部细节进行抽象。它们提供了一种机制,使得MADlib能够支持不同的后端平台,从而将关注点集中在内部功能而不是平台集成上。
Apache MADlib 官方网址:https://madlib.apache.org/
Apache RocketMQ:分布式消息传递和流数据平台
ApacheRocketMQ 由阿里巴巴开发并开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。
- 能够保证严格的消息顺序
- 提供丰富的消息拉取模式
- 高效的订阅者水平扩展能力
- 实时的消息订阅机制
- 亿级消息堆积能力
Apache RocketMQ 在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。相对于 Kafka ,RocketMQ 有如下的专业术语:
- Producer:消息生产者,生产者的作用就是将消息发送到 MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。
- Producer Group:生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。
- Consumer:消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。
- Consumer Group:消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组。
- Topic:Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。
- Message:Message 是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于 tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。
- Tag:标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
- Broker:Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。
- Name Server:Name Server 为 producer 和 consumer 提供路由信息。
Apache RocketMQ 的体系结构如下:
由这张图可以看到有四个集群,分别是 NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群:
- NameServer: 提供轻量级的服务发现和路由。 每个 NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展。
- Broker: 通过提供轻量级的 Topic 和 Queue 机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制。
- Producer:生产者,产生消息的实例,拥有相同 Producer Group 的 Producer 组成一个集群。
- Consumer:消费者,接收消息进行消费的实例,拥有相同 Consumer Group 的 Consumer 组成一个集群。
Apache RocketMQ 官方网址:https://rocketmq.apache.org/
Apache Impala:新一代开源大数据分析引擎
Apache Impala是 Cloudera 公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。具有以下特点:
- Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
- 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
- Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。
- 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
- 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
- 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
Impala 适合大规模数据的交互式查询,内存要求很高,但它并不太适合海量数据的批处理。因此,常用的方式是使用Hive完成离线批处理过程,之上使用Impala提供交互式即席查询。
Apache Impala 的体系结构如下:
为了避免延迟,Impala 避免使用 MapReduce, 而是通过一个专门的分布式查询引擎直接访问数据,这个引擎非常类似于在商业并行数据库管理系统中发现的引擎。 结果是性能比 Hive 快一个数量级。
Apache Impala 官方网址:https://impala.apache.org/
Apache Trafodion:基于 Hadoop 平台的事务数据库引擎
Apache Trafodion 是由惠普开发并开源的基于 Hadoop 平台的事务数据库引擎。提供了一个基于Hadoop平台的交易型SQL引擎。它是一个擅长处理交易型负载的Hadoop大数据解决方案。其主要特性包括:
- 完整的ANSI SQL语言支持
- 完整的ACID事务支持。对于读、写查询,Trafodion支持跨行,跨表和跨语句的事务保护
- 支持多种异构存储引擎的直接访问
- 为应用程序提供极佳的高可用性保证
- 采用了查询间(intra-query)并发执行模式。轻松支持大数据应用
- 同时应用编译时和运行时优化技术,优化了OLTP工作负载的性能
事务管理特性包括
- 事务串行化基于开源项目HBase-Trx的实现原理,采用多版本并发控制(MVCC)
- 增强的故障恢复机制保证了数据库中用户数据的一致性
- 事务管理器支持多线程的SQL客户端应用
- 支持非事务型数据访问,即直接访问底层HBase表
Apache Trafodion的进程构架
上图描述了Trafodion的进程构架。主要进程包括:
- 客户端应用通过JDBC或者ODBC访问Trafodion。Trafodion的ODBC驱动采用了优化的wire protocol,高效地同Master Executor进程进行网络交互。上图演示了一个Type 4的JDBC配置。.
- Master Executor是负责执行用户SQL语句的主进程。它内部包含了一份SQL compiler代码的拷贝,因此多数SQL语句可以在Master Executor进程内部进行编译而无需和单独的编译进程进行通信。此外,所有执行计划中的root节点都在Master Executor进程中执行。
- 少部分SQL语句(比如,DDL和一些应用工具)需要启动第二个独立的编译器进程对SQL语句进行处理;即上图中的CMP进程
- Trafodion 支持多种不同形式的并发执行方式。当系统生成了并发查询计划时,系统会动态地启动多个ESP进程,即Executor Server Processes。每一个ESP负责执行查询计划中的一个分段(fragment)
- DTM进程负责分布式事务。DTM的职责包括日志管理和事务协调。
- Trafodion支持访问原生HBase表,为此,SQL引擎将读取HBase的元数据。为了提供更好的OLTP访问性能,Trafodion还提供了定制的Trafodion表结构,用HBase Table进行存储。Trafodion表拥有自己的元数据,同样存储在HBase中。
Apache Trafodion 官方网址:https://trafodion.apache.org/
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【盘点2017年晋升为Apache TLP的大数据相关项目】(https://www.iteblog.com/archives/2310.html)