本文旨在爲普通程序員(Java程序員最佳)提供一個入門級別的大數據技術學習路徑,不適用於大數據工程師的進階學習,也不適用於零編程基礎的同學。
前言:
- 一、背景介紹
- 二、大數據介紹
正文:
- 一、大數據相關的工作介紹
- 二、大數據工程師的技能要求
- 三、大數據學習規劃
- 四、持續學習資源推薦(書籍,博客,網站)
- 五、項目案例分析(批處理+實時處理)
前言
一、背景介紹
本人目前是一名大數據工程師,項目數據50T,日均數據增長20G左右,個人是從Java後端開發,經過3個月的業餘自學成功轉型大數據工程師。
二、大數據介紹
大數據本質也是數據,但是又有了新的特徵,包括數據來源廣、數據格式多樣化(結構化數據、非結構化數據、Excel文件、文本文件等)、數據量大(最少也是TB級別的、甚至可能是PB級別)、數據增長速度快等。
針對以上主要的4個特徵我們需要考慮以下問題:
-
數據來源廣,該如何採集彙總?,對應出現了Sqoop,Cammel,Datax等工具。
-
數據採集之後,該如何存儲?,對應出現了GFS,HDFS,TFS等分佈式文件存儲系統。
-
由於數據增長速度快,數據存儲就必須可以水平擴展。
-
數據存儲之後,該如何通過運算快速轉化成一致的格式,該如何快速運算出自己想要的結果?
對應的MapReduce這樣的分佈式運算框架解決了這個問題;但是寫MapReduce需要Java代碼量很大,所以出現了Hive,Pig等將SQL轉化成MapReduce的解析引擎;
普通的MapReduce處理數據只能一批一批地處理,時間延遲太長,爲了實現每輸入一條數據就能得到結果,於是出現了Storm/JStorm這樣的低時延的流式計算框架;
但是如果同時需要批處理和流處理,按照如上就得搭兩個集羣,Hadoop集羣(包括HDFS+MapReduce+Yarn)和Storm集羣,不易於管理,所以出現了Spark這樣的一站式的計算框架,既可以進行批處理,又可以進行流處理(實質上是微批處理)。
-
而後Lambda架構,Kappa架構的出現,又提供了一種業務處理的通用架構。
-
爲了提高工作效率,加快運速度,出現了一些輔助工具:
- Ozzie,azkaban:定時任務調度的工具。
- Hue,Zepplin:圖形化任務執行管理,結果查看工具。
- Scala語言:編寫Spark程序的最佳語言,當然也可以選擇用Python。
- Python語言:編寫一些腳本時會用到。
- Allluxio,Kylin等:通過對存儲的數據進行預處理,加快運算速度的工具。
以上大致就把整個大數據生態裏面用到的工具所解決的問題列舉了一遍,知道了他們爲什麼而出現或者說出現是爲了解決什麼問題,進行學習的時候就有的放矢了。
正文
一、大數據相關工作介紹
大數據方向的工作目前主要分爲三個主要方向:
- 大數據工程師
- 數據分析師
- 大數據科學家
- 其他(數據挖掘等)
二、大數據工程師的技能要求
附上大數據工程師技能圖:
必須掌握的技能11條
- Java高級(虛擬機、併發)
- Linux 基本操作
- Hadoop(HDFS+MapReduce+Yarn )
- HBase(JavaAPI操作+Phoenix )
- Hive(Hql基本操作和原理理解)
- Kafka
- Storm/JStorm
- Scala
- Python
- Spark (Core+sparksql+Spark streaming )
- 輔助小工具(Sqoop/Flume/Oozie/Hue等)
高階技能6條
- 機器學習算法以及mahout庫加MLlib
- R語言
- Lambda 架構
- Kappa架構
- Kylin
- Alluxio
三、學習路徑
假設每天可以抽出3個小時的有效學習時間,加上週末每天保證10個小時的有效學習時間;
3個月會有(21*3+4*2*10)*3=423小時的學習時間。
第一階段(基礎階段)
1)Linux學習(跟鳥哥學就ok了)—–20小時
- Linux操作系統介紹與安裝。
- Linux常用命令。
- Linux常用軟件安裝。
- Linux網絡。
- 防火牆。
- Shell編程等。
官網:https://www.centos.org/download/
中文社區:http://www.linuxidc.com/Linux/2017-09/146919.htm
2)Java 高級學習(《深入理解Java虛擬機》、《Java高併發實戰》)—30小時
- 掌握多線程。
- 掌握併發包下的隊列。
- 瞭解JMS。
- 掌握JVM技術。
- 掌握反射和動態代理。
官網:https://www.java.com/zh_CN/
中文社區:http://www.java-cn.com/index.html
3)Zookeeper學習(可以參照這篇博客進行學習:http://www.cnblogs.com/wuxl360/p/5817471.html)
- Zookeeper分佈式協調服務介紹。
- Zookeeper集羣的安裝部署。
- Zookeeper數據結構、命令。
- Zookeeper的原理以及選舉機制。
官網:http://zookeeper.apache.org/
中文社區:http://www.aboutyun.com/forum-149-1.html
第二階段(攻堅階段)
4)Hadoop (《Hadoop 權威指南》)—80小時
-
HDFS
- HDFS的概念和特性。
- HDFS的shell操作。
- HDFS的工作機制。
- HDFS的Java應用開發。
-
MapReduce
- 運行WordCount示例程序。
- 瞭解MapReduce內部的運行機制。
- MapReduce程序運行流程解析。
- MapTask併發數的決定機制。
- MapReduce中的combiner組件應用。
- MapReduce中的序列化框架及應用。
- MapReduce中的排序。
- MapReduce中的自定義分區實現。
- MapReduce的shuffle機制。
- MapReduce利用數據壓縮進行優化。
- MapReduce程序與YARN之間的關係。
- MapReduce參數優化。
-
MapReduce的Java應用開發
官網:http://hadoop.apache.org/
中文文檔:http://hadoop.apache.org/docs/r1.0.4/cn/
中文社區:http://www.aboutyun.com/forum-143-1.html
5)Hive(《Hive開發指南》)–20小時
-
Hive 基本概念
- Hive 應用場景。
- Hive 與hadoop的關係。
- Hive 與傳統數據庫對比。
- Hive 的數據存儲機制。
-
Hive 基本操作
- Hive 中的DDL操作。
- 在Hive 中如何實現高效的JOIN查詢。
- Hive 的內置函數應用。
- Hive shell的高級使用方式。
- Hive 常用參數配置。
- Hive 自定義函數和Transform的使用技巧。
- Hive UDF/UDAF開發實例。
-
Hive 執行過程分析及優化策略
官網:https://hive.apache.org/
中文入門文檔:http://www.aboutyun.com/thread-11873-1-1.html
中文社區:http://www.aboutyun.com/thread-7598-1-1.html
6)HBase(《HBase權威指南》)—20小時
- hbase簡介。
- habse安裝。
- hbase數據模型。
- hbase命令。
- hbase開發。
- hbase原理。
官網:http://hbase.apache.org/
中文文檔:http://abloz.com/hbase/book.html
中文社區:http://www.aboutyun.com/forum-142-1.html
7)Scala(《快學Scala》)–20小時
- Scala概述。
- Scala編譯器安裝。
- Scala基礎。
- 數組、映射、元組、集合。
- 類、對象、繼承、特質。
- 模式匹配和樣例類。
- 瞭解Scala Actor併發編程。
- 理解Akka。
- 理解Scala高階函數。
- 理解Scala隱式轉換。
官網:http://www.scala-lang.org/
初級中文教程:http://www.runoob.com/scala/scala-tutorial.html
8)Spark (《Spark 權威指南》)—60小時