引言
主要基于对现阶段一些常用的大数据开源框架技术的整理,只是一些简单的介绍,并不是详细技术梳理。可能会有疏漏,发现再整理。参考的太多,就不一一列出来了。这只是作为一个梳理,对以后选型或者扩展的做个参考。
目录
- 系统平台 (Hadoop、CDH、HDP)
- 监控管理 (CM、Hue、Ambari、Dr.Elephant、Ganglia、Zabbix、Eagle)
- 文件系统 (HDFS、GPFS、Ceph、GlusterFS、Swift 、BeeGFS、Alluxio)
- 资源调度 (YARN、Mesos、)
- 协调框架 (ZooKeeper 、Etcd、Consul)
- 数据存储 (HBase、Cassandra、ScyllaDB 、MongoDB、Accumulo 、Redis 、Ignite、Arrow 、Geode、CouchDB、Kudu、CarbonData)
- 数据处理 (MapReduce、Spark、Flink、Storm、Tez、Samza、Apex、Beam、Heron)
- 查询分析(Hive、SparkSQL、Presto、Kylin、Impala、Druid、ElasticSearch、HAWQ、Lucene、Solr、 Phoenix)
- 数据收集 (Flume、Filebeat、Logstash、Chukwa )
- 数据交换 (Sqoop 、Kettle、DataX 、NiFi)
- 消息系统 (Pulsar、Kafka、RocketMQ、ActiveMQ、RabbitMQ)
- 任务调度 (Azkaban、Oozie、Airflow)
- 数据治理 (Ranger 、Sentry、Atlas)
- 可视化 (Kibana 、D3.js、ECharts)
- 数据挖掘 (Mahout 、MADlib 、Spark ML、TensorFlow、Keras)
- 云平台 (Amazon S3、GCP、Microsoft Azure)
1、系统平台
Hadoop:
Apache Hadoop是一个开源的分布式系统基础框架,离线数据的分布式存储和计算的解决方案。Hadoop最早起源于Nutch,Nutch基于2003 年、2004年谷歌发表的两篇论文分布式文件系统GFS和分布式计算框架MapReduce的开源实现HDFS和MapReduce。2005年推出,2008年1月成为Apache顶级项目。
Hadoop分布式文件系统(HDFS)是革命性的一大改进,它将服务器与普通硬盘驱动器结合,并将它们转变为能够由Java应用程序兼容并行IO的分布式存储系统。Hadoop作为数据分布式处理系统的典型代表,形了成完整的生态圈,已经成为事实上的大数据标准,开源大数据目前已经成为互联网企业的基础设施。
Hadoop主要包含分布式存储HDFS、离线计算引擎MapRduce、资源调度Apache YARN三部分。Hadoop2.0引入了Apache YARN作为资源调度。Hadoop3.0以后的版本对MR做了大量优化,增加了基于内存计算模型,提高了计算效率。比较普及的稳定版本是2.x,目前最新版本为3.2.0。
CDH:
Cloudera CDH是Cloudera基于稳定版Hadoop及相关项目最成型的发行版本。CDH中提供的各种组件能让用户在一个可视化的UI界面中方便地管理,配置和监控Hadoop以及其它所有相关组件。Cloudera成立于2008年,在2009年Cloudera发行了第一个Hadoop集成版本CDH,到目前为止,因为其易用、易于升级、安装组件和减少维护成本等特性,成为企业部署最广泛的大数据系统。
在Hadoop的世界中,规模最大、知名度最高的公司就是Cloudera。CDH提供强大的部署、管理和监控工具,通过Cloudera Manager的Web UI安装和管理集群,并且通过Hue浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据。随着云计算的发展,催生了亚马逊AWS等巨头,他们也会提供托管的Hadoop/Spark服务,如AWS的Elastic Map Reduce(EMR),不仅集成在云平台内部而且成本也更低。而对象存储服务,如AWS S3,Azure Blob存储和Google云端存储,从成本上来说,也低于Hadoop的存储成本。但是,对于重视数据资产的企业来说依旧需要Cloudera产品。
Cloudera也一直致力于向云计算转型。2018年10月Cloudera合并Hortonworks,表示新的公司将成为行业领导者,为客户提供更好的平台,创建世界首个企业数据云,并将在云计算、物联网和容器技术等领域继续发力。这对Hadoop的发展方向是一个打击,但也意味着Hadoop的标准将更加统一,将有更多资金投入新技术的研究。CDH目前最新版本为6.2.0。
HDP:
HDP是Hortonworks在基于Hadoop的发行版本。2014年Hortonworks上市,是企业级全球数据管理平台,同时也是服务和解决方案的领先供应商,为100强企业中的一多半提供“任何类型数据”的可操作信息,已经成为世界第二大数据服务商。Hortonworks是第一家使用了Apache HCatalog的元数据服务特性的提供商。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。
Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Windows Server和Windows Azure在内的Microsft Windows平台上本地运行,相比于CDH只能运行在Linux系统中。使用Ambari提供Web UI管理集群。HDP好处是完全开源,可以在其基础上进行二次开发,但对于技术比较薄弱中小型企业来说稳定性没有CDH高。2018年10月Cloudera合并Hortonworks,方向暂时未知。HDP目前最新版本为3.1。
2、集群管理与监控
Clodera Manager:
CM是Cloudera开发的一个基于Web的用于部署和管理CDH集群的软件。它具有集群自动化安装、中心化管理、集群监控、报警等功能,大大节省集群部署时间,降低了运维成本,极大的提高集群管理的效率。(非开源)
Hue:
Hue是由Cloudera贡献给开源社区的Hadoop UI系统(Hadoop User Experience),最早是由Cloudera Desktop演化而来,它是基于Python Web框架Django实现的。Hue是一个可快速开发和调试Hadoop生态系统各种应用的一个基于浏览器的图形化用户接口。使用Hue可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据、运行MapReduce Job、执行Hive的SQL语句、浏览HBase数据库、运行Sqoop,编写Oozie工作流等等大量工作。Hue是Hadoop平台大数据分析开发的可视化分析利器。
Ambari:
Apache Ambari是Hortonworks贡献给Apache基金会的Hadoop平台管理软件,2013年11月20日成为Apache顶级项目。它具备Hadoop组件的安装、管理、运维等基本功能,提供Web UI进行可视化的集群管理,简化了大数据平台的安装、使用难度。
Dr.Elephant:
Dr.elephant是一款对Hadoop和Spark任务进行性能监控和调优的工具,它由LinkedIn的团队于2016年开源,开源之前已经在公司运行使用2年。它能自动采集作业的度量指标并分析,然后以简单明了的方式展现出来。Dr.elephant的设计思想是通过作业分析结果来指导开发者进行作业调优,从而提升开发者效率和集群资源的利用率。
Ganglia:
Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。
Zabbix:
Zabbix是一个的基于Web界面的开源的分布式企业级监控解决方案。于2004年zabbix 1.0 正式发布,由Alexei Vladishev团队维护更新,Zabbix SIA提供支持。Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。它能够实时监控从成千上万台服务器、虚拟机和网络设备中收集到的数以百万计的指标。Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。还能够利用存储数据提供杰出的报表及实时的图形化数据处理,实现对监控主机7x24小时集中监控。
Eagle:
Apache Eagle是一个开源监视和警报解决方案,用于智能实时地识别大数据平台上的安全和性能问题,例如Apache Hadoop,Apache Spark等。Eagle起源于eBay,最早用于解决大规模Hadoop集群的监控问题,于2015年10月提交给Apache孵化器,2016年12月21日成为Apache顶级项目。Eagle 主要包括:高可扩展、高可伸缩、低延时、动态协同等特点,支持数据行为实时监控,能立即监测出对敏感数据的访问或恶意的操作,并立即采取应对的措施。Eagle 提供一套高效分布式的流式策略引擎,具有高实时、可伸缩、易扩展、交互友好等特点,同时集成机器学习对用户行为建立Profile以实现实时智能实时地保护 Hadoop 生态系统中大数据的安全。
3、文件系统
HDFS:
HDFS(Hadoop Distributed File System)分布式文件系统,是分布式计算中数据存储管理的基础。是Hadoop Core项目的核心子项目。HDFS是基于流数据模式访问和处理超大文件的需求而开发的,效仿谷歌文件系统(GFS),数据在相同节点上以复制的方式进行存储以实现将数据合并计算的目的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。它有很多的优点,但也存在有一些缺点,包括:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件。
GPFS:
GPFS(General Parallel File System)是IBM推出的基于Hadoop的并行分布式集群文件系统。IBM认为GPFS不共享集群版本比HDFS快得多,因为它在内核级别中运行,而不是像HDFS在操作系统中运行。GPFS是一个共享磁盘的文件系统,集群内的所有节点可以并行地访问所有共享磁盘,并通过分布式的Token管理机制和条带化技术来管理和优化节点的访问。GPFS支持完整的Posix文件系统语义。GPFS的应用范围非常广泛,从多节点文件共享服务、实时多媒体处理、到大型的高性能计算集群,我们都可以看到GPFS的优秀表现。GPFS在这些应用里面都表现出了非常出色的性能和高可用性。
Ceph:
Ceph是一个开源的统一的分布式存储系统,是高性能的并行文件系统。Ceph是加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)专为博士论文设计的新一代自由软件分布式文件系统。自2007年毕业之后,Sage开始全职投入到Ceph开发之中,使其能适用于生产环境。Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制。2010年3月,Linus Torvalds将Ceph client合并到内核2.6.34中。
它基于CRUSH算法,没有中心节点,可以无限扩展。Ceph提供三种存储方式分别是对象存储,块存储和文件系统。在虚拟化领域里,比较常用到的是Ceph的块设备存储。Ceph以其稳定、高可用、可扩展的特性,乘着开源云计算管理系统OpenStack的东风,迅速成为最热门的开源分布式存储系统。Ceph是目前最火的分布式存储软件,Ceph开源存储项目已经成为全球众多海量存储项目的主要选择。Ceph现在是云计算、虚拟机部署的最火开源存储解决方案,是私有云事实上的标准。
GlusterFS:
GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。2011年被红帽收购,之后推出了基于GlusterFS的Red Hat Storage Server,增加了针对KVM的许多特性,可用作为KVM存储image存储集群,也可以为LB或HA提供存储。
Swift:
Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务。于 2010 年贡献给OpenStack开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。Swift构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。Swift是一种比较通用的存储解决方案,能够可靠地存储数量非常多的大小不一的文件。
BeeGFS:
BeeGFS(原FhGFS)既是一个网络文件系统也是一个并行文件系统。是由Fraunhofer Institute为工业数学计算而设计开发,由于在欧洲和美国的中小型HPC系统性能表现良好,在2014年改名注册为BeeGFS并受到科研和商业的广泛应用。客户端通过网络与存储服务器进行通信(具有TCP/IP或任何具有RDMA功能 的互连,如InfiniBand,RoCE或Omni-Path,支持native verbs 接口)。通过BeeGFS添加更多的服务器, 其容量和性能被聚合在单个命名空间中。BeeGFS是遵循GPL的“免费开源”产品,文件系统没有许可证费用。 由ThinkParQ提供专业支持,系统集成商可以为客户构建使用BeeGFS的解决方案。
Alluxio:
Alluxio(原Tachyon)是以内存为中心的虚拟的分布式存储系统。诞生于UC Berkeley的AMPLab,它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁, 应用只需要连接Alluxio即可访问存储在底层任意存储系统中的数据。此外,Alluxio的以内存为中心的架构使得数据的访问速度能比现有方案快几个数量级。Alluxio介于计算框架(如Apache Spark,Apache MapReduce,Apache HBase,Apache Hive,Apache Flink)和现有的存储系统(如Amazon S3,OpenStack Swift,GlusterFS,HDFS,MaprFS,Ceph,NFS,OSS)之间。
4、资源调度
YARN:
(Yet Another Resource Negotiator)是Hadoop的资源管理和作业调度系统。作为Apache Hadoop的核心组件之一,YARN负责将系统资源分配给在Hadoop集群中运行的各种应用程序,并调度在不同集群节点上执行的任务。YARN是Hadoop2.x 版本中的一个新特性。它的出现其实是为了解决第一代 MapReduce 编程框架的不足,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO等。
YARN的基本思想是将资源管理和作业调度/监视的功能分解为单独的 daemon(守护进程),其拥有一个全局ResourceManager、每个应用程序的ApplicationMaster及每台机器框架代理NodeManager。ResourceManager负责所有应用程序之间资源分配。NodeManager负责Containers,监视其资源使用情况(CPU,内存,磁盘,网络)并将其报告给 ResourceManager。ApplicationMaster负责是协调来自ResourceManager的资源,并与NodeManager一起执行和监视任务。
Mesos:
Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。Mesos最初是由加州大学伯克利分校的AMPLab开发的,Mesos项目发布于是2009年,2010年12月进入Apache孵化器,2013年6月19日成为Apache顶级项目。Twitter公司则是 Mesos 项目的早期支持者和使用者之一。
它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它可以在动态共享节点池上运行许多应用程序。对数据中心而言它就像一个单一的资源池,从物理或虚拟机器中抽离了CPU、内存、存储以及其它计算资源,很容易建立和有效运行具备容错性和弹性的分布式系统。2019年5月,Twitter宣布放弃Mesos,基础设施从Mesos全面转向Kubernetes。
5、协调框架
Zookeeper:
Apache ZooKeeper 是一个开源的分布式协调服务,是Google的Chubby一个开源的实现,是Hadoop,HBase和其他分布式框架使用的有组织服务的标准。由雅虎开源并于2010年11月成为Apache顶级项目。ZooKeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer。ZooKeeper使用 ZAB 协议作为其保证数据一致性的核心算法。ZAB(ZooKeeper Atomic Broadcast 原子广播)协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。
Etcd:
Etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。Etcd是一种分布式kv存储设施,由CoreOS于2013年6月发起的开源并维护的项目,它感来自于ZooKeeper和Doozer,基于Go语言实现。它类似的Zookeeper,但没有Zookeeper那么重型,功能也没有覆盖那么多,通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性。
Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了Etcd。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。
Consul:
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置共享。Consul用Go语言实现,因此具有天然可移植性(支持Linux、windows和Mac OS X)。与其他分布式服务注册与发现的方案不同,Consul的方案更"一站式",内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。
采用Raft算法一致性协议,支持多数据中心分布式高可用,服务发现和配置共享,使用gossip协议管理成员和消息广播,支持ACL访问控制。最新的Consul提供了一个新特性“Mesh 网关”,实现透明、跨网络的连接。这些特性可以跨平台工作,对Kubernetes提供一流的支持,并且在任何云或专用网络上都可以轻松地部署到更传统的环境中,实现了Consul多云服务网络的目标。
6、数据存储
Hbase:
Apache HBase(Hadoop Database)是一个分布式的、面向列的NoSQL开源数据库。是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。初期的目标是弥补MapReduce在实时操作上的缺失,方便用户可随时操作大规模的数据集。
HBase原来是Apache的Hadoop项目的子项目,随着大数据与NoSQL的流行和迅速发展,2010年5月Apache HBase脱离了Hadoop成为Apache基金的顶级项目。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为协调服务。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另外HBase是基于列的而不是基于行的模式。
Cassandra:
Apache Cassandra是一个开源的、分布式的混合型NoSQL数据库。它最初由Facebook开发,于2008年开源,2010年2月17日成为Apache顶级项目。主要用于储存海量数据。以Amazon专有的完全分布式Dynamo为基础,结合了Google BigTable基于列族的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其它节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。它提供了高可用性,没有单点故障。它是一个网络社交云计算方面理想的数据库。
ScyllaDB:
ScyllaDB 是用 C++ 重写的 Cassandra,官网号称每节点每秒处理 100 万 TPS。ScyllaDB 完全兼容 Apache Cassandra,拥有比 Cassandra 多 10x 倍的吞吐量,降低了延迟。ScyllaDB 号称是世界上最快的 NoSQL 列存储数据库。ScyllaDB 在垃圾收集或者 Compaction 的时候不需要暂停,在常规生产负载的时候可以添加和删除节点,数据结构测量不会跨 CPU 缓存线,poll 模式驱动替代了中断。目前国内资料极少,中文网2016年7月停止了更新。
MongoDB:
MongoDB是为处理大数据而生的一个面向文档的分布式开源数据库,由10gen公司开发和维护。它使用C++编写。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。
Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。MongoDB的本地复制和自动故障转移功能使应用程序具有企业级的可靠性和操作灵活性。
2018年10月MongoDB宣布将开源协议从GNU AGPLv3切换到Server Side Public License (SSPL),SSPL 明确要求托管 MongoDB 实例的云厂商要么获取商业许可证要么向社区开放其服务源码。随即,红帽宣布从Red Hat Enterprise Linux(RHEL)8中删除 MongoDB,Debian Linux也已经从它的发行版中删除了MongoDB。
Accumulo:
Apache Accumulo 是一个高性能可扩展的分布式Key-Value数据存储和检索系统。由美国国家安全局(NSA)于2011年捐赠给Apache基金会,2012年3月21日成为Apache顶级项目。Accumulo使用Google BigTable设计思路,基于Apache Hadoop、Zookeeper 和 Thrift 构建。Accumulo支持高效存储和检索的结构化数据,包括查询范围,并提供支持使用Accumulo表作为输入和输出的 MapReduce作业。Accumulo比简单的key-values数据库提供更丰富的数据模型,但不是完全的关系数据库。
Redis:
Redis 是一个开源的支持网络、可基于内存也可持久化的日志型、Key-Value数据库,和Memcached类似。它可以用作数据库、缓存和消息中间件。是Salvatore Sanfilippo于2009年开发,2010年3月15日起Redis的开发工作由VMware主持,2013年5月开始由Pivotal赞助。Redis支持存储的value类型相对更多,包括字符串、链表、集合(set)和有序集合(zset)。
与memcached一样,为了保证效率,数据都是缓存在内存中,区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了主从同步。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python、Ruby、Erlang、PHP客户端,使用很方便。 简单说,Redis是一个数据缓存的NoSQL数据库。
Ignite:
Apache Ignite是一个以内存为中心的分布式数据库、缓存和处理平台,可以在PB级数据中,以内存级的速度进行事务性、分析性以及流式负载的处理。Ignite和Apache Arrow很类似,属于大数据范畴中的内存分布式管理系统。Ignite来源于GridGain系统公司开发的GridGain软件,2014 年3月GridGain公司将该软件90%以上的功能和代码开源,2014年10月GridGain通过Apache 2.0许可进入Apache的孵化器进行孵化,2015年9月18日成为Apache的顶级项目,9月28日即发布了1.4.0版。
Ignite提供了完整的SQL、DDL和DML的支持,可以使用纯SQL而不用写代码与Ignite进行交互,这意味着只使用SQL就可以创建表和索引,以及插入、更新和查询数据。有这个完整的SQL支持,Ignite就可以作为一种分布式SQL数据库。Ignite还提供了基于数据关联对数据进行分区的能力,并使用大规模并行处理来提高性能和可伸缩性。Ignite还提供内置的流处理、分析和机器学习功能。它类似于一个关系型的内存数据库,可以像操作数据库一样操作内存缓存。
Arrow:
Apache Arrow 大数据列式内存数据平台。最初是基于Apache Drill项目的代码进行开发的,于2016年2月17日成为Apache顶级项目。它是列式内存分析的事实标准,由来自Drill、Hadoop、HBase、Impala、Storm等13个顶级开源项目的工程师们开发和完善。它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度。它为平面和分层数据指定了独立于语言的标准化列式内存格式,可在现代硬件上进行高效的分析操作。它还提供了计算库和零拷贝流式消息传递和进程间通信。
在分布式系统内部,每个系统都有自己的内存格式,大量的 CPU 资源被消耗在序列化和反序列化过程中,并且由于每个项目都有自己的实现,没有一个明确的标准,造成各个系统都在重复着复制、转换工作,这种问题在微服务系统架构出现之后更加明显,Arrow 的出现就是为了解决这一问题。它提供了一种跨平台应用的内存数据交换格式,是列式内存分析的事实标准。目前支持的语言包括C、C++、C#、Go、Java、JavaScript、MATLAB、Python、R语言、Ruby和Rust等11种语言。
Geode:
Apache Geode是一个高性能的分布式内存对象缓存系统,Key/Value存储系统。是GemFire的开源版,2015年4月GemGire把代码提交给Apache孵化,2016年11月16日毕业成为Apache基金会的顶级项目。Geode是一个相当成熟、强健的的数据管理平台,提供实时的、一致的、贯穿整个云架构地访问数据关键型应用。Geode跨多个进程汇集内存,CPU,网络资源和可选的本地磁盘,以管理应用程序对象和行为。
Geode自身功能比较多,首先它是一个基于JVM的NoSQL分布式数据处理平台,同时集中间件、缓存、消息队列、事件处理引擎、NoSQL数据库于一身的分布式内存数据处理平台。可用来进行完成分布式缓存、数据持久化、分布式事物、动态扩展等功能。简单说,Geode是Redis的增强版。
Neo4j:
Neo4j是一个开源的高性能NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是由Neo技术使用Java语言完全开发的。图形数据库也就意味着它的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。
Neo4j 除了顶点和边,还有一种重要的部分属性。无论是顶点还是边,都可以有任意多的属性。属性的存放类似于一个HashMap,Key 为一个字符串,而 Value 必须是基本类型或者是基本类型数组。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。
CouchDB:
Apache CouchDB是一个分布式的NoSQL面向文档的数据库,2008年11月19日成为Apache顶级开源项目。CouchDB是一个完全包含web的数据库。使用JSON格式存储文档数据。使用web浏览器通过HTTP访问文档。使用JavaScript查询、组合和转换文档。CouchDB可以很好地与现代web和移动应用程序配合使用。可以使用CouchDB 增量复制高效地分发数据。CouchDB支持带有自动冲突检测的主控设置。CouchDB附带了一套特性,比如即时文档转换和实时更改通知,这使得web开发变得非常简单。它甚至提供了一个易于使用的web管理控制台。
Kudu:
Apache Kudu是一个为了Hadoop系统环境而打造的列式存储系统,是一个为块数据的快速分析而生的存储架构,可以同时提供低延迟的随机读写和高效的数据分析能力。Kudu是由Cloudera开源,2015年12月3日进入Apache孵化器,2016年7月20日成为Apache顶级项目。
Kudu专为了对快速变化的数据进行快速的分析,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展、高可用,使用Raft协议进行一致性保证。并且与Cloudera Impala和Apache Spark等当前流行的大数据查询和分析工具结合紧密。在Kudu出现之前,Hadoop生态环境中的储存主要依赖HDFS和HBase,追求高吞吐批处理的用例中使用HDFS,追求低延时随机读取用例下用HBase,而Kudu正好能兼顾这两者。
CarbonData:
Apache CarbonData是一个基于索引的列式数据格式解决方案。华为于2016年6月开源并贡献给Apache,于2017年4月19日成为Apache顶级项目。CarbonData是一种新的融合存储解决方案,利用先进的列式存储,索引,压缩和编码技术提高计算效率,从而加快查询速度,其查询速度比 PetaBytes 数据快一个数量级。
CarbonData提供了一种新的融合数据存储方案,以一份数据同时支持“交互式分析、详单查询、任意维度组合的过滤查询等”多种大数据应用场景,并通过丰富的索引技术、字典编码、列存等特性提升了IO扫描和计算性能,实现百亿数据级秒级响应,与大数据生态Apache Hadoop、Apache Spark等无缝集成。
7、数据处理
MapReduce:
Apache Hadoop MapReduce是一个分布式的离线计算框架,用于海量数据的并行运算,是Hadoop数据分析的核心.。MapReduce框架使得编程人员在不会分布式并行编程的情况下,将编写的业务逻辑代码运行在分布式系统上,开发人员可以将绝大部分的工作集中于业务逻辑上的开发,具体的计算只需要交给框架就可以。
MapReduce的处理过程分为两个步骤:Map和Reduce。Map阶段对输入的数据进行并行处理,处理结果传给Reduce完成最后的汇总。但由于MR对HDFS的频繁操作(包括计算结果持久化、数据备份、资源下载及Shuffle等)导致磁盘I/O成为系统性能的瓶颈,因此只适用于离线数据处理或批处理,而不能支持对迭代式、交互式、流式数据的处理,目前逐渐被Spark、Flink替代。
Spark:
Apache Spark是通用的一站式计算框架,是专为大规模数据处理而设计的快速通用的计算引擎。2009年诞生于UC Berkeley的AMPLab,2010 年开源,2013年6月成为Apache孵化项目,2014年2月19日成为Apache顶级项目。Spark是基于MapReduce算法实现的分布式计算,拥有 MapReduce 所具有的优点,但不同于 MR 的是,Job中间输出和结果可以保存在内存中,从而不再需要读写 HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的算法中,高效地支持更多计算模式,包括交互式查询和流处理。
Spark是MapReduce 的替代方案,是对 Hadoop 的补充,而且兼容 HDFS、Hive,可融入 Hadoop 的生态系统,以弥补MapReduce的不足。Spark是在Scala语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。Spark通过提供丰富的Scala、Java、Python API、R及交互式Shell来提高可用性。
Spark主要包含几个重要组件:SparkCore批处理、SparkSQL交互式处理、SparkStreaming流处理、Spark Graphx图计算、Spark MLlib机器学习,Spark旨在成为运行批处理、数据流处理、交互处理、图形处理和机器学习等应用的一站式平台。目前Spark已经成为大数据领域最热门的技术。
Flink:
Apache Flink是一个的开源的流处理和批处理分布式数据处理框架,其核心是一个流式的数据流执行引擎。Flink起源于Stratosphere项目,2014年4月Stratosphere代码被贡献给Apache软件基金会成为孵化器项目,2014年12月17日成为Apache顶级项目,0.6版本以后改名为Flink,2015年09月发布第一个稳定版本0.9。
Flink的概念和使用场合类似于Spark,旨在成为运行批处理、数据流处理、交互处理、图形处理和机器学习等应用的一站式平台。Flink不仅具有支持高吞吐、低延迟和exactly-once语义的实时计算能力,还有基于流式计算引擎处理批量数据的计算能力,真正意义实现了批流统一,同时Flink运行时本身也支持迭代算法的执行。Flink流式计算模型实现了高吞吐,低延迟,高性能兼具实时流式计算框架,而且完全兼容Hadoop。
众多优秀的特性,使得Flink成为开源大数据数据处理框架中的一颗新星,在全球范围内,越来越多的公司开始使用Flink,Flink也渐渐成为企业内部主流的数据处理框架,逐渐成为下一代大数据数据处理框架标准的趋势。
Storm:
Apache Storm是一个开源的分布式实时大数据处理系统。Hadoop不擅长实时计算,因为它是为批处理而生的,Storm擅长实时处理海量数据,而非批处理。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架,具有最高的摄取率。
Storm最初由Nathan Marz创建,后来被Twitter收购并开源。2011年9月Storm正式发布,2013年9月进入Apache孵化并于2014年9月17日毕业成为Apache顶级项目,短时间内Storm成为了分布式实时处理系统的标准。Storm是用Java和Clojure编写,使用Apache Thrift,能以任何语言编写拓扑topology。Storm提供了毫秒级别的实时数据处理能力。现在随着Spark和Flink的发展,Storm市场占有逐渐在降低,但目前它仍然是实时分析的领导者。
Tez:
Apache Tez是一个开源的支持DAG作业的计算引擎,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Tez是Hortonworks开发的DAG计算框架,是为了更高效地运行存在依赖关系的作业(比如Pig和Hive产生的MapReduce作业),减少磁盘和网络IO。2014年7月16日成为Apache顶级项目。Tez是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduce、Pig、Hive等系统的底层数据处理引擎。简单来说,Tez主要Apache和HDP平台替代MR和Hive底层执行引擎,提高计算效率。
Samza:
Apache Samza是一种是分布式流处理框架,与Apache Kafka消息系统紧密绑定的流处理框架。是LinkedIn于2013年7月开源并作为孵化项目贡献给Apache,2015年1月21日成为Apache顶级项目。它是一个分布式流处理框架,专用于实时数据的处理,非常像Twitter的流处理系统Storm。不同的是Samza基于Hadoop,而且使用了LinkedIn自家的Kafka分布式消息系统。
Samza的目标是将流作为接受到的消息处理,同时,Samza的流初始元素并不是一个tuple或一个DStream,而是一个消息,流被划分到分区,每个分区是一个只读消息的排序的序列,每个消息有一个唯一的ID(offset),系统也支持批处理,从同样的流分区以顺序消费几个消息,尽管Samza主要是依赖于Hadoop的Yarn和Apache Kafka,但是它的Execution & Streaming模块是可插拔的。
Apex:
Apache Apex是一个统一流和批处理引擎。作为新的开源数据流分析方案,Apex脱胎于DataTorrent的RTS平台,能够带来出色的速度表现并简化编程要求。由DataTorrent在2012年创建,2015年8月贡献给Apache,2016年4月20日成为Apache顶级项目。Apex能够在Hadoop上实现数据流分析。其设计目标在于运行Hadoop生态系统,并利用YARN实现按需规模伸缩且通过HDFS实现容错能力。
Beam:
Apache Beam是一个开源的统一编程模型,用于定义和执行并行数据处理管道。Beam主要是对数据处理的编程范式和接口进行了统一定义,这样基于Beam开发的数据处理程序可以执行在任意的分布式计算引擎上。誉为下一代的大数据处理统一标准。Google在2016年2月宣布将大数据流水线产品(Google DataFlow)贡献给Apache基金会孵化,2016年12月21日成为Apache顶级项目,2017年5月发布第一个稳定版本2.0.0。它的强大之处在于它能够同时运行批处理流和流式管道,并且由Beam支持的分布式处理后端之一执行:Apache Apex,Apache Flink,Apache Spark和Google Cloud Dataflow。
Heron:
Heron是一个实时的、容错的、分布式的流数据处理系统。Twitter开发的第二代流处理系统,于2016年5月25日宣布开源。2017年6月23日进入Apache孵化器。Twitter宣称已经用Heron替换了Storm。Heron是Apache Storm的直接继承者。它继承了Apache Storm的实时性、容错、低延迟的特性。并且它保留了Apache Storm的Topology API,使用者可以直接将Apache Storm上构建的Topology项目,直接转移到Apache Storm中运行而不需要做其他更改。它广泛应用于实时分析、连续计算、复杂事件处理和一些实时性要求的应用。相比于Apache Storm,它提供了扩展性更好,调试能力更强,性能更好,管理更容易等特性。它能够每秒钟百万级别的吞吐量和毫秒级别的延迟。
8、数据查询和分析
Hive:
Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL语句的Hive SQL(HQL)查询功能,将SQL语句转换为MapReduce任务进行运行。Hive是由Facebook在2008年将捐献给Apache,2010年9月毕业成为Apache顶级项目。
原理是用熟悉的SQL模型来操作 HDFS 上的数据。优点是学习成本低,可以通过HQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用。方便的使用 Hive 进行数据仓库的建模和建设,然后使用 SQL 模型针对数据仓库中的数据进行统计和分析。但由于Hive底层默认是转换为MR执行,而MR的shuffle是基于磁盘的,所以只能处理离线分析,效率比较低。目前部分企业使用Hive构建数仓。
SparkSQL:
Apache SparkSQL 是一个用来处理结构化数据的spark组件。Spark团队在2014年发布了Spark SQL,并吸收了一个的早期的Hive-on-Spark项目Shark,迅速成为最广泛使用的Spark模块。它提供了一个叫做DataFrames的可编程抽象数据模型,并且可被视为一个分布式的SQL查询引擎。SparkSQL替代的是Hive的查询引擎,且兼容hive。跟基本的Spark RDD的API不同,Spark SQL中提供的接口将会提供给Spark更多关于结构化数据和计算的信息。Spark SQL底层是Spark Core,这种意味着可以轻松地在不同的SQL和API之间进行切换。
Presto:
Presto是一个分布式的数据查询引擎。它本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。是Facebook于2012年开发,2013年开源的分布式SQL交互式查询引擎。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析,但对于OLTP场景并不擅长,Presto只有计算分析能力,所以不能把Presto当做数据库来使用。Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。是一种MPP(Massively parallel processing大规模并行处理)模型,能处理PB级数据。Presto的原理是将数据的一些放在内存进行计算,完成后取出,再处理另一些数据,这样循环的类似流水线的处理模式。
Kylin:
Apache Kylin是Hadoop大数据平台上一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及OLAP能力以支持超大规模数据。它采用Cube预计算技术,可以将某些场景下的大数据 SQL 查询速度提升到亚秒级别。Kylin始创于eBay,并在2014年11月加入Apache孵化器,2015年12月8日成为Apache顶级项目,是第一个中国团队主导贡献的顶级项目。
Kylin它的出现就是为了解决大数据系统中TB级别的数据分析需求,主要是对hive中的数据进行预计算,利用hadoop的MapReduce框架实现,它能在亚秒内查询巨大的Hive表。在Kylin中最关键的两个流程是Cube的预计算过程和SQL查询转换成Cube的过程,尽量多地预先计算聚合结果,在查询时尽量利用预计算的结果得出查询结果,从而避免直接扫描可能无限增大的原始记录。
Impala:
Apache Impala是一个实时交互SQL大数据查询引擎。是Cloudera在受到Google的Dremel启发下开发的SQL On Hadoop开源MPP查询工具,2012年10月开源,于2017年11月28日晋升为apache顶级项目。Impala使用完全开放的形式融入Hadoop生态,允许用户使用SQL操作Hadoop中的海量数据,目前已经支持更多存储选择,比如:Apache Kudu、Amazon S3、Microsoft ADLS、本地存储等。
最初Impala仅支持HDFS海量数据的交互式分析,其灵活性和领先的分析型数据库性能推动了Impala在全球企业中的大量部署。为企业业务提供BI和交互式SQL高效率分析支持,让支持Impala的第三方生态系统快速增长。与Apache Kudu项目,进一步巩固了Cloudera在开源SQL领域的地位。
Druid:
Apache Druid是一个开源的实时大数据分析引擎,旨在快速处理大规模的数据,并能够实现快速查询和分析。是Metamarkets推出的一个分布式内存实时分析系统,用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。2018年2月28日进入Apache孵化器。Druid就是为了解决海量数据上的实时分析,它提供了以交互方式访问数据的能力,数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。
Elastic Search:
Elastic Search(ES) 是一个分布式可扩展的实时搜索和分析引擎,是一个建立在Apache Lucene基础上的搜索引擎.。由Shay Banon在2010年创建并开源,后来Shay和合伙人成立了公司专注打造ES,他们对ES进行了一些商业化的包装和支持。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
ES的实现原理主要分为以下几个步骤,首先用户将数据提交到ES数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。ES是用Java开发的,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,ES是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。ES现在是Elastic的ELK家族成员之一。
HAWQ:
Apache HAWQ(Hadoop With Query 带查询Hadoop)是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用。HAWQ是Pivotal在2012年推出了一款商业许可的高性能SQL引擎,于2015年6月将项目捐献给了Apache,并于2015年9月进入了Apache孵化器,2018年8月15日成为Apache顶级项目。HAWQ是Hadoop原生SQL查询引擎,结合了MPP数据库的关键技术优势和Hadoop的可扩展性和便捷性。官方宣称HAWQ做OLAP高于Hive和Impala性能4倍以上。它非常适合用于Hadoop平台上快速构建数据仓库系统。HAWQ具有大规模并行处理、完善的SQL兼容性、支持存储过程和事务、出色的性能表现等特性,还可与开源数据挖掘库MADLib机器学习库轻松整合,从而使用SQL就能进行数据挖掘与机器学习。
Lucene:
Apache Lucene是一套开源的基于Java的用于全文检索和搜寻的引擎工具包,是一种功能强大且被广泛使用的搜索引擎,由资深全文检索专家Doug Cutting在2000年3月创建开源,在2001年9月加入Apache的Jakarta家族中。Lucene并不是一个完整的搜索引擎产品,而是一个全文检索引擎的架构,可以用来制作搜索引擎产品。它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎。
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具。
Solr:
Apache Solr 是基于Apache Lucene构建的开源的企业搜索平台。2004年发布,2007年1月17日成为Apache顶级项目。Solr 具有高可靠性,可扩展性和容错性,可提供分布式索引,复制和负载均衡查询,自动故障转移和恢复以及集中配置等特性。Solr 是用 Java 编写、运行在 Servlet 容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。Solr 采用了Lucene Java 搜索库为核心的全文索引和搜索,并具有类似 REST 的 HTTP/XML 和 JSON 的 API。Solr 强大的外部配置功能使得无需进行 Java 编码,便可对其进行调整以适应多种类型的应用程序。Solr 为世界上许多大型互联网站点提供搜索和导航功能。
Phoenix:
Apache Phoenix是构建在HBase之上的SQL框架,可以使用标准的JDBC的API去代替常规的HBase客户端的API去创建表,插入数据和查询HBase数据。由Saleforce在2013年捐献给Apache,2014年5月项目毕业成为顶级项目。它一个Java中间层,可以让开发者通过Phoenix可以像使用MySQL等关系型数据库一样使用HBase中的数据表。Phoenix会将用户编写的SQL查询编译为一系列的Scan操作,最终产生通用的JDBC结果集返回给客户端。它充分利用了HBase协处理器和过滤器等底层,小范围的查询在毫秒级响应,千万数据的话响应速度为秒级。
9、数据收集
Flume:
Apache Flume是一个分布式海量日志采集、聚合和传输系统。Flume最初由Cloudera由开发,于2011年6月贡献给Apache,2012年成为Apache顶级项目。Flume支持在日志系统中定制各类数据发送方,用于收集数据,同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
Filebeat:
Filebeat是本地文件的日志数据采集器。Filebeat是一个轻量级日志传输工具,它监视日志目录或特定日志文件(Tail File),并将它们转发给Logstash、Elasticsearch、Kafka、Redis等中。其作用是收集业务服务器的日志,输出到一个日志系统便于集中管理。Filebeat 是 Elastic Stack 的一部分,因此能够与 Logstash、Elasticsearch 和 Kibana 无缝协作。无论您要使用 Logstash 转换或充实日志和文件,还是在 Elasticsearch 中随意处理一些数据分析,亦或在 Kibana 中构建和分享仪表板,Filebeat 都能轻松地将您的数据发送至最关键的地方。Filebeat占用资源少,而且安装配置也比较简单,支持目前各类主流OS及Docker平台。
Logstash:
Logstash是一个具有实时管道功能的开源数据收集引擎。它可以动态地将来自不同数据源的数据统一起来,并将数据规范化到选择的目的地。可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。Logstash作为一个数据管道中间件,支持对各种类型数据的采集与转换,并将数据发送到各种类型的存储库。Logstash现在是Elastic的ELK家族成员之一。
Chukwa:
Apache Chukwa 是一个开源的用于监控大型分布式系统的数据收集系统。2010年7月14日进入Apache孵化器,2013年9月27日成为Apache顶级项目。它是构建在 hadoop 的 hdfs 和 MapReduce 框架之上的,继承了 Hadoop 的可伸缩性和健壮性。Chukwa 还包含了一个强大和灵活的工具集,可用于展示、监控和分析已收集的数据。Chukwa用于管理大型分布式系统的数据收集系统(2000+以上的节点, 系统每天产生的监控数据量在T级别)。
10、数据交换
Sqoop:
Apache Sqoop 是一款数据迁移工具,用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件。用来在关系型数据库和Hadoop/Hive间进行数据迁移,方便大量数据的导入导出工作。Sqoop底层是通过MapReduce去实现的,但只有Map没有Reduce。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来独立成为一个Apache项目,于2012年3月成为Apache顶级项目。
Kettle:
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。可以将各种类型数据作为数据流,经过处理后再生成各种类型的数据。
DataX:
DataX 是阿里巴巴开源的离线数据同步工具/平台,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
NIFI:
Apache NiFi 是一个易于使用、功能强大而且可靠的数据拉取、数据处理和分发系统。基于Web图形界面,通过拖拽、连接、配置完成基于流程的编程,实现数据采集等功能。NiFi是美国国家安全局NAS开发并使用了8年的可视化数据集成产品,2014年贡献给了Apache社区,2015年成为Apache顶级项目。
它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiFi是基于Java的,使用Maven支持包的构建管理。NiFi基于Web方式工作,后台在服务器上进行调度。用户可以为数据处理定义为一个流程,然后进行处理,后台具有数据处理引擎、任务调度等组件。
11、消息系统
Pulsar:
Apache Pulsar是一个开源的企业级分布式消息系统。项目于2015年由 Yahoo 开源,2017年6月提交给 Apache孵化器,2018年9月成为Apache的顶级项目。Pulsar在消息、计算和存储三个方面进行的协调、抽象和统一。Pulsar对pub-sub和 queue两种模式提供统一的支持,同时保证了一致性,高性能和易扩展性。
Pulsar同时支持处理实时流和消息队列,内部的 Pulsar-Functions 提供了 Stream-native 的轻量级计算框架,保证了数据的即时流式处理。Pulsar借助Apache BookKeeper提供了以 segment 为中心的存储架构,保证了存储的性能,持久性和弹性。Pulsar是无状态的,在Pulsar架构中,数据的分发和保存是相互独立的。broker 从生产者接收数据,然后将数据发送给消费者,但数据是保存在 BookKeeper 中的。Pulsar支持跨域复制。Pulsar是下一代分布式消息队列,有替代Kafka的趋势。
Kafka:
Apache Kafka是一个发布/订阅的消息系统,由Scala写成。Kafka最初是由LinkedIn开发,并于2011年初开源,2012年10月从Apache毕业成为顶级项目。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。Kafka是一个分布式的、分区的、多复本的日志提交服务。是目前使用最广泛的消息系统。
RocketMQ:
Apache RocketMQ是一款分布式、队列模型的消息中间件。是阿里巴巴在2012年开源,于2016年11月成为Apache孵化项目, 2017年9月25日成为Apache顶级项目。它借鉴参考了JMS规范的MQ实现,更参考了优秀的开源消息中间件Kafka,并且结合阿里实际业务需求在天猫双十一的场景,实现业务削峰,分布式事务的优秀框架。它提供了丰富的消息拉取模式,高效的订阅者水平扩展能力,实时的消息订阅机制,亿级消息堆积能力,且具备了连接其它顶级开源生态(如Spark、Ignite和Storm等)能力。
ActiveMQ:
Apache ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现。它是一款历史悠久的开源项目,2007年成为Apache顶级项目。已经在很多产品中得到应用,实现了JMS1.1规范,可以和Spring-JMS轻松融合,实现了多种协议。有多重语言的成熟的客户端。不够轻巧,支持持久化到数据库,对队列数较多的情况支持不好。
RabbitMQ:
RabbitMQ是基于 AMQP 实现的一个开源消息组件,主要用于在分布式系统中存储转发消息。是一个消息代理和队列服务器,可以在完全不同的应用之间共享数据。使用Erlang语言开发,具有很好的并发优势,性能较好。支持消息持久化。
12、任务调度
Azkaban:
Azkaban是由Linkedin开源的一个批量工作流任务调度器。使用Java开发。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪工作流。Azkaban通过Web浏览器在GUI中进行基于时间的调度,将所有正在运行的工作流的状态保存在其内存中。
Oozie:
Apache Oozie是一个基于Hadoop的企业级工作流调度框架。Oozie是Cloudeara贡献给Apache的顶级项目。它关注灵活性和创建复杂的工作流程,允许由时间,事件或数据可用性触发作业,可以通过命令行、Java API、Web浏览器,以及GUI操作。它以XML的形式写调度流程,可以调度MR、Hive、Spark、Pig、Shell、Jar等等。Oozie将所有正在运行的工作流的状态保存SQL数据库,仅将其内存用于状态事务。相比于Azkaban,Oozie属于重量级的任务调度工具。
Airflow:
Apache Airflow是一个灵活,可扩展的工作流自动化和调度系统,是基于DAG的一种调度器,可编译和管理数百PB的数据。Airflow最初由Airbnb于2014年创建,2016年3月提交给Apache孵化器,2019年1月成为Apache顶级项目。Airflow可以轻松地协调复杂的计算工作流程,通过智能调度,数据库和依赖关系管理,错误处理和日志记录,可以自动化从单个服务器到大型群集的资源管理。
该项目是用Python编写的,具有高度可扩展性,能够运行用其他语言编写的任务,并允许与常见的体系结构和项目集成,如AWS S3,Docker,Kubernetes,MySQL,Postgres等。据悉,Apache Airflow 目前正被 200 多个组织使用,包括 Adobe、Airbnb、Astronomer、Etsy、Google、ING、Lyft、NYC City Planning、Paypal、Polidea、Qubole、Quizlet、Reddit、Reply、Solita、Square、Twitter 等。
13、数据治理
Ranger:
Apache Ranger 是一个用在 Hadoop 平台上并提供操作、监控、管理综合数据安全的框架,它提供一个集中的管理机制,管理基于Apache Hadoop生态圈的所有数据权限。Ranger是由Hortonworks所主导,2014年7月24日进入Apache孵化,2017年1月18日成为Apache的顶级项目。随着Apache YARN的出现,Hadoop平台现在可以支持一个真正的数据湖体系结构。企业可以在多租户环境中运行多个工作负载,因此, Hadoop中的数据安全性需要发展。
Apache Ranger 提供最全面的安全覆盖,本地支持众多 Apache 项目,包括Atlas、HDFS、HBase、Hive、Kafka、Knox、NiFi、Solr、Storm 和 YARN。Ranger 通过访问控制策略提供了一种标准的授权方法。作为标准,Ranger提供了一种集中式的组件,用于审计用户的访问行为和管理组件间的安全交互行为。Ranger 使用了一种基于属性的方法定义和强制实施安全策略。当与 Apache Hadoop 的数据治理解决方案和元数据仓储组件Apache Atlas一起使用时,它可以定义一种基于标签的安全服务,通过使用标签对文件和数据资产进行分类,并控制用户和用户组对一系列标签的访问。
Sentry:
Apache Sentry是一个为Hadoop集群元数据和数据存储提供集中、细粒度的访问控制项目。Sentry是由Cloudera开发,2013年8月成为Apache的孵化项目,2016年3月16日成为Apache顶级项目。初衷是为了让用户能够细粒度的控制Hadoop系统中的数据,所以Sentry对HDFS,Hive以及同样由Cloudera开发的Impala有着很好的支持性。
Sentry旨在成为Hadoop各组件的可插拔授权引擎。它允许您定义授权规则以验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块化的,可以支持Hadoop中各种数据模型的授权。Sentry是一个RPC服务,将认证元数据信息存储在关系型数据库,并提供RPC接口检索和操作权限。
Atlas:
Apache Atlas是Apache Hadoop的数据和元数据治理的框架,是Hortonworks 公司联合其他厂商与用户于2015年发起数据治理倡议,2015年5月5日进入Apache孵化,2017年6月21日成为Apache顶级项目。是为解决Hadoop生态系统的元数据治理问题而产生的开源项目。它为Hadoop集群提供了包括数据分类、集中策略引擎、数据血缘、安全和生命周期管理在内的元数据治理核心登能力。
Atlas是一组可伸缩和可扩展的核心基础治理服务,使企业能够有效和高效地满足Hadoop中的遵从性需求,并允许与整个企业数据生态系统进行集成。Atlas用于管理共享元数据、数据分级、审计、安全性以及数据保护等方面,与Apache Ranger整合,用于数据权限控制策略。
14、数据可视化
Kibana:
Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 Kibana 搜索、查看、交互存放在Elasticsearch 索引里的数据,使用各种不同的图表、表格、地图等展示高级数据分析与可视化,基于浏览器的接口使你能快速创建和分享实时展现Elasticsearch查询变化的动态仪表盘,让大量数据变得简单,容易理解。Kibana 现在是Elastic的ELK家族成员之一。
D3.js:
D3(Data-Driven Documents 数据驱动文档)是一个开源数据可视化项目,由纽约时报的工程师在2011年2月首次发布。D3其实就是一个JavaScript的函数库,被称为一个互动和动态的数据可视化库网络。D3 项目的代码托管于 GitHubJavaScript 文件的后缀名通常为 .js,故 D3 也常使用 D3.js 称呼。D3 提供了各种简单易用的函数,大大简化了 JavaScript 操作数据的难度。由于它本质上是 JavaScript ,所以用 JavaScript 也可以实现所有功能的,但它能大大减小了工作量,尤其是在数据可视化方面,D3 已经将生成可视化的复杂步骤精简到了几个简单的函数,只需要输入几个简单的数据,就能够转换为各种绚丽的图形。D3利用可缩放矢量图形或SVG格式,允许您渲染可放大或缩小的形状,线条和填充,而不会降低质量。
ECharts:
ECharts(Enterprise Charts 商业产品图表库)是一个提供商业产品常用图表的纯Javascript的图表库。由百度开源,于2018年1月进入Apache孵化器。它可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
15、数据挖掘
Mahout:
Apache Mahout 是机器学习和数据挖掘的一个分布式框架,它是基于hadoop之上的。它提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘,主要核心的三大算法为推荐,聚类及分类算法。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
MADlib:
Apache MADlib 是一个基于SQL的数据库内置的可扩展的机器学习库。是Pivotal公司与UCBerkeley合作开发,2015年9月进入Apache孵化器,于2017年7月19日毕业成为Apache顶级项目。MADlib提供了精确的数据并行实现、统计和机器学习方法对结构化和非结构化数据进行分析。提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN聚集,文本挖掘,数据校验等。
In-Database Analytics的特性使其大大扩展了数据库的分析功能,充分利用MPP架构使其能够快速处理海量数据集。MADlib 可以与Apache HAWQ、PostgreSQL和Greenplum等数据库系统无缝集成。DBAer不用现学Python、R或MATLAB,只要使用MADlib,用SQL就能实现简单的数据挖掘。
Spark MLlib:
Apache Spark MLlib是Spark的机器学习库,是Apache Spark的一个组成模块。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。Spark设计的初衷就是用来进行迭代计算。它基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说Spark正是机器学习的理想的平台。
利用Spark基于内存迭代计算、机器学习的优势,使用Spark处理数据挖掘将会更显得有价值。MLllib目前分为两个代码包:spark.mllib库基于RDD的原始算法API;spark.ml库基于DataaFrame的高层次的API。Spark2.0以后,Spark MLlib进入维护不再更新,预计Spark3.0以后被废除,完全转向Spark ML。
Tensorflow:
TensorFlow是一个开源的基于数据流图的机器学习框架,它是Google Brain的第二代机器学习系统,常被应用于各种感知、语言理解、语音识别、图像识别等多项机器深度学习领域。TensorFlow是一个采用数据流图(Data Flow Graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,张量(Tensor)代表了多维数组,图中的线(Edges)则表示在节点间相互联系的多维数据数组,即张量,流(Flow)代表了基于数据流图的计算。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
Keras:
Keras是一个基于TensorFlow的深度学习库,其特点是对用户友好的,并且能够提供简易和快速的原型设计。Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果。
16、云平台
AWS S3:
Amazon S3(Amazon Simple Storage Service )是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用它来存储和保护各种用例(如网站、移动应用程序、备份和还原、存档、企业应用程序、IoT 设备和大数据分析)的任意数量的数据。Amazon S3 提供了易于使用的管理功能,因此您可以组织数据并配置精细调整过的访问控制以满足特定的业务、组织和合规性要求。
GCP:
GCP(Google Cloud Platform)是Google提供的一套云计算服务。它提供一系列模块化云服务,包括计算、数据存储、数据分析和机器学习。Google把运行各种网络应用所需要的一切基础架构,包括服务器、操作系统、应用软件、网站架构、API接口、数据库、CDN、VPN、物联网、大数据等等全部预先准备好。你只需要在google云平台上注册一个帐号,即可在分布在全球各地数十个google机房使用所有的基础架构服务。
Microsoft Azure:
Azure是Microsoft提供的企业级云计算平台。Azure的主要目标是为开发者提供一个平台,帮助开发可运行在云服务器、数据中心、Web和PC上的应用程序。云计算的开发者能使用微软全球数据中心的储存、计算能力和网络基础服务。