大數據技術棧詳解

相信很多學Java的同學都有想轉大數據或者學大數據的想法,但是一看到網上那些大數據的技術棧,就一臉懵逼,什麼Hadoop、HDFS、MapReduce、Hive、Kafka、Zookeeper、HBase、Sqoop、Flume、Spark、Storm、Flink等等技術。

童鞋們可能一下子就慌了,像學Java的也就SSM、Springboot、Spring Cloud、MySQL這些,線路清晰明瞭,所以學習起來相對也比較直白,但是大數據就不一樣了,技術棧太多了,剛入門的時候可能就被嚇在門外了。今天博主就以Java技術棧對比大數據技術棧,和大家介紹一下大數據的這些技術棧到底都是用來幹嘛的。

架構圖

在開始講解之前,我們先來看一下,下面這副圖:

image

Sqoop

我們按照圖的順序一個個來介紹,首先是Sqoop,Sqoop(發音:skup)是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。

如果非要從功能上面對比的話,和阿里的Canal組件很像,都是用來同步數據的。

Flume

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。

Flume的功能和ELK(日誌實時檢索系統)中的Logstash很像,都是用來傳輸和處理日誌數據的。

Kafka

Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。

說白了就是一個MQ消息系統,和Java中常用RabbitMQ、RocketMQ是一樣的,只是各自的側重點不一樣,Kafka側重點在高吞吐量,可以處理海量的數據。

HDFS

Hadoop分佈式文件系統(HDFS)是指被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統(Distributed File System)。它和現有的分佈式文件系統有很多共同點。但同時,它和其他的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。

像Java項目不可避免的會涉及到文件上傳下載,這個時候要麼自己搭建一個分佈式文件系統,要麼使用第三方。

自己搭建的話一般有GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等,如果用第三方的一般會用七牛雲、騰訊雲OSS對象存儲、阿里雲OSS對象存儲。

Hive

hive是基於Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射爲一張數據庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。

如果對比Java的話,有點類似MySQL(不太準確),既可以存儲表結構數據,又可以通過SQL來查詢這些數據,只是不能進行修改,只能進行離線操作。

HBase

HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集羣。

HBase其實就是一種NoSQL,和Java中常用的Redis很像,只是他們的底層實現不一樣而已。

Zookeeper

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。

Zookeeper在Java中也是很出名的,像基於Dubbo的註冊中心一般都是用Zookeeper來實現的。同類的有:鼎鼎大名的微服務的註冊中心Eureka、Consul之類的。

Hadoop

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。

HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS爲海量的數據提供了存儲,而MapReduce則爲海量的數據提供了計算

從Java的角度看Hadoop有點類似Spring Cloud,他們不僅僅只是一個具體的技術,而是一個生態圈,Hadoop中包含了Hive、MapReduce、HDFS等,所以不要把Hadoop看成僅僅只是一個單一的技術。

數據處理技術

像MapReduce、Spark、Storm/Flink都是用來處理數據的,比如數據清洗、計算、統計等等之類的。

MapReduce

MapReduce是面向大數據並行處理的計算模型、框架和平臺,它隱含了以下三層含義:

  1. MapReduce是一個基於集羣的高性能並行計算平臺(Cluster Infrastructure)。它允許用市場上普通的商用服務器構成一個包含數十、數百至數千個節點的分佈和並行計算集羣。
  2. MapReduce是一個並行計算與運行軟件框架(Software Framework)。它提供了一個龐大但設計精良的並行計算軟件框架,能自動完成計算任務的並行化處理,自動劃分計算數據和計算任務,在集羣節點上自動分配和執行任務以及收集計算結果,將數據分佈存儲、數據通信、容錯處理等並行計算涉及到的很多系統底層的複雜細節交由系統負責處理,大大減少了軟件開發人員的負擔。
  3. MapReduce是一個並行程序設計模型與方法(Programming Model & Methodology)。它藉助於函數式程序設計語言Lisp的設計思想,提供了一種簡便的並行程序設計方法,用Map和Reduce兩個函數編程實現基本的並行計算任務,提供了抽象的操作和並行編程接口,以簡單方便地完成大規模數據的編程和計算處理

額---》技術的概念一般都是嚴謹複雜的,這邊簡單概括就是MapReduce簡稱MR,主要功能就是用來處理離線大數據,可以通過分析海量的離線數據,計算出我們需要的結果。

Spark

Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是——Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的算法。

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

從概念上面我們就可以看出來,Spark並不僅僅只是一個技術,而是和Hadoop相似,有一個成熟的生態圈,例如Spark SQL、Spark Streaming之類的,和Hadoop中的Hive、MR相似。

現在主流的都採用Spark來進行海量數據的處理,因爲它既可以實現離線數據分析又可以進行實時數據分析。

Storm/Flink

Apache Flink是由Apache軟件基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分佈式流數據流引擎。Flink以數據並行和流水線方式執行任意流數據程序,Flink的流水線運行時系統可以執行批處理和流處理程序。此外,Flink的運行時本身也支持迭代算法的執行(Storm功能和上面類似,這邊就不多囉嗦了)。

Spark的Spark Streaming就是一個實時數據處理框架,爲什麼還需要Storm/Flink呢?因爲實時和實時之間還是有時間上面的差別的,我們看一下下圖就知道,他們之間的區別在哪裏了。

image

總結

博主也是最近才系統的去了解大數據相關技術棧的,所以上面的講解可能會有一點偏差,如果有啥錯誤歡迎在下方留意啊。

想要更多幹貨、技術猛料的孩子,快點拿起手機掃碼關注我,我在這裏等你哦~

林老師帶你學編程https://wolzq.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章