經常有同學問我,基於Hadoop生態圈的大資料元件有很多,怎麼學的過來呢,畢竟精力有限,我們需要有側重點,我覺得下面這幾個元件至關重要,是基礎元件,大部分人都需要會的,其它元件可以用的時候再去查查資料學習。
- hadoop
- Hbase
- Hive
- Spark
- Flink
- Kafka
Hadoop
是大資料的基礎元件,很多元件都需要依賴它的分散式儲存、計算;主要包括Hdfs、MR、Yarn三部分,這個需要找一些好的資料(我的主頁有資料領取方法),好好學學各自的用法,熟練之後,需要了解其背後的原理。
基本的,你得知道hadoop安裝方法,cdh/hdp等等,啟動後幾個後臺程式各自的作用,namenode高可用,以及高可用基於zk,namenode對後設資料fs_image的儲存,還有datanode,jobhistoryserver等。
- Hdfs:你需要知道檔案的基本操作,命令跟Linux命令差不多,用的時候自然就有機會敲了,上傳、下載,回收站,多副本容錯(hadoop3的糾刪碼容錯,不使用多副本了,可以節約空間),檔案分散式儲存的切分,檔案儲存格式,壓縮等待;
- MR:主要是要掌握map -> shuffle -> reduce這一套經典程式設計模型的原理,MR的基本編寫方法,以及map切塊,reduce輸出,mapjoin優化,記憶體調優等等;
- Yarn:作為一個資源排程工具,yarn的資源分配(以container為單位,container指的是包含一點cpu和記憶體),一些常用引數的配置(比如每個應用最多使用資源,每個container資源,虛擬記憶體率等等),為了任務之間不互相影響,引入資源排程池,將資源隔離開,任務的排程方式(FIFO,fair,capacity)等 YARN排程器(Scheduler)詳解;
Hbase
這是一個基於Hdfs的列式儲存的分散式資料庫,在企業中使用普遍,需要重點學習其用法、原理和優化;Hbase叢集掛掉的一次驚險經歷
需要掌握的基本知識,hbase的基本原理,邏輯上的行與列,列式儲存,底層資料hfile基於hdfs,併發高,橫向擴充套件。hbase的HMaster和HRegionServer的作用,zk的作用,客戶端讀寫資料的流程,memstore和bucketcache等快取,region的分裂,建表預分割槽,rowkey的設計,資料容錯HLog等。
Hive
hive是基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce或者Spark任務進行執行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉儲的統計分析。
- hive建表,分割槽表,外部表;
- udf開發和使用,Hiveserver2訪問Hive;
- 關聯hbase,使用Spark作為執行引擎等;
- join優化;
- 資料傾斜;
- 常用視窗函式;
- 基於Hive搭建資料倉儲;
Spark
Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。Spark使用Scala開發,擁有Hadoop MapReduce所具有的優點,可以進行微批實時處理;但不同於MapReduce的是——Job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的MapReduce的演算法。
- Spark架構,DAG排程器,standalone/yarn/Kubernetes 提供資源執行,記憶體管理;
- Spark Core,主要包括SparkContext,RDD、action和transform運算元;
- SparkStreaming,checkpoint和手動維護offset,消費kafka資料來源;
- SQL,DataFrame與RDD的轉化;
- Structured Streaming,有點雞肋,通常用Flink基於event實時處理;
- ML(機器學習),包含了大部分常用的演算法,分類、迴歸、聚類等等;
- Graphx,圖計算,有些行業需要用,比如社會關係挖掘、詐騙交易等;
- SparkR,資料科學工作者使用R進行大規模分散式計算,R很耗記憶體一直是個詬病;
- PySpark,Spark又是很包容的,提供了Python程式設計的Api;
Flink
這是個實時資料處理的元件,企業普遍使用,Flink狀態管理與狀態一致性(長文)。Apache Flink 是一個框架和分散式處理引擎,用於在無邊界和有邊界資料流上進行有狀態的計算。Flink 能在所有常見叢集環境中執行,並能以記憶體速度和任意規模進行計算。
主要包括,
- Flink的架構,提交應用在Yarn上面;
- DataSet / DataStream / Table Api ;
- Flink流式計算,flink對接kafka資料來源;
- 容錯,CheckPoint / Savepoint,兩階段提交等;
- Source / Sink操作(hbase、mysql、redis);
- WaterMark機制;
- 視窗函式Window;
- 不同資料流join操作;
- 側輸出(亂序、分流);
- Flink非同步IO;
Kafka:Apache Kafka® 是 一個分散式流處理平臺。可以讓你釋出和訂閱流式的記錄。這一方面與訊息佇列或者企業訊息系統類似。可以儲存流式的記錄,並且有較好的容錯性。可以在流式記錄產生時就進行處理。
- 生產者、消費者,消費者組、broker,leader,flower選舉等;
- topic,partition,多副本,資料同步,高水位等;
- 抗峰流,資料生命週期;
- 資料寫入的acks保證,資料的消費語義,資料的全域性和區域性有序;
- kafka效能為什麼這麼快,順序寫、零拷貝、分割槽併發、傳輸壓縮、時間輪等,面試常問;
- 新版本kafka摒棄了zk;
資料倉儲
資料倉儲是一個面向主題的(Subject Oriented)、整合的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的資料集合,用於支援管理決策,資料倉儲在資料平臺中的建設有兩個環節:一個是資料倉儲的構建,另外一個就是資料倉儲的應用。數倉架構發展史
- 經典的三正規化,維表和事實表;
- 星型模型,雪花模型,星座模型;
- 正規化建模和維度建模;
- 數倉分層,ods/dwd/dws/dim, ads層,dm層;
- 資料湖,與資料倉儲相比更加靈活和節約成本;
impala
Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢儲存在Hadoop的HDFS和HBase中的PB級大資料。已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的互動性。相比之下,Impala的最大特點也是最大賣點就是它的快速。
clickhouse
ClickHouse 是 Yandex(俄羅斯最大的搜尋引擎)開源的一個用於實時資料分析的基於列儲存的資料庫,其處理資料的速度比傳統方法快 100-1000 倍。
kylin
Apache Kylin™是一個開源的、分散式的分析型資料倉儲,提供Hadoop/Spark 之上的 SQL 查詢介面及多維分析(OLAP)能力以支援超大規模資料,最初由 eBay 開發並貢獻至開源社群。它能在亞秒內查詢巨大的表。
Apache Kylin™ 令使用者僅需三步,即可實現超大資料集上的亞秒級查詢。
- 定義資料集上的一個星形或雪花形模型
- 在定義的資料表上構建cube
- 使用標準 SQL 通過 ODBC、JDBC 或 RESTFUL API 進行查詢,僅需亞秒級響應時間即可獲得查詢結果
**docker / Kubernetes **
Kubernetes 是一個可移植的、可擴充套件的開源平臺,用於管理容器化的工作負載和服務,可促進宣告式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支援和工具廣泛可用。
kudu
Kudu是Cloudera開源的新型列式儲存系統,是Apache Hadoop生態圈的成員之一(incubating),專門為了對快速變化的資料進行快速的分析,填補了以往Hadoop儲存層的空缺。
cdh/hdp
Apache Hadoop的開源協議決定了任何人可以對其進行修改,並作為開源或者商業版釋出/銷售。故而目前Hadoop發行版非常的多,有華為發行版(收費)、Intel發行版(收費)、Cloudera發行版CDH(免費)、Hortonworks版本HDP(免費),這些發行版都是基於Apache Hadoop衍生出來的。
當然了,還有很多其它的元件,比如sqoop,oozie等等,都有自己的應用場景。