大數據開源框架技術彙總

主要基於對現階段一些常用的大數據開源框架技術的整理,只是一些簡單的介紹,並不是詳細技術梳理。可能會有疏漏,發現再整理。參考的太多,就不一一列出來了。這只是作爲一個梳理,對以後選型或者擴展的做個參考。

系統平臺

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。
相關網站:Apache Hadoop

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。
相關網站:Cloudera CDH

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。
相關網站:Hortonworks HDP

集羣管理與監控

Clodera Manager:CM 是 Cloudera 開發的一個基於 Web 的用於部署和管理 CDH 集羣的軟件。它具有集羣自動化安裝、中心化管理、集羣監控、報警等功能,大大節省集羣部署時間,降低了運維成本,極大的提高集羣管理的效率。(非開源)

相關網站:Clodera Manager

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 平臺大數據分析開發的可視化分析利器。

網站:Hue

Ambari:Apache Ambari 是 Hortonworks 貢獻給 Apache 基金會的 Hadoop 平臺管理軟件,2013 年 11 月 20 日成爲 Apache 頂級項目。

它具備 Hadoop 組件的安裝、管理、運維等基本功能,提供 Web UI 進行可視化的集羣管理,簡化了大數據平臺的安裝、使用難度。

相關網站:Apache Ambari

Dr.Elephant:Dr.elephant 是一款對 Hadoop 和 Spark 任務進行性能監控和調優的工具,它由 LinkedIn 的團隊於 2016 年開源,開源之前已經在公司運行使用 2 年。

它能自動採集作業的度量指標並分析,然後以簡單明瞭的方式展現出來。Dr.elephant 的設計思想是通過作業分析結果來指導開發者進行作業調優,從而提升開發者效率和集羣資源的利用率。

相關網址:Dr.Elephant
Ganglia:Ganglia 是 UC Berkeley 發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia 的核心包含 gmond、gmetad 以及一個 Web 前端。

主要是用來監控系統性能,如:cpu 、mem、硬盤利用率, I/O 負載、網絡流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統整體性能起到重要作用。

相關網站:Ganglia

Zabbix:Zabbix 是一個的基於 Web 界面的開源的分佈式企業級監控解決方案。於 2004 年 zabbix 1.0 正式發佈,由 Alexei Vladishev 團隊維護更新,Zabbix SIA 提供支持。

Zabbix 通過 C/S 模式採集數據,通過 B/S 模式在 web 端展示和配置。它能夠實時監控從成千上萬臺服務器、虛擬機和網絡設備中收集到的數以百萬計的指標。

Zabbix 能監視各種網絡參數,保證服務器系統的安全運營,並提供靈活的通知機制以讓系統管理員快速定位 / 解決存在的各種問題。還能夠利用存儲數據提供傑出的報表及實時的圖形化數據處理,實現對監控主機 7x24 小時集中監控。

相關網站:Zabbix

Eagle:Apache Eagle 是一個開源監視和警報解決方案,用於智能實時地識別大數據平臺上的安全和性能問題,例如 Apache Hadoop,Apache Spark 等。

Eagle 起源於 eBay,最早用於解決大規模 Hadoop 集羣的監控問題,於 2015 年 10 月提交給 Apache 孵化器,2016 年 12 月 21 日成爲 Apache 頂級項目。

Eagle 主要包括:高可擴展、高可伸縮、低延時、動態協同等特點,支持數據行爲實時監控,能立即監測出對敏感數據的訪問或惡意的操作,並立即採取應對的措施。

Eagle 提供一套高效分佈式的流式策略引擎,具有高實時、可伸縮、易擴展、交互友好等特點,同時集成機器學習對用戶行爲建立 Profile 以實現實時智能實時地保護 Hadoop 生態系統中大數據的安全。

相關網站:Apache Eagle

文件系統

HDFS:HDFS(Hadoop Distributed File System)分佈式文件系統,是分佈式計算中數據存儲管理的基礎。是 Hadoop Core 項目的核心子項目。

HDFS 是基於流數據模式訪問和處理超大文件的需求而開發的,效仿谷歌文件系統 (GFS),數據在相同節點上以複製的方式進行存儲以實現將數據合併計算的目的。HDFS 是一個高度容錯性的系統,適合部署在廉價的機器上。

HDFS 能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS 放寬了一部分 POSIX 約束,來實現流式讀取文件系統數據的目的。

它有很多的優點,但也存在有一些缺點,包括:不適合低延遲數據訪問、無法高效存儲大量小文件、不支持多用戶寫入及任意修改文件。

相關網站:Hadoop HDFS

GPFS:GPFS(General Parallel File System)是 IBM 推出的基於 Hadoop 的並行分佈式集羣文件系統。IBM 認爲 GPFS 不共享集羣版本比 HDFS 快得多,因爲它在內核級別中運行,而不是像 HDFS 在操作系統中運行。

GPFS 是一個共享磁盤的文件系統,集羣內的所有節點可以並行地訪問所有共享磁盤,並通過分佈式的 Token 管理機制和條帶化技術來管理和優化節點的訪問。GPFS 支持完整的 Posix 文件系統語義。

GPFS 的應用範圍非常廣泛,從多節點文件共享服務、實時多媒體處理、到大型的高性能計算集羣,我們都可以看到 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 現在是雲計算、虛擬機部署的最火開源存儲解決方案,是私有云事實上的標準。

相關網站:Ceph、Ceph 中文網

GlusterFS:GlusterFS(GNU ClusterFile System) 是一種全對稱的開源分佈式文件系統,所謂全對稱是指 GlusterFS 採用彈性哈希算法,沒有中心節點,所有節點全部平等。

GlusterFS 配置方便,穩定性好,可輕鬆達到 PB 級容量,數千個節點。2011 年被紅帽收購,之後推出了基於 GlusterFS 的 Red Hat Storage Server,增加了針對 KVM 的許多特性,可用作爲 KVM 存儲 image 存儲集羣,也可以爲 LB 或 HA 提供存儲。

相關網站:GlusterFS

Swift:Swift 最初是由 Rackspace 公司開發的高可用分佈式對象存儲服務。於 2010 年貢獻給 OpenStack 開源社區作爲其最初的核心子項目之一,爲其 Nova 子項目提供虛機鏡像存儲服務。

Swift 構築在比較便宜的標準硬件存儲基礎設施之上,無需採用 RAID(磁盤冗餘陣列),通過在軟件層面引入一致性散列技術和數據冗餘性,犧牲一定程度的數據一致性來達到高可用性和可伸縮性,支持多租戶模式、容器和對象讀寫操作,適合解決互聯網的應用場景下非結構化數據存儲問題。

Swift 是一種比較通用的存儲解決方案,能夠可靠地存儲數量非常多的大小不一的文件。

相關網站:OpenStack Swift

BeeGFS:BeeGFS(原 FhGFS)既是一個網絡文件系統也是一個並行文件系統。是由 Fraunhofer Institute 爲工業數學計算而設計開發,由於在歐洲和美國的中小型 HPC 系統性能表現良好,在 2014 年改名註冊爲 BeeGFS 並受到科研和商業的廣泛應用。

客戶端通過網絡與存儲服務器進行通信 (具有 TCP/IP 或任何具有 RDMA 功能 的互連,如 InfiniBand,RoCE 或 Omni-Path,支持 native verbs 接口)。通過 BeeGFS 添加更多的服務器, 其容量和性能被聚合在單個命名空間中。

BeeGFS 是遵循 GPL 的 “免費開源” 產品,文件系統沒有許可證費用。 由 ThinkParQ 提供專業支持,系統集成商可以爲客戶構建使用 BeeGFS 的解決方案。

相關網站: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)之間。

相關網站:Alluxio

資源調度

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 一起執行和監視任務。

相關網址:Hadoop Yarn

Mesos:Apache Mesos 是一個集羣管理器,可跨分佈式應用程序或框架提供有效的資源隔離和共享。Mesos 最初是由加州大學伯克利分校的 AMPLab 開發的,Mesos 項目發佈於是 2009 年,2010 年 12 月進入 Apache 孵化器,2013 年 6 月 19 日成爲 Apache 頂級項目。

Twitter 公司則是 Mesos 項目的早期支持者和使用者之一。它位於應用程序層和操作系統之間,可以更加輕鬆地在大規模集羣環境中更有效地部署和管理應用程序。它可以在動態共享節點池上運行許多應用程序。

對數據中心而言它就像一個單一的資源池,從物理或虛擬機器中抽離了 CPU、內存、存儲以及其它計算資源,很容易建立和有效運行具備容錯性和彈性的分佈式系統。2019 年 5 月,Twitter 宣佈放棄 Mesos,基礎設施從 Mesos 全面轉向 Kubernetes。

相關網址:Apache Mesos

協調框架

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 專門設計的一種支持崩潰恢復的原子廣播協議。

相關網址:Apache 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 失效、數據改變監視、多值、目錄監聽、分佈式鎖原子操作等功能,可以方便的跟蹤並管理集羣節點的狀態。

相關網站:Etcd

Consul:Consul 是 HashiCorp 公司推出的開源工具,用於實現分佈式系統的服務發現與配置共享。Consul 用 Go 語言實現,因此具有天然可移植性 (支持 Linux、windows 和 Mac OS X)。

與其他分佈式服務註冊與發現的方案不同,Consul 的方案更 "一站式",內置了服務註冊與發現框架、分佈一致性協議實現、健康檢查、Key/Value 存儲、多數據中心方案,不再需要依賴其他工具(比如 ZooKeeper 等)。

採用 Raft 算法一致性協議,支持多數據中心分佈式高可用,服務發現和配置共享,使用 gossip 協議管理成員和消息廣播,支持 ACL 訪問控制。最新的 Consul 提供了一個新特性 “Mesh 網關”,實現透明、跨網絡的連接。

這些特性可以跨平臺工作,對 Kubernetes 提供一流的支持,並且在任何雲或專用網絡上都可以輕鬆地部署到更傳統的環境中,實現了 Consul 多雲服務網絡的目標。

相關網站:Consul

數據存儲

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 是基於列的而不是基於行的模式。

相關網址:Apache Hbase

Cassandra:Apache Cassandra 是一個開源的、分佈式的混合型 NoSQL 數據庫。它最初由 Facebook 開發,於 2008 年開源,2010 年 2 月 17 日成爲 Apache 頂級項目。主要用於儲存海量數據。

以 Amazon 專有的完全分佈式 Dynamo 爲基礎,結合了 Google BigTable 基於列族的數據模型。P2P 去中心化的存儲。很多方面都可以稱之爲 Dynamo 2.0。

Cassandra 的主要特點就是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分佈式網絡服務,對 Cassandra 的一個寫操作,會被複制到其它節點上去,對 Cassandra 的讀操作,也會被路由到某個節點上面去讀取。

對於一個 Cassandra 羣集來說,擴展性能是比較簡單的事情,只管在羣集裏面添加節點就可以了。它提供了高可用性,沒有單點故障。它是一個網絡社交雲計算方面理想的數據庫。

相關網站:Apache Cassandra

ScyllaDB:ScyllaDB 是用 C++ 重寫的 Cassandra,官網號稱每節點每秒處理 100 萬 TPS。ScyllaDB 完全兼容 Apache Cassandra,擁有比 Cassandra 多 10x 倍的吞吐量,降低了延遲。

ScyllaDB 號稱是世界上最快的 NoSQL 列存儲數據庫。ScyllaDB 在垃圾收集或者 Compaction 的時候不需要暫停,在常規生產負載的時候可以添加和刪除節點,數據結構測量不會跨 CPU 緩存線,poll 模式驅動替代了中斷。

目前國內資料極少,中文網 2016 年 7 月停止了更新。

相關網站:ScyllaDB、ScyllaDB 中文網

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。

相關網址:MongoDB、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 數據庫提供更豐富的數據模型,但不是完全的關係數據庫。

相關網站:Apache Accumulo

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 數據庫。

相關網站:Redis、Redis 中文網

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 還提供內置的流處理、分析和機器學習功能。它類似於一個關係型的內存數據庫,可以像操作數據庫一樣操作內存緩存。

相關網站:Apache Ignite、Apache 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 種語言。

相關網站:Apache Arrow

Geode:Apache Geode 是一個高性能的分佈式內存對象緩存系統,Key/Value 存儲系統。是 GemFire 的開源版,2015 年 4 月 GemGire 把代碼提交給 Apache 孵化,2016 年 11 月 16 日畢業成爲 Apache 基金會的頂級項目。

Geode 是一個相當成熟、強健的的數據管理平臺,提供實時的、一致的、貫穿整個雲架構地訪問數據關鍵型應用。Geode 跨多個進程彙集內存,CPU,網絡資源和可選的本地磁盤,以管理應用程序對象和行爲。

Geode 自身功能比較多,首先它是一個基於 JVM 的 NoSQL 分佈式數據處理平臺,同時集中間件、緩存、消息隊列、事件處理引擎、NoSQL 數據庫於一身的分佈式內存數據處理平臺。

可用來進行完成分佈式緩存、數據持久化、分佈式事物、動態擴展等功能。簡單說,Geode 是 Redis 的增強版。

相關網站:Apache Geode

Neo4j:Neo4j 是一個開源的高性能 NOSQL 圖形數據庫,它將結構化數據存儲在網絡上而不是表中。它是由 Neo 技術使用 Java 語言完全開發的。圖形數據庫也就意味着它的數據並非保存在表或集合中,而是保存爲節點以及節點之間的關係。

Neo4j 除了頂點和邊,還有一種重要的部分屬性。無論是頂點還是邊,都可以有任意多的屬性。屬性的存放類似於一個 HashMap,Key 爲一個字符串,而 Value 必須是基本類型或者是基本類型數組。

Neo4j 也可以被看作是一個高性能的圖引擎,該引擎具有成熟數據庫的所有特性。Neo4j 創建的圖是用頂點和邊構建一個有向圖,其查詢語言 cypher 已經成爲事實上的標準。

相關網站:Neo4j、Neo4j 中文社區

CouchDB:Apache CouchDB 是一個分佈式的 NoSQL 面向文檔的數據庫,2008 年 11 月 19 日成爲 Apache 頂級開源項目。

CouchDB 是一個完全包含 web 的數據庫。使用 JSON 格式存儲文檔數據。使用 web 瀏覽器通過 HTTP 訪問文檔。使用 JavaScript 查詢、組合和轉換文檔。CouchDB 可以很好地與現代 web 和移動應用程序配合使用。

可以使用 CouchDB 增量複製高效地分發數據。CouchDB 支持帶有自動衝突檢測的主控設置。CouchDB 附帶了一套特性,比如即時文檔轉換和實時更改通知,這使得 web 開發變得非常簡單。它甚至提供了一個易於使用的 web 管理控制檯。

相關網站:Apache CouchDB

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 正好能兼顧這兩者。

相關網站:Apache Kudu

CarbonData:Apache CarbonData 是一個基於索引的列式數據格式解決方案。華爲於 2016 年 6 月開源並貢獻給 Apache,於 2017 年 4 月 19 日成爲 Apache 頂級項目。

CarbonData 是一種新的融合存儲解決方案,利用先進的列式存儲,索引,壓縮和編碼技術提高計算效率,從而加快查詢速度,其查詢速度比 PetaBytes 數據快一個數量級。

CarbonData 提供了一種新的融合數據存儲方案,以一份數據同時支持 “交互式分析、詳單查詢、任意維度組合的過濾查詢等” 多種大數據應用場景,並通過豐富的索引技術、字典編碼、列存等特性提升了 IO 掃描和計算性能,實現百億數據級秒級響應,與大數據生態 Apache Hadoop、Apache Spark 等無縫集成。

相關網站:Apache CarbonData、CarbonData 中文文檔

數據處理

MapReduce:Apache Hadoop MapReduce 是一個分佈式的離線計算框架,用於海量數據的並行運算,是 Hadoop 數據分析的核心。

MapReduce 框架使得編程人員在不會分佈式並行編程的情況下,將編寫的業務邏輯代碼運行在分佈式系統上,開發人員可以將絕大部分的工作集中於業務邏輯上的開發,具體的計算只需要交給框架就可以。

MapReduce 的處理過程分爲兩個步驟:Map 和 Reduce。Map 階段對輸入的數據進行並行處理,處理結果傳給 Reduce 完成最後的彙總。

但由於 MR 對 HDFS 的頻繁操作(包括計算結果持久化、數據備份、資源下載及 Shuffle 等)導致磁盤 I/O 成爲系統性能的瓶頸,因此只適用於離線數據處理或批處理,而不能支持對迭代式、交互式、流式數據的處理,目前逐漸被 Spark、Flink 替代。

相關網站:Hadoop MapReduce

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 已經成爲大數據領域最熱門的技術。

相關網站:Apache 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 也漸漸成爲企業內部主流的數據處理框架,逐漸成爲下一代大數據數據處理框架標準的趨勢。

相關網站:Apache 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 市場佔有逐漸在降低,但目前它仍然是實時分析的領導者。

相關網站:Apache Storm、Apache 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 底層執行引擎,提高計算效率。

相關網站:Apache Tez

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 模塊是可插拔的。

相關網站:Apache Samza、Apache Samza 教程

Apex:Apache Apex 是一個統一流和批處理引擎。作爲新的開源數據流分析方案,Apex 脫胎於 DataTorrent 的 RTS 平臺,能夠帶來出色的速度表現並簡化編程要求。

由 DataTorrent 在 2012 年創建,2015 年 8 月貢獻給 Apache,2016 年 4 月 20 日成爲 Apache 頂級項目。Apex 能夠在 Hadoop 上實現數據流分析。其設計目標在於運行 Hadoop 生態系統,並利用 YARN 實現按需規模伸縮且通過 HDFS 實現容錯能力。

相關網站:Apache Apex

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。 

相關網站:Apache Beam

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,它提供了擴展性更好,調試能力更強,性能更好,管理更容易等特性。它能夠每秒鐘百萬級別的吞吐量和毫秒級別的延遲。

相關網站:Heron 源碼

數據查詢和分析

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 構建數倉。

相關網站:Apache 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 之間進行切換。

相關網站:Apache SparkSQL

Presto:Presto 是一個分佈式的數據查詢引擎。它本身並不存儲數據,但是可以接入多種數據源,並且支持跨數據源的級聯查詢。是 Facebook 於 2012 年開發,2013 年開源的分佈式 SQL 交互式查詢引擎。

Presto 是一個 OLAP 的工具,擅長對海量數據進行復雜的分析,但對於 OLTP 場景並不擅長,Presto 只有計算分析能力,所以不能把 Presto 當做數據庫來使用。

Presto 是一個低延遲高併發的內存計算引擎,相比 Hive,執行效率要高很多。是一種 MPP(Massively parallel processing 大規模並行處理)模型,能處理 PB 級數據。

Presto 的原理是將數據的一些放在內存進行計算,完成後取出,再處理另一些數據,這樣循環的類似流水線的處理模式。

相關網站: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 的過程,儘量多地預先計算聚合結果,在查詢時儘量利用預計算的結果得出查詢結果,從而避免直接掃描可能無限增大的原始記錄。

相關網站:Apache Kylin 中文版

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 領域的地位。

相關網站:Apache Impala

Druid:Apache Druid 是一個開源的實時大數據分析引擎,旨在快速處理大規模的數據,並能夠實現快速查詢和分析。是 Metamarkets 推出的一個分佈式內存實時分析系統,用於解決如何在大規模數據集下進行快速的、交互式的查詢和分析。

2018 年 2 月 28 日進入 Apache 孵化器。Druid 就是爲了解決海量數據上的實時分析,它提供了以交互方式訪問數據的能力,數據可以實時攝入,進入到 Druid 後立即可查,同時數據是幾乎是不可變。

通常是基於時序的事實事件,事實發生後進入 Druid,外部系統就可以對該事實進行查詢。

相關網站:Apache 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 家族成員之一。

相關網站:ElasticSearch、ElasticSearch 中文社區

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 就能進行數據挖掘與機器學習。

相關網站:Apache HAWQ

Lucene:Apache Lucene 是一套開源的基於 Java 的用於全文檢索和搜尋的引擎工具包,是一種功能強大且被廣泛使用的搜索引擎,由資深全文檢索專家 Doug Cutting 在 2000 年 3 月創建開源,在 2001 年 9 月加入 Apache 的 Jakarta 家族中。

Lucene 並不是一個完整的搜索引擎產品,而是一個全文檢索引擎的架構,可以用來製作搜索引擎產品。它是一個全文檢索引擎的架構,提供了完整的創建索引和查詢索引,以及部分文本分析的引擎。

Lucene 的目的是爲軟件開發人員提供一個簡單易用的工具包,以方便在目標系統中實現全文檢索的功能,或者是以此爲基礎建立起完整的全文檢索引擎。

Lucene 提供了一個簡單卻強大的應用程序接口(API),能夠做全文索引和搜尋,在 Java 開發環境裏 Lucene 是一個成熟的免費開放源代碼工具。

相關網站:Apache 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 爲世界上許多大型互聯網站點提供搜索和導航功能。

相關網站:Apache 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 協處理器和過濾器等底層,小範圍的查詢在毫秒級響應,千萬數據的話響應速度爲秒級。

相關網站:Apache Phoenix

數據收集

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。

相關網站:Apache Flume

Filebeat:Filebeat 是本地文件的日誌數據採集器。Filebeat 是一個輕量級日誌傳輸工具,它監視日誌目錄或特定日誌文件(Tail File),並將它們轉發給 Logstash、Elasticsearch、Kafka、Redis 等中。

其作用是收集業務服務器的日誌,輸出到一個日誌系統便於集中管理。Filebeat 是 Elastic Stack 的一部分,因此能夠與 Logstash、Elasticsearch 和 Kibana 無縫協作。

無論您要使用 Logstash 轉換或充實日誌和文件,還是在 Elasticsearch 中隨意處理一些數據分析,亦或在 Kibana 中構建和分享儀表板,Filebeat 都能輕鬆地將您的數據發送至最關鍵的地方。

Filebeat 佔用資源少,而且安裝配置也比較簡單,支持目前各類主流 OS 及 Docker 平臺。

相關網站:Filebeat

Logstash:Logstash 是一個具有實時管道功能的開源數據收集引擎。它可以動態地將來自不同數據源的數據統一起來,並將數據規範化到選擇的目的地。

可以用它來統一對應用程序日誌進行收集管理,提供 Web 接口用於查詢和統計。Logstash 作爲一個數據管道中間件,支持對各種類型數據的採集與轉換,並將數據發送到各種類型的存儲庫。Logstash 現在是 Elastic 的 ELK 家族成員之一。

相關網站:Logstash 中文社區

Chukwa:Apache Chukwa 是一個開源的用於監控大型分佈式系統的數據收集系統。2010 年 7 月 14 日進入 Apache 孵化器,2013 年 9 月 27 日成爲 Apache 頂級項目。

它是構建在 hadoop 的 hdfs 和 MapReduce 框架之上的,繼承了 Hadoop 的可伸縮性和健壯性。Chukwa 還包含了一個強大和靈活的工具集,可用於展示、監控和分析已收集的數據。

Chukwa 用於管理大型分佈式系統的數據收集系統 (2000 + 以上的節點, 系統每天產生的監控數據量在 T 級別)。

相關網站:Apache Chukwa

數據交換

Sqoop:Apache Sqoop 是一款數據遷移工具,用來在不同數據存儲軟件之間進行數據傳輸的開源軟件,它支持多種類型的數據儲存軟件。

用來在關係型數據庫和 Hadoop/Hive 間進行數據遷移,方便大量數據的導入導出工作。Sqoop 底層是通過 MapReduce 去實現的,但只有 Map 沒有 Reduce。

Sqoop 項目開始於 2009 年,最早是作爲 Hadoop 的一個第三方模塊存在,後來獨立成爲一個 Apache 項目,於 2012 年 3 月成爲 Apache 頂級項目。

相關網站:Apache Sqoop

Kettle:Kettle 是一款國外開源的 ETL 工具,純 java 編寫,可以在 Window、Linux、Unix 上運行,數據抽取高效穩定。可以將各種類型數據作爲數據流,經過處理後再生成各種類型的數據。

相關網站:Kettle 中文網

DataX:DataX 是阿里巴巴開源的離線數據同步工具 / 平臺,致力於實現包括關係型數據庫 (MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各種異構數據源之間穩定高效的數據同步功能。

相關網站:DataX 源碼

NIFI:Apache NiFi 是一個易於使用、功能強大而且可靠的數據拉取、數據處理和分發系統。基於 Web 圖形界面,通過拖拽、連接、配置完成基於流程的編程,實現數據採集等功能。

NiFi 是美國國家安全局 NAS 開發並使用了 8 年的可視化數據集成產品,2014 年貢獻給了 Apache 社區,2015 年成爲 Apache 頂級項目。 是爲數據流設計。

它支持高度可配置的指示圖的數據路由、轉換和系統中介邏輯,支持從多種數據源動態拉取數據。NiFi 是基於 Java 的,使用 Maven 支持包的構建管理。NiFi 基於 Web 方式工作,後臺在服務器上進行調度。

用戶可以爲數據處理定義爲一個流程,然後進行處理,後臺具有數據處理引擎、任務調度等組件。

相關網站:Apache NIFI

消息系統

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 的趨勢。

相關網站:Apache Pulsar

Kafka:Apache Kafka 是一個發佈 / 訂閱的消息系統,由 Scala 寫成。Kafka 最初是由 LinkedIn 開發,並於 2011 年初開源,2012 年 10 月從 Apache 畢業成爲頂級項目。

該項目的目標是爲處理實時數據提供一個統一、高通量、低等待的平臺。Kafka 是一個分佈式的、分區的、多複本的日誌提交服務。是目前使用最廣泛的消息系統。

相關網站:Apache Kafka、Apache Kafka 中文文檔

RocketMQ:Apache RocketMQ 是一款分佈式、隊列模型的消息中間件。是阿里巴巴在 2012 年開源,於 2016 年 11 月成爲 Apache 孵化項目, 2017 年 9 月 25 日成爲 Apache 頂級項目。

它借鑑參考了 JMS 規範的 MQ 實現,更參考了優秀的開源消息中間件 Kafka,並且結合阿里實際業務需求在天貓雙十一的場景,實現業務削峯,分佈式事務的優秀框架。

它提供了豐富的消息拉取模式,高效的訂閱者水平擴展能力,實時的消息訂閱機制,億級消息堆積能力,且具備了連接其它頂級開源生態(如 Spark、Ignite 和 Storm 等)能力。

相關網站:Apache RocketMQ

ActiveMQ:Apache ActiveMQ 是 Apache 所提供的一個開源的消息系統,完全採用 Java 來實現。它是一款歷史悠久的開源項目,2007 年成爲 Apache 頂級項目。

已經在很多產品中得到應用,實現了 JMS1.1 規範,可以和 Spring-JMS 輕鬆融合,實現了多種協議。有多重語言的成熟的客戶端。不夠輕巧,支持持久化到數據庫,對隊列數較多的情況支持不好。

相關網站:Apache ActiveMQ

RabbitMQ:RabbitMQ 是基於 AMQP 實現的一個開源消息組件,主要用於在分佈式系統中存儲轉發消息。是一個消息代理和隊列服務器,可以在完全不同的應用之間共享數據。

使用 Erlang 語言開發,具有很好的併發優勢,性能較好。支持消息持久化。

相關網站:RabbitMQ

任務調度

Azkaban:Azkaban 是由 Linkedin 開源的一個批量工作流任務調度器。使用 Java 開發。用於在一個工作流內以一個特定的順序運行一組工作和流程。

Azkaban 定義了一種 KV 文件格式來建立任務之間的依賴關係,並提供一個易於使用的 web 用戶界面維護和跟蹤工作流。

Azkaban 通過 Web 瀏覽器在 GUI 中進行基於時間的調度,將所有正在運行的工作流的狀態保存在其內存中。

相關網站:Azkaban

Oozie:Apache Oozie 是一個基於 Hadoop 的企業級工作流調度框架。Oozie 是 Cloudeara 貢獻給 Apache 的頂級項目。

它關注靈活性和創建複雜的工作流程,允許由時間,事件或數據可用性觸發作業,可以通過命令行、Java API、Web 瀏覽器,以及 GUI 操作。它以 XML 的形式寫調度流程,可以調度 MR、Hive、Spark、Pig、Shell、Jar 等等。

Oozie 將所有正在運行的工作流的狀態保存 SQL 數據庫,僅將其內存用於狀態事務。相比於 Azkaban,Oozie 屬於重量級的任務調度工具。

相關網站:Apache 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 等。

相關網站:Apache Airflow

數據治理

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 一起使用時,它可以定義一種基於標籤的安全服務,通過使用標籤對文件和數據資產進行分類,並控制用戶和用戶組對一系列標籤的訪問。

相關網站:Apache Ranger

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 接口檢索和操作權限。

相關網站:Apache Sentry

Atlas:Apache Atlas 是 Apache Hadoop 的數據和元數據治理的框架,是 Hortonworks 公司聯合其他廠商與用戶於 2015 年發起數據治理倡議,2015 年 5 月 5 日進入 Apache 孵化,2017 年 6 月 21 日成爲 Apache 頂級項目。

是爲解決 Hadoop 生態系統的元數據治理問題而產生的開源項目。它爲 Hadoop 集羣提供了包括數據分類、集中策略引擎、數據血緣、安全和生命週期管理在內的元數據治理核心登能力。

Atlas 是一組可伸縮和可擴展的核心基礎治理服務,使企業能夠有效和高效地滿足 Hadoop 中的遵從性需求,並允許與整個企業數據生態系統進行集成。

Atlas 用於管理共享元數據、數據分級、審計、安全性以及數據保護等方面,與 Apache Ranger 整合,用於數據權限控制策略。

相關網站:Apache Atlas

數據可視化

Kibana:Kibana 是一個設計出來用於和 Elasticsearch 一起使用的開源的分析與可視化平臺,可以用 Kibana 搜索、查看、交互存放在 Elasticsearch 索引裏的數據,使用各種不同的圖表、表格、地圖等展示高級數據分析與可視化,基於瀏覽器的接口使你能快速創建和分享實時展現 Elasticsearch 查詢變化的動態儀表盤,讓大量數據變得簡單,容易理解。Kibana 現在是 Elastic 的 ELK 家族成員之一。

相關網站:Kibana 中文社區

D3.js:D3(Data-Driven Documents 數據驅動文檔)是一個開源數據可視化項目,由紐約時報的工程師在 2011 年 2 月首次發佈。D3 其實就是一個 JavaScript 的函數庫,被稱爲一個互動和動態的數據可視化庫網絡。

D3 項目的代碼託管於 GitHubJavaScript 文件的後綴名通常爲 .js,故 D3 也常使用 D3.js 稱呼。D3 提供了各種簡單易用的函數,大大簡化了 JavaScript 操作數據的難度。

由於它本質上是 JavaScript ,所以用 JavaScript 也可以實現所有功能的,但它能大大減小了工作量,尤其是在數據可視化方面,D3 已經將生成可視化的複雜步驟精簡到了幾個簡單的函數,只需要輸入幾個簡單的數據,就能夠轉換爲各種絢麗的圖形。

D3 利用可縮放矢量圖形或 SVG 格式,允許您渲染可放大或縮小的形狀,線條和填充,而不會降低質量。

相關網站:D3.js

ECharts:ECharts(Enterprise Charts 商業產品圖表庫)是一個提供商業產品常用圖表的純 Javascript 的圖表庫。由百度開源,於 2018 年 1 月進入 Apache 孵化器。

它可以流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器,底層依賴輕量級的矢量圖形庫 ZRender,提供直觀,交互豐富,可高度個性化定製的數據可視化圖表。

相關網站:ECharts

數據挖掘

Mahout:Apache Mahout 是機器學習和數據挖掘的一個分佈式框架,它是基於 hadoop 之上的。它提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。

Mahout 包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘,主要核心的三大算法爲推薦,聚類及分類算法。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到雲中。

相關網站:Apache 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 就能實現簡單的數據挖掘。

相關網站:Apache MADlib

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。

相關網站:Apache Spark MLlib

Tensorflow:TensorFlow 是一個開源的基於數據流圖的機器學習框架,它是 Google Brain 的第二代機器學習系統,常被應用於各種感知、語言理解、語音識別、圖像識別等多項機器深度學習領域。

TensorFlow 是一個採用數據流圖(Data Flow Graphs),用於數值計算的開源軟件庫。節點(Nodes)在圖中表示數學操作,張量(Tensor)代表了多維數組,圖中的線(Edges)則表示在節點間相互聯繫的多維數據數組,即張量,流(Flow)代表了基於數據流圖的計算。

它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個 CPU(或 GPU),服務器,移動設備等等。TensorFlow 最初由 Google 大腦小組(隸屬於 Google 機器智能研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。

相關網站:Tensorflow、Tensorflow 中文社區

Keras:Keras 是一個基於 TensorFlow 的深度學習庫,其特點是對用戶友好的,並且能夠提供簡易和快速的原型設計。

Keras 是一個由 Python 編寫的開源人工神經網絡庫,可以作爲 Tensorflow、Microsoft-CNTK 和 Theano 的高階應用程序接口,進行深度學習模型的設計、調試、評估、應用和可視化。Keras 爲支持快速實驗而生,能夠把你的 idea 迅速轉換爲結果。

相關網站:Keras

雲平臺

AWS S3:Amazon S3(Amazon Simple Storage Service )是一種對象存儲服務,提供行業領先的可擴展性、數據可用性、安全性和性能。

這意味着各種規模和行業的客戶都可以使用它來存儲和保護各種用例(如網站、移動應用程序、備份和還原、存檔、企業應用程序、IoT 設備和大數據分析)的任意數量的數據。

Amazon S3 提供了易於使用的管理功能,因此您可以組織數據並配置精細調整過的訪問控制以滿足特定的業務、組織和合規性要求。

相關網站:AWS S3

GCP:GCP(Google Cloud Platform)是 Google 提供的一套雲計算服務。它提供一系列模塊化雲服務,包括計算、數據存儲、數據分析和機器學習。

Google 把運行各種網絡應用所需要的一切基礎架構,包括服務器、操作系統、應用軟件、網站架構、API 接口、數據庫、CDN、VPN、物聯網、大數據等等全部預先準備好。

你只需要在 google 雲平臺上註冊一個帳號,即可在分佈在全球各地數十個 google 機房使用所有的基礎架構服務。

相關網站:GCP

Microsoft Azure:Azure 是 Microsoft 提供的企業級雲計算平臺。Azure 的主要目標是爲開發者提供一個平臺,幫助開發可運行在雲服務器、數據中心、Web 和 PC 上的應用程序。

雲計算的開發者能使用微軟全球數據中心的儲存、計算能力和網絡基礎服務。

相關網站:Microsoft Azure

作者:訾零

原文鏈接:https://blog.csdn.net/lingeio/article/details/94604230

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ulFpF_GBcHjD-LqA-e_g0A