22個大資料開發處理框架平臺和工具

資料工程師陳晨發表於2019-04-21

1、MongoDB——最受歡迎的,跨平臺的,面向文件的資料庫。

https://www.mongodb.com/

MongoDB是一個基於分散式檔案儲存的資料庫,使用C++語言編寫。旨在為Web應用提供可擴充套件的高效能資料儲存解決方案。應用效能高低依賴於資料庫效能,MongoDB則是非關聯式資料庫中功能最豐富,最像關聯式資料庫的,隨著MongDB 3.4版本釋出,其應用場景適用能力得到了進一步擴充。

MongoDB的核心優勢就是靈活的文件模型、高可用複製集、可擴充套件分片叢集。你可以試著從幾大方面瞭解MongoDB,如實時監控MongoDB工具、記憶體使用量和頁面錯誤、連線數、資料庫操作、複製集等。

網際網路科技發展蓬勃興起,人工智慧時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大資料進階資料和高階開發教程,大資料學習群: 740041381 歡迎進階中和進想深入大資料的小夥伴加入。
2、Elasticsearch ——為雲構建的分散式RESTful搜尋引擎。

https://www.elastic.co/cn/

ElasticSearch是基於Lucene的搜尋伺服器。它提供了分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是比較流行的企業級搜尋引擎。

ElasticSearch不僅是一個全文字搜尋引擎,還是一個分散式實時文件儲存,其中每個field均是被索引的資料且可被搜尋;也是一個帶實時分析功能的分散式搜尋引擎,並且能夠擴充套件至數以百計的伺服器儲存及處理PB級的資料。ElasticSearch在底層利用Lucene完成其索引功能,因此其許多基本概念源於Lucene。

 

3、Cassandra——開源分散式資料庫管理系統。

http://cassandra.apache.org/

最初是由Facebook開發的,旨在處理許多商品伺服器上的大量資料,提供高可用性,沒有單點故障。

Apache Cassandra是一套開源分散式NoSQL資料庫系統。集Google BigTable的資料模型與Amazon Dynamo的完全分散式架構於一身。於2008開源,此後,由於Cassandra良好的可擴充套件性,被Digg、Twitter等Web 2.0網站所採納,成為了一種流行的分散式結構化資料儲存方案。

因Cassandra是用Java編寫的,所以理論上在具有JDK6及以上版本的機器中都可以執行,官方測試的JDK還有OpenJDK 及Sun的JDK。 Cassandra的操作命令,類似於我們平時操作的關聯式資料庫,對於熟悉MySQL的朋友來說,操作會很容易上手。

 

4、Redis ——開源(BSD許可)記憶體資料結構儲存,用作資料庫,快取和訊息代理。

https://redis.io/

Redis是一個開源的使用ANSI C語言編寫的、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。Redis 有三個主要使其有別於其它很多競爭對手的特點:Redis是完全在記憶體中儲存資料的資料庫,使用磁碟只是為了永續性目的; Redis相比許多鍵值資料儲存系統有相對豐富的資料型別; Redis可以將資料複製到任意資料庫。

 

5、Hazelcast ——基於Java的開源記憶體資料網格。

https://hazelcast.com/

Hazelcast 是一種記憶體資料網格 in-memory data grid,提供Java程式設計師關鍵任務交易和萬億級記憶體應用。雖然Hazelcast沒有所謂的“Master”,但是仍然有一個Leader節點(the oldest member),這個概念與ZooKeeper中的Leader類似,但是實現原理卻完全不同。同時,Hazelcast中的資料是分散式的,每一個member持有部分資料和相應的backup資料,這點也與ZooKeeper不同。

Hazelcast的應用便捷性深受開發者喜歡,但如果要投入使用,還需要慎重考慮。

 

6、Ehcache——廣泛使用的開源Java分散式快取。

http://www.ehcache.org/

主要面向通用快取、Java EE和輕量級容器。EhCache 是一個純Java的程式內快取框架,具有快速、精幹等特點,是hibernate中預設的CacheProvider。主要特性有:快速簡單,具有多種快取策略;快取資料有兩級,記憶體和磁碟,因此無需擔心容量問題;快取資料會在虛擬機器重啟的過程中寫入磁碟;可以通過RMI、可插入API等方式進行分散式快取;具有快取和快取管理器的偵聽介面;支援多快取管理器例項,以及一個例項的多個快取區域;提供Hibernate的快取實現。

 

7、Hadoop ——用Java編寫的開源軟體框架。

http://hadoop.apache.org/

用於分散式儲存,並對非常大的資料使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集進行高速運算和儲存。Hadoop實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS。Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,MapReduce則為海量的資料提供了計算。

 

8、Solr ——開源企業搜尋平臺,用Java編寫,來自Apache Lucene專案。

http://lucene.apache.org/solr/

Solr是一個獨立的企業級搜尋應用伺服器,它對外提供類似於Web-service的API介面。使用者可以通過http請求,向搜尋引擎伺服器提交一定格式的XML檔案,生成索引;也可以通過Http Get操作提出查詢請求,並得到XML格式的返回結果。

與ElasticSearch一樣,同樣是基於Lucene,但它對其進行了擴充套件,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件並對查詢效能進行了優化。

 

9、Spark ——Apache Software Foundation中最活躍的專案,是一個開源叢集計算框架。

http://spark.apache.org/

Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處,這些不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈資料集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。

Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程式框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密整合,其中的 Scala 可以像操作本地集合物件一樣輕鬆。

 

10、Memcached ——通用分散式記憶體快取系統。

https://memcached.org/

Memcached是一套分散式快取系統,當初是Danga Interactive為了LiveJournal所發展的,但被許多軟體(如MediaWiki)所使用。Memcached作為高速執行的分散式快取伺服器,具有以下的特點:協議簡單,基於libevent的事件處理,內建記憶體儲存方式。

 

11、Apache Ambari——通過開發用於配置,管理和監控Apache Hadoop叢集的軟體來簡化Hadoop管理

https://ambari.apache.org/

 

Apache Ambari專案旨在通過開發用於配置,管理和監控Apache Hadoop叢集的軟體來簡化Hadoop管理。Ambari提供了一個由RESTful API支援的直觀,易用的Hadoop管理Web UI。

Ambari使系統管理員能夠:

提供Hadoop叢集

Ambari提供了跨任意數量的主機安裝Hadoop服務的分步向導。

Ambari處理群集的Hadoop服務配置。

管理Hadoop叢集

Ambari提供集中管理,用於在整個叢集中啟動,停止和重新配置Hadoop服務。

監控Hadoop叢集

Ambari提供了一個儀表板,用於監控Hadoop叢集的執行狀況和狀態。

Ambari利用Ambari指標系統進行指標收集。

Ambari利用Ambari Alert Framework進行系統警報,並在需要您注意時通知您(例如,節點出現故障,剩餘磁碟空間不足等)。

Ambari使應用程式開發人員和系統整合商能夠:

使用Ambari REST API輕鬆將Hadoop配置,管理和監控功能整合到自己的應用程式中。

網際網路科技發展蓬勃興起,人工智慧時代來臨,抓住下一個風口。為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大資料進階資料和高階開發教程,大資料學習群: 740041381 歡迎進階中和進想深入大資料的小夥伴加入。

12、Apache Avro——是一種資料序列化系統。

https://avro.apache.org/

Apache Avro™是一種資料序列化系統。

Avro提供:

豐富的資料結構。

緊湊,快速的二進位制資料格式。

容器檔案,用於儲存持久資料。

遠端過程呼叫(RPC)。

與動態語言的簡單整合。不需要程式碼生成來讀取或寫入資料檔案,也不需要使用或實現RPC協議。程式碼生成作為可選優化,僅值得為靜態型別語言實現。

架構

Avro依賴模式。讀取Avro資料時,始終存在寫入時使用的模式。這允許每個資料寫入時不會產生每個值的開銷,從而使序列化既快又小。這也便於使用動態指令碼語言,因為資料及其模式完全是自我描述的。

當Avro資料儲存在檔案中時,其架構隨之儲存,以便以後任何程式都可以處理檔案。如果讀取資料的程式需要不同的模式,則可以輕鬆解決,因為兩個模式都存在。

在RPC中使用Avro時,客戶端和伺服器在連線握手中交換模式。(這可以進行優化,以便對於大多數呼叫,實際上不會傳輸任何模式。)由於客戶端和伺服器都具有另一個完整模式,因此相同命名欄位,缺少欄位,額外欄位等之間的對應關係都可以輕鬆解決。

Avro架構使用JSON定義 。這有助於在已有JSON庫的語言中實現。

與其他系統比較

Avro提供類似於諸如Thrift, Protocol Buffers等系統的功能.Avro在以下基本方面與這些系統不同。

動態型別:Avro不需要生成程式碼。資料始終伴隨著一種模式,該模式允許在不生成程式碼,靜態資料型別等的情況下完全處理該資料。這有助於構建通用資料處理系統和語言。

未標記的資料:由於在讀取資料時存在模式,因此需要使用資料對較少的型別資訊進行編碼,從而導致較小的序列化大小。

沒有手動分配的欄位ID:當架構更改時,處理資料時始終存在舊架構和新架構,因此可以使用欄位名稱以符號方式解析差異。

 

13、Apache Chukwa——是一個用於監控大型分散式系統的開源資料收集系統

https://chukwa.apache.org/

 

Apache Chukwa是一個用於監控大型分散式系統的開源資料收集系統。Apache Chukwa構建於Hadoop分散式檔案系統(HDFS)和Map / Reduce框架之上,並繼承了Hadoop的可擴充套件性和健壯性。Apache Chukwa還包括一個靈活而強大的工具包,用於顯示,監控和分析結果,以充分利用收集的資料。

 

14、Apache HBase——是Hadoop資料庫,是一個分散式,可擴充套件的大資料儲存

https://hbase.apache.org/

Apache HBase™是Hadoop資料庫,是一個分散式,可擴充套件的大資料儲存。

當您需要對大資料進行隨機,實時讀/寫訪問時,請使用Apache HBase™。該專案的目標是託管非常大的表 - 數十億行X百萬列 - 在商品硬體叢集上。Apache HBase是一個開源的,分散式的,版本化的非關聯式資料庫,模仿Google的Bigtable: Chang等人的結構化資料分散式儲存系統。正如Bigtable利用Google檔案系統提供的分散式資料儲存一樣,Apache HBase在Hadoop和HDFS之上提供類似Bigtable的功能。

 

15、hive——資料倉儲軟體有助於使用SQL讀取,編寫和管理駐留在分散式儲存中的大型資料集

https://hive.apache.org/

Apache Hive™資料倉儲軟體有助於使用SQL讀取,編寫和管理駐留在分散式儲存中的大型資料集。可以將結構投影到已儲存的資料中。提供了命令列工具和JDBC驅動程式以將使用者連線到Hive。

 

16、Apache Mahout——是一個分散式線性代數框架和數學表達的Scala DSL

https://mahout.apache.org/

 

Apache Mahout(TM)是一個分散式線性代數框架和數學表達的Scala DSL,旨在讓數學家,統計學家和資料科學家快速實現他們自己的演算法。Apache Spark是推薦的開箱即用的分散式後端,或者可以擴充套件到其他分散式後端。

數學上富有表現力的Scala DSL

支援多個分散式後端(包括Apache Spark)

用於CPU / GPU / CUDA加速的模組化本機求解器

 

17、Apache Pig——是一個分析大型資料集的平臺

https://pig.apache.org/

Apache Pig是一個分析大型資料集的平臺,它包含用於表達資料分析程式的高階語言,以及用於評估這些程式的基礎結構。Pig程式的顯著特性是它們的結構適合於大量的並行化,這反過來使它們能夠處理非常大的資料集。目前,Pig的基礎設施層由一個編譯器組成,該編譯器生成Map-Reduce程式序列,已經存在大規模並行實現(例如,Hadoop子專案)。Pig的語言層目前由一個名為Pig Latin的文字語言組成,它具有以下關鍵屬性:易於程式設計。實現簡單,“令人尷尬的並行”資料分析任務的並行執行是微不足道的。由多個相互關聯的資料轉換組成的複雜任務被明確編碼為資料流序列,使其易於編寫,理解和維護。優化機會。任務編碼的方式允許系統自動優化其執行,允許使用者專注於語義而不是效率。可擴充套件性。使用者可以建立自己的功能來進行專用處理。

 

18、ApacheTEZ——構建一個應用程式框架

https://tez.apache.org/

 

ApacheTEZ®專案旨在構建一個應用程式框架,該框架允許處理資料的任務的複雜的有向非迴圈圖。它目前在Apache Hadoop YARN上面構建。

Tez的兩個主要設計主題是:

通過以下方式授權終端使用者:

富有表現力的資料流定義API

靈活的輸入 - 處理器 - 輸出執行時模型

資料型別不可知

簡化部署

執行績效

Map Reduce的效能提升

最佳資源管理

在執行時計劃重新配置

動態物理資料流決策

 

19、Apache ZooKeeper——致力於開發和維護開源伺服器,實現高度可靠的分散式協調

https://zookeeper.apache.org/

ZooKeeper是一種集中式服務,用於維護配置資訊,命名,提供分散式同步和提供組服務。所有這些型別的服務都以分散式應用程式的某種形式使用。每次實施它們都需要做很多工作來修復不可避免的錯誤和競爭條件。由於難以實現這些型別的服務,應用程式最初通常會吝嗇它們,這使得它們在變化的情況下變得脆弱並且難以管理。即使正確完成,這些服務的不同實現也會在部署應用程式時導致管理複雜性。

 

20、Apache Storm——是一個免費的開源分散式實時計算系統

http://storm.apache.org/

Apache Storm是一個免費的開源分散式實時計算系統。Storm可以輕鬆可靠地處理無限資料流,實時處理Hadoop為批處理所做的工作。風暴很簡單,可以與任何程式語言一起使用,並且使用起來很有趣!

Storm有許多用例:實時分析,線上機器學習,連續計算,分散式RPC,ETL等。風暴很快:一個基準測試表示每個節點每秒處理超過一百萬個元組。它具有可擴充套件性,容錯性,可確保您的資料得到處理,並且易於設定和操作。Storm整合了您已經使用的排隊和資料庫技術。Storm拓撲消耗資料流並以任意複雜的方式處理這些流,然後在計算的每個階段之間重新劃分流。

 

21、Apache Samza——是一個可擴充套件的資料處理引擎

http://samza.apache.org/

Samza允許您構建有狀態的應用程式,從多個來源(包括Apache Kafka)實時處理資料。經過大規模的戰鬥測試,它支援靈活的部署選項,可以在YARN上執行,也可以作為 獨立的庫執行。

Apache Samza是一個可擴充套件的資料處理引擎,允許您實時處理和分析資料。以下是Samza簡化構建應用程式功能的摘要:

統一API:使用簡單的API以獨立於資料來源的方式描述您的應用程式邏輯。相同的API可以處理批處理和流資料。

每個級別的可插拔性:處理和轉換來自任何來源的資料。Samza提供與Apache Kafka,AWS Kinesis,Azure EventHubs,ElasticSearch和Apache Hadoop的內建整合。此外,它很容易與您自己的來源整合。

Samza作為嵌入式庫:可以毫不費力地與現有應用程式整合,無需啟動和操作單獨的叢集進行流處理。Samza可以用作Java / Scala應用程式中嵌入的輕量級客戶端庫。

編寫一次,隨處執行: 靈活的部署選項 ,可以在任何地方執行應用程式 - 從公共雲到容器化環境再到裸機硬體。

Samza作為託管服務:通過與包括Apache YARN在內的流行叢集管理器整合,將流處理作為託管服務執行。

容錯: 在發生故障時透明地遷移任務及其關聯狀態。Samza支援主機關聯和增量檢查點,以實現從故障中快速恢復。

大規模:對使用數TB的狀態並在數千個核心上執行的應用程式進行經過實戰測試。它為多家大公司提供支援,包括LinkedIn,Uber,TripAdvisor,Slack等。

 

22、Apache Flink——是一個框架和分散式處理引擎

https://flink.apache.org/

Apache Flink是一個框架和分散式處理引擎,用於對無界和有界資料流進行狀態計算。Flink設計為在所有常見的叢集環境中執行,以記憶體速度和任何規模執行計算。

在這裡,我們解釋Flink架構的重要方面。

處理無界和有界資料

任何型別的資料都是作為事件流產生的。信用卡交易,感測器測量,機器日誌或網站或移動應用程式上的使用者互動,所有這些資料都作為流生成。

資料可以作為無界或有界流處理。

無界流有一個開始但沒有定義的結束。它們不會在生成時終止並提供資料。必須連續處理無界流,即必須在攝取事件後立即處理事件。無法等待所有輸入資料到達,因為輸入是無界的,並且在任何時間點都不會完成。處理無界資料通常要求以特定順序攝取事件,例如事件發生的順序,以便能夠推斷結果完整性。

有界流具有定義的開始和結束。可以在執行任何計算之前通過攝取所有資料來處理有界流。處理有界流不需要有序攝取,因為可以始終對有界資料集進行排序。有界流的處理也稱為批處理。

Apache Flink擅長處理無界和有界資料集。精確控制時間和狀態使Flink的執行時能夠在無界流上執行任何型別的應用程式。有界流由演算法和資料結構內部處理,這些演算法和資料結構專門針對固定大小的資料集而設計,從而產生出色的效能。

相關文章