在16年8月份至今,一直在努力學習大數據大數據相關的技術,很想了解眾多老司機的學習歷程。因為大數據涉及的技術很廣需要了解的東西也很多,會讓很多新手望而卻步。所以,我就在自己學習的過程中總結一下學到的內容以及踩到的一些坑,希望得到老司機的指點和新手的借鑒。
目前正在結合機器學習理論學習MLlib源碼
前言
在學習大數據之前,先要了解他解決了什么問題,能給我們帶來什么價值。一方面,以前IT行業發展沒有那么快,系統的應用也不完善,數據庫足夠支撐業務系統。但是隨着行業的發展,系統運行的時間越來越長,搜集到的數據也越來越多,傳統的數據庫已經不能支撐全量數據的存儲工作;另一方面,數據越來越多,單機的計算已經成為瓶頸。因此,基於分布式的大數據系統嶄露頭角。那么大數據系統里面都有什么東西呢?可以參考下面的圖
在存儲上,hdfs的分布式存儲可以任意水平擴展,可以解決數據存儲的難題。在計算上,從最初的MapReduce,把任務水平拆分,多台機器並行計算,再匯總結果;到基於Spark的內存計算,改造Mapreduce每次數據落盤以及編程方式的痛點。
有了存儲和計算框架,周邊就衍生出了很多管理、緩存相關的技術,比如:
- yarn解決多租戶資源調度的難題,
- flume解決數據傳輸的難題,
- sqoop解決分布式存儲數據與傳統DB數據之間的轉換,
- oozie解決了大數據計算任務的調度,
- kafka提供了發布訂閱機制的消息隊列,
- zookeeper可以幫助用戶完成主備的選舉,
- hive在hdfs的基礎上提供了數倉的功能,
- hbase則基於hdfs實現列式數據庫....
上面都是hadoop生態的,由於hadoop中計算模型普遍是mapreduce,但是它的編程風格和計算機制讓很多人使用不便。因此后來spark逐漸代替了mapr成為主流的計算框架。Spark也有它自己的生態,但是由於hadoop更多更早的被應用到企業,所以spark也可以無縫的集成hadoop生態中的產品。spark更多只是扮演一個計算的框架,在這個框架上,提供了基本的計算模塊core,基於sql的計算引擎spark sql,對接實時數據的流式計算spark streaming,算法相關的mlib以及圖計算相關的graphx。
這些框架都在這個大數據生態中扮演了自己重要的角色,他們協同工作就可以幫助我們解決很多難題。由於我也是接觸不久,所以就按照自己學習和工作涉及的內容,在下面按照各個章節進行介紹,后續也會持續的更新。希望對所有對大數據感興趣的
學習必備
在學習大數據的過程中,需要具備的能力或者知識,在這里簡單的羅列一下:
- 語言基礎:需要會使用shell腳本、java和scala(這倆語言主要是用於日常代碼和閱讀源代碼)
- 工具:IDE如eclipse或者idea,虛擬機和secureCRT連接工具
- 書籍:《Hadoop權威指南》《Hadoop YARN權威指南》《Spark快速大數據分析》《從Paxos到zookeeper分布式一致性原理與實踐》《Hive編程指南》其他的書籍閱讀后再推薦吧
- 博客:董的博客
- 進階:閱讀官方文檔(幫你了解它都能做什么)、源代碼(幫你了解它是怎么做的)
hdfs
hdfs是大數據系統的基礎,它提供了基本的存儲功能,由於底層數據的分布式存儲,上層任務也可以利用數據的本地性進行分布式計算。hdfs思想上很簡單,就是namenode負責數據存儲位置的記錄,datanode負責數據的存儲。使用者client會先訪問namenode詢問數據存在哪,然后去datanode存儲;寫流程也基本類似,會先在namenode上詢問寫到哪,然后把數據存儲到對應的datanode上。所以namenode作為整個系統的靈魂,一旦它掛掉了,整個系統也就無法使用了。在運維中,針對namenode的高可用變得十分關鍵。
- 2016-07-28 單節點部署Hadoop教程
- 2016-07-28 Hadoop HDFS 用戶指南
mapreduce
hive
hive基於hdfs構建了數據倉庫系統,它以hdfs作為存儲,依賴於數據庫(嵌入式的數據庫derby或者獨立的數據mysql或oracle)存儲表schema信息,並完成基於sql自動解析創建mapreduce任務(由於mapreduce計算效率比較差,目前官方推薦的是底層計算模型采用tez或者spark)。所以hive可以理解為:hdfs原始存儲+DB Schema信息存儲+SQL解析引擎+底層計算框架組成的數據倉庫。
- 2016-08-13 Hive初識
- 2016-08-16 Hive部署入門教程
- 2016-08-23 《Hive編程指南》—— 讀后總結
- 2016-08-23 Hive數據的導入導出
- 2016-08-24 Hive連接JOIN用例詳解
- 2016-08-30 循序漸進,了解Hive是什么!
- 2016-08-31 手把手教你搭建Hive Web環境
spark
spark是現在大數據中應用最多的計算模型,它與java8的stream編程有相同的風格。封裝了很多的計算方法和模型,以延遲執行的方式,在真正需要執行的時候才進行運算。既可以有效的做計算過程的容錯,也可以改善我們的編程模型。
- 2016-08-05 《Spark大數據處理》—— 讀后總結
- 2016-09-03 《Spark快速大數據分析》—— 第三章 RDD編程
- 2016-09-05 《Spark快速大數據分析》—— 第五章 數據讀取和保存
- 2016-09-06 《Spark快速大數據分析》—— 第六章 Spark編程進階
- 2016-09-13 《Spark快速大數據分析》—— 第七章 在集群上運行Spark
- 2016-09-21 [大數據之Spark]——快速入門
- 2016-10-09 [大數據之Spark]——Transformations轉換入門經典實例
- 2016-10-10 [大數據之Spark]——Actions算子操作入門實例
- 2017-02-18 Spark源碼分析之Spark Shell(上)
- 2017-02-19 Spark源碼分析之Spark Shell(下)
- 2017-02-21 Spark源碼分析之Spark-submit和Spark-class
- 2017-02-23 Spark SQL 用戶自定義函數UDF、用戶自定義聚合函數UDAF 教程
- 2017-02-26 基於Spark UI性能優化與調試——初級篇
- 2017-04-06 Spark Stage切分 源碼剖析——DAGScheduler
- 2017-04-16 Spark源碼分析之分區器的作用
- 2018-01-10 Spark源碼分析 之 Driver和Excutor是怎么跑起來的?(2.2.0版本)
- 2018-01-19 Spark Client啟動原理探索
- 2018-06-02 Structured Streaming教程(1) —— 基本概念與使用
- 2018-06-04 Structured Streaming教程(2) —— 常用輸入與輸出
- 2018-06-05 Structured Streaming教程(3) —— 與Kafka的集成
- 2018-07-05 Spark MLlib 之 特征處理StringIndexer、IndexToString使用說明以及源碼剖析
- 2018-07-07 Spark MLlib 之 Vector向量深入淺出
- 2018-07-09 Spark MLlib 之 aggregate和treeAggregate從原理到應用
- 2018-07-11 Spark MLlib 之 大規模數據集的相似度計算原理探索
oozie
oozie提供了大數據場景下各種任務的調度,比如shell腳本、spark任務、mapreduce任務、sqoop任務、hive查詢以及普通的java程序等等。它的編譯是生態圈里面最復雜的,由於以來的各個版本不同,需要指定特定的版本,因此沒有成型的一鍵部署包。
- 2016-09-22 oozie快速入門
- 2016-11-17 Oozie分布式任務的工作流——郵件篇
- 2016-11-19 Oozie分布式任務的工作流——腳本篇
- 2016-11-21 Oozie調度報錯——ORA-00918:未明確定義列
- 2016-11-22 Oozie分布式任務的工作流——Sqoop篇
- 2016-12-11 大數據之Oozie——源碼分析(一)程序入口
- 2016-12-23 Oozie分布式任務的工作流——Spark篇
- 2017-02-28 圖文並茂 —— 基於Oozie調度Sqoop
- 2017-03-01 Oozie分布式工作流——流控制
- 2017-03-02 Oozie分布式工作流——Action節點
- 2017-03-04 Oozie分布式工作流——從理論和實踐分析使用節點間的參數傳遞
- 2017-03-07 Oozie分布式工作流——EL表達式
sqoop
sqoop支持基於sql或者表名把數據庫中的數據存儲到分布式環境中,數據庫支持oracle\mysql等等,分布式環境可以是hdfs,hive,hbase等等,數據的導入時雙向的,比如你可以把oracle中的數據讀取存儲到hdfs,也可以把hdfs的數據導入到oracle.
- 2016-09-12 sqoop初探?
- 2016-09-29 什么是sqoop?
- 2016-11-23 sqoop切分任務原理
hbase
HBase是基於Hdfs之上的列式數據庫,基於文件分割以及rowkey的順序存儲,能快速索引查詢數據。我這邊是在推薦系統中,作為推薦結果存儲引擎,不過由於內容比較碎片化,Hbase寫入時間比較隨意,因此總會出現大量超時現象,還在持續優化中。
推薦學習資料:
個人總結:
- 2017-06-09 Hbase常用命令
- 2017-07-03 Hbase多版本的讀寫(Shell&Java API版)
- 2017-11-24 HBase跨地區機房的壓測小程序——從開發到打包部署
- 2018-02-28 Spark DataFrame寫入HBase的常用方式
- 2018-07-12 HBase官方文檔 之 Region的相關知識
yarn
在企業中,大數據的基礎平台往往是多個用戶共用的,那么如何管理資源的分配,就需要yarn來處理了。Yarn默認提供了三種資源分配的策略:
- FIFO:先進先出,即按照用戶提交任務的時間分配資源
- Capacity:按照隊列設置隊列的大小
- Fair Share:也是基於隊列,只不過資源的粒度更小。
常見可以用於分配的資源可以是節點的數量,內存的大小,也可以是CPU核數。
- 2016-12-06 yarn資源調度淺學
- 2016-12-13 大數據之Yarn——Capacity調度器概念以及配置
zookeeper
從名字來說他是動物園的管理員,實際上他是各個組件的協調者。可以實現類似主從選舉、分布式事務、負載均衡等多種功能,比如HDFS HA方案、HBase的Metastore、Kafka里面的offset維護等等,由此可以見,zookeeper的重要性。
不過激發我學習zookeeper的主要原因還是因為它里面涉及了很多分布式協議的東西,從而能更好的理解分布式中的一些概念。所以,就跟着我一起深入淺出的學習吧!
主要參考:官方文檔 《從Paxos到zookeeper分布式一致性原理與實踐》
- 2018-03-27 Zookeeper學習筆記——1 單機版本環境搭建
- 2018-04-08 分布式理論——從ACID到CAP再到BASE
- 2018-04-09 Zookeeper學習筆記——2 Shell和Java API的使用
- 2018-04-10 跟着ZooKeeper學Java——CountDownLatch和Join的使用
最后
上面是我學習hadoop和spark的分享,更重要的是學習歷程的記錄,希望有興趣學習大數據的朋友可以通過我之前的學習路線獲得一些思考和借鑒。后續也會逐步的完善,等到對整體有了比較全面的了解后,會專門針對安裝部署、使用實踐、原理解析進行介紹。