吐血整理:大數據開源框架技術掃盲
引言
主要基于對現階段一些常用的大數據開源框架技術的整理,只是一些簡單的介紹,并不是詳細技術梳理。可能會有疏漏,發現再整理。參考的太多,就不一一列出來了。這只是作為一個梳理,對以后選型或者擴展的做個參考。
目錄
- 系統平臺 (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、虛擬專用網絡、物聯網、大數據等等全部預先準備好。你只需要在google云平臺上注冊一個帳號,即可在分布在全球各地數十個google機房使用所有的基礎架構服務。
Microsoft Azure:
Azure是Microsoft提供的企業級云計算平臺。Azure的主要目標是為開發者提供一個平臺,幫助開發可運行在云服務器、數據中心、Web和PC上的應用程序。云計算的開發者能使用微軟全球數據中心的儲存、計算能力和網絡基礎服務。