大數據技術#1 大數據技術生態體系
?
關於大數據麥肯錫全球研究所給出的定義是:一種規模大到在獲取、存儲、管理、分析方面大大超出了傳統數據庫軟件工具能力範圍的數據集合,具有海量的數據規模、快速的數據流轉、多樣的數據類型和價值密度低四大特征。
?
所謂的大數據生態系統簡單可以理解成集成了大數據的存儲和計算以及分析等常見技能於一身的技術框架,可以簡單理解為:存儲+計算+任務調度。比如目前主流的 Hadoop 生態系統和 Spark 生態系統。Hadoop 自身提供了 HDFS 用來數據存儲,提供了 MapReduce 用來數據處理(離線計算)。而 Spark 提供了各種實時計算,機器學習的計算框架。但是 Spark 沒有提供了數據存儲的框架,所以還是依賴於第三方的存儲框架,比如 Hadoop 的 HDFS,亞馬遜的 S3 存儲系統。
?
在這裏我還是要推薦下我自己建的大數據學習交流裙:667367234,?裙?裏都是學大數據開發的,如果你正在學習大數據?,小編歡迎你加入,大家都是軟件開發黨,不定期分享幹貨(只有大數據開發相關的),包括我自己整理的一份2018最新的大數據進階資料和高級開發教程,歡迎進階中和進想深入大數據的小夥伴
?
01
?
寒武紀大爆發:大數據的技術生態圈
?
?
大數據若幹項目提供了一個在廉價服務器集群上分發數據處理任務的開源平臺。以下將當前主流的大數據技術進行總體性介紹,後續會對特定技術框架進行詳細描述。
?
1.? Hadoop Common: Common是Hadoop體系最底層的一個模塊,為Hadoop個子項目提供各種工具,如系統配置工具Configuration、遠程調用RPC、序列化機制和日誌操作等,是Hadoop其他模塊的基礎。
?
- HDFS:?Hadoop分布式文件系統,是Hadoop的基石。HDFS是一個具有與高度容錯性的文件系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。
?
- MapReduce:(a)MapReduce將復雜的、運行於大規模集群上的並行計算過程高度地抽象到了兩個函數:Map和Reduce;(b)編程容易,不需要掌握分布式並行編程細節,也可以很容易把自己的程序運行在分布式系統上,完成海量數據的計算;(c)MapReduce采用“分而治之”策略,一個存儲在分布式文件系統中的大規模數據集,會被切分成許多獨立的分片(split),這些分片可以被多個Map任務並行處理;(d)MapReduce設計的一個理念就是“計算向數據靠攏”,而不是“數據向計算靠攏”,因為,移動數據需要大量的網絡傳輸開銷;(e)MapReduce框架采用了Master/Slave架構,包括一個Master和若幹個Slave。Master上運行JobTracker,Slave上運行TaskTracker;Hadoop框架是用Java實現的,但是,MapReduce應用程序則不一定要用Java來寫。
?
- Sqoop:sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫 (mysql) 間進行數據的傳遞,可以將一個關系型數據庫(例如:MySQL,Oracle 等)中的數據導進到 Hadoop 的 HDFS 中,也可以將 HDFS 的數據導進到關系型數據庫中。然而這些工具並不支持實時的數據抽取。
?
- Canal:canal是阿裏巴巴旗下的一款開源項目,純Java開發。基於數據庫增量日誌解析,提供增量數據訂閱&消費,目前主要支持了MySQL。借助阿裏巴巴開源的?Canal?項目,我們能夠非常便捷地將 MySQL 中的數據抽取到任意目標存儲中。Canal 會將自己偽裝成 MySQL 從節點(Slave),並從主節點(Master)獲取 Binlog(MySQL Binlog 是一種實時的數據流,用於主從節點之間的數據復制,可以利用它來進行數據抽取),解析和貯存後供下遊消費端使用。Canal 包含兩個組成部分:服務端和客戶端。服務端負責連接至不同的 MySQL 實例,並為每個實例維護一個事件消息隊列;客戶端則可以訂閱這些隊列中的數據變更事件,處理並存儲到數據倉庫中。
?
- Flume:Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日誌采集、聚合和傳輸的系統,Flume 支持在日誌系統中定制各類數據發送方,用於收集數據;Flume 提供對數據進行簡單處理,並寫到各種數據接受方(可定制)的能力。
?
- Logstash:Logstash是一個開源數據搜集引擎,支持實時數據管道功能。Logstash可以動態整合分散的數據源,根據你的選擇對數據標準化,並統一輸入到指定的且可以是不同目的地。Logstash也是一個數據分析軟件,主要目的是分析log日誌,常用於ELK套件。ELK套件可以當作一個MVC模型,Logstash是controller層,Elasticsearch是一個model層,kibana是view層。首先將數據傳給Logstash,它將數據進行過濾和格式化(轉成JSON格式),然後傳給Elasticsearch進行存儲、建搜索的索引,kibana提供前端的頁面再進行搜索和圖表可視化,它是調用Elasticsearch的接口返回的數據進行可視化。其中,Logstash和Elasticsearch是用Java實現的,kibana使用node.js框架實現。
?
- rsyslog:rsyslog是Linux日誌服務,該服務負責監聽Linux下的日誌信息,並把日誌信息追加到對應的日誌文件中,一般在/var/log目錄下。它還可以把日誌信息通過網絡協議發送到另一臺Linux服務器上,或者將日誌存儲在MySQL或Oracle等數據庫中。
在這裏我還是要推薦下我自己建的大數據學習交流裙:667367234,?裙?裏都是學大數據開發的,如果你正在學習大數據?,小編歡迎你加入,大家都是軟件開發黨,不定期分享幹貨(只有大數據開發相關的),包括我自己整理的一份2018最新的大數據進階資料和高級開發教程,歡迎進階中和進想深入大數據的小夥伴
?
- Kafka:Kafka 是一種高吞吐量的分布式發布訂閱消息系統,有如下特性:(a)通過 O(1) 的磁盤數據結構提供消息的持久化,這種結構對於即使數以 TB 的消息存儲也能夠保持長時間的穩定性能。(b)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數百萬的消息。(c)支持通過 Kafka 服務器和消費機集群來分區消息。(d)支持 Hadoop 並行數據加載。
?
- Storm:Storm 為分布式實時計算提供了一組通用原語,可被用於“流處理”之中,實時處理消息並更新數據庫。這是管理隊列及工作者集群的另一種方式。Storm 也可被用於“連續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。
?
- Spark:Spark 是當前最流行的開源大數據內存計算框架。可以基於 Hadoop 上存儲的大數據進行計算。Spark 提供了各種實時計算,機器學習的計算框架。但是 Spark 沒有提供了數據存儲的框架,所以還是依賴於第三方的存儲框架,比如 Hadoop 的 HDFS,比如亞馬遜的 S3 存儲系統。
?
- Flink:Flink也提供 API來像Spark一樣進行批處理,但兩者處理的基礎是完全不同的。Flink把批處理當作流處理中的一種特殊情況。在Flink中,所有的數據都看作流,是一種很好的抽象,因為這更接近於現實世界。
?
- Oozie:Oozie 是一個管理Hdoop作業(job)的工作流程調度管理系統。Oozie 協調作業就是通過時間(頻率)和有效數據觸發當前的 Oozie 工作流程。
?
- Hbase:HBase 是一個分布式的、面向列的開源數據庫。HBase 不同於一般的關系數據庫,它是一個適合於非結構化數據存儲的數據庫
?
- Hive:hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的 sql 查詢功能,可以將 sql 語句轉換為 MapReduce任務進行運行。其優點是學習成本低,可以通過類 SQL 語句快速實現簡單的 MapReduce 統計,不必開發專門的 MapReduce 應用,十分適合數據倉庫的統計分析。也正是由於這種機制導致Hive最大的缺點是慢。Map/reduce調度本身只適合批量,長周期任務,類似查詢這種要求短平快的業務,代價太高。
?
- Pig:Pig和Hive類似,也是對大型數據集進行分析和評估的工具,不過與Hive提供SQL接口不同的是,它提供了一種高層的、面向領域的抽象語言:Pig Latin,Pig也可以將Pig Latin腳本轉化為MapReduce作業。與SQL相比,Pig Latin更加靈鶴,但是學習成本稍高。
?
- Impala:Impala是Cloudera公司主導開發的實時交互SQL大數據查詢工具,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數據。已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的交互性。相比之下,Impala的最大特點也是最大賣點就是它的快速:Impala沒有再使用緩慢的Hive+MapReduce批處理,而是通過使用與商用並行關系數據庫中類似的分布式查詢引擎(由Query?Planner、Query?Coordinator和Query?Exec?Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。
?
- R 語言:R 是用於統計分析、繪圖的語言和操作環境。R 是屬於 GNU 系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計制圖的優秀工具。
?
- Mahout:?Apache Mahout 是個可擴展的機器學習和數據挖掘庫,當前 Mahout 支持主要的 4 個用例:
推薦挖掘:搜集用戶動作並以此給用戶推薦可能喜歡的事物。
聚集:收集文件並進行相關文件分組。
分類:從現有的分類文檔中學習,尋找文檔中的相似特征,並為無標簽的文檔進行正確的歸類。
頻繁項集挖掘:將一組項分組,並識別哪些個別項會經常一起出現。
?
- TensorFlow:TensorFlow? 是一個采用數據流圖(data flow graphs),用於數值計算的開源軟件庫。節點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow 最初由Google大腦小組(隸屬於Google機器智能研究機構)的研究員和工程師們開發出來,用於機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用於其他計算領域。
?
- ZooKeeper:Zookeeper 是 Google 的 Chubby 一個開源的實現。它是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步服務等。ZooKeeper 的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
?
- Docker:Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
?
- Kubernetes:簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效,Kubernetes提供了應用部署,規劃,更新,維護的一種機制。
?
- YARN:YARN 是 Hadoop 集群的資源管理系統,是一個普適的、分布式的應用管理框架,用以替代傳統的 Apache Hadoop MapReduce 框架。其監控頁面可以展示集群的資源占用情況,任務的的執行引擎、進度和分配的節點等信息等。
?
關註微信公眾號:程序員交流互動平臺!獲取資料學習!
大數據技術#1 大數據技術生態體系