天天看點

Hadoop 生态系統

1.概述

最近收到一些同學和朋友的郵件,說能不能整理一下 hadoop 生态圈的相關内容,然後分享一些,我覺得這是一個不錯的提議,于是,花了一些業餘時間整理了 hadoop 的生态系統,并将其進行了歸納總結,進而将其以表格的形式進行了羅列。涉及的内容有以下幾點:

分布式檔案系統

分布式程式設計模型

nosql 資料庫

sql-on-hadoop

資料采集

程式設計服務中間件

排程系統

系統部署

資料可視化

2.内容

2.1 分布式檔案系統

2.1.1 apache hdfs

在分布式檔案系統當中,首先為大家所熟悉的是 apache 的 hdfs。全稱為 hadoop distributed file system,由多台機器組建的叢集,存儲大資料檔案。hdfs 的靈感來自于 google file system(gfs)。hadoop 2.x 版本之前,namenode 是存在單點故障的。在 zookeeper 的高可用性功能解決了 hdfs 的這個問題,通過提供運作兩個備援的節點在同一個叢集中進行主備切換,即:active & standby

相關連結位址如下所示:

apache hadoop

google file system

cloudera

hortonworks

2.1.2 red hat glusterfs

glusterfs 是一個擴充的網絡附加存儲檔案系統。glusterfs 最初是由 gluster 公司開發的,然後,由 red hat 公司在2011年進行了購買。2012年六月,red hat 存儲伺服器被宣布為商業支援的整合與 red hat 企業 linux glusterfs。gluster 檔案系統,現在稱為 red hat 存儲伺服器。

gluster 官網

red hat hadoop 插件

2.1.3 qfs

qfs 是一個開源的分布式檔案系統軟體包,用于對 mapreduce 批處理工作負載。她被設計為一種 apache hadoop 的 hdfs 另一種選擇方案,用于大型加工叢集提供更好的性能和成本效率。它用 c++ 和固定占用記憶體管理。qfs 使用 reed-solomon 糾錯保證可靠的資料通路方法。reed-solomon 編碼在海量存儲系統中被廣泛應用,以糾正與媒體缺陷相關的突發錯誤。而不是存儲每個檔案或是像 hdfs 一樣,存儲 3+ 次以上,qfs 僅僅需要 1.5 倍的原始容量,因為它存儲在哎九個不同的磁盤驅動上。

qfs 官網

github qfs

hadoop-8885

2.1.4 ceph filesystem

ceph 是一個免費的軟體存儲平台,被設計為對象,塊和從單一節點到叢集的檔案存儲。它的主要目标是完全分布式無單點鼓掌,可水準擴充到 pb 容量,對多種工作負載的高性能,以及高可用性。

ceph filesystem 官網

ceph and hadoop

hadoop-6253

2.1.5 lustre file system

lustre 是由 linux 和 cluster 演變而來,是為了解決海量存儲問題而設計的全新的檔案系統。可支援達 1w 節點,pb 的存儲容量,100gb/s 的傳輸速度。lustre 是基于對象的存儲系統,減少中繼資料伺服器的 inode。它實際上還是将資料條帶化到各個存儲目标上,是以可以實作高度聚合 io 能力。lustre 原生态支援海量小檔案讀寫;且對大檔案讀寫在 linux 核心做了特殊優化。另外,lustre 是個對使用者透明的 share 檔案系統,條帶化資料的位置資訊不能完美的暴露出來,是以要用上 hadoop 的 mapreduce 優勢還需要做很多工作。

lustre wiki

hadoop with lustre

inter hpc hadoop

關于分布式檔案系統的内容就贅述到這裡;其它分布式檔案系統,如: alluxio , gridgain 以及 xtreemfs[ 1.官網 , 2.flink on xtreemfs , 3.spark xtreemfs ] 等這裡就不多贅述了,大家可以下去自己普及一下。

2.2 分布式程式設計模型

2.2.1 apache ignite

apache ignite 記憶體數組組織架構是一個高性能、內建和分布式的記憶體計算和事務平台,用于大規模的資料集處理,比傳統的基于磁盤或閃存的技術具有更高的性能,同時他還為應用和不同的資料源之間提供高性能、分布式記憶體中資料組織管理的功能。

它包含一個分布式的 key/value 存儲在記憶體中,sql 執行能力,mapreduce 和其它計算,分布式資料結構,連續查詢,消息和事件子系統。hadoop 和 spark 均有內建。ignite 編譯于 java,提供 .net 和 c++ 的 api 接口。

apache ignite

apache ignite documentation

2.2.2 apache mapreduce

這個大家應該不陌生,這是一個經典的程式設計模型,用于在叢集上處理并發,分布式大資料集。目前版本編譯于 yarn 架構。這裡就不多贅述了。

相關連結位址,如下所示:

apache mapreduce

google mapreduce paper

writing yarn applications

2.2.3 apache spark

這個程式設計模型,大家也不會陌生,現在 spark 的應用場景和社群活躍度較高。快速的執行能力,豐富的程式設計 api 接口,使其備受恩寵。

apache spark

mirror of spark on github

rdds-paper

spark cluster computing

spark research

2.2.4 apache storm

做實時流水資料處理的同學,應該也不陌生,可以嫁接多種消息中間件(如kafka,mq等)。

storm project

storm-on-yarn

2.2.5 apache flink

apache flink 是一個面向分布式資料流處理和批量資料處理的開源計算平台,它能夠基于同一個flink運作時(flink runtime),提供支援流處理和批處理兩種類型應用的功能。現有的開源計算方案,會把流處理和批處理作為兩種不同的應用類型,因為他們它們所提供的sla是完全不相同的:流處理一般需要支援低延遲、exactly-once保證,而批處理需要支援高吞吐、高效處理,是以在實作的時候通常是分别給出兩套實作方法,或者通過一個獨立的開源架構來實作其中每一種處理方案。例如,實作批處理的開源方案有mapreduce、tez、crunch、spark,實作流處理的開源方案有samza、storm。 flink在實作流處理和批處理時,與傳統的一些方案完全不同,它從另一個視角看待流處理和批處理,将二者統一起來:flink是完全支援流處理,也就是說作為流處理看待時輸入資料流是無界的;批處理被作為一種特殊的流處理,隻是它的輸入資料流被定義為有界的。基于同一個flink運作時(flink runtime),分别提供了流處理和批處理api,而這兩種api也是實作上層面向流處理、批處理類型應用架構的基礎。

====================================分割線================================

本文轉自d1net(轉載)