1. 程式人生 > >java轉大資料方向學習路線

java轉大資料方向學習路線

申明:

本文旨在為普通程式設計師(Java程式設計師最佳)提供一個入門級別的大資料技術學習路徑,不適用於大資料工程師的進階學習,也不適用於零程式設計基礎的同學。


目錄

前言

一、背景介紹

二、大資料介紹

正文

一、大資料相關工作介紹

二、大資料工程師的技能要求

必須掌握的技能11條

高階技能6條

三、大資料學習規劃

第一階段(基礎階段)

第二階段(攻堅階段)

第三階段(輔助工具工學習階段)

第四階段(不斷學習階段)

四、持續學習資源推薦

五、專案案例分析


前言

一、背景介紹

本人目前是一名大資料工程師,專案資料50T,日均資料增長20G左右,個人是從Java後端開發,經過3個月的業餘自學成功轉型大資料工程師。

二、大資料介紹

大資料本質也是資料,但是又有了新的特徵,包括資料來源廣、資料格式多樣化(結構化資料、非結構化資料、Excel檔案、文字檔案等)、資料量大(最少也是TB級別的、甚至可能是PB級別)、資料增長速度快等。

針對以上主要的4個特徵我們需要考慮以下問題:

  1. 資料來源廣,該如何採集彙總?,對應出現了Sqoop,Cammel,Datax等工具。
  2. 資料採集之後,該如何儲存?,對應出現了GFS,HDFS,TFS等分散式檔案儲存系統。
  3. 由於資料增長速度快,資料儲存就必須可以水平擴充套件。
  4. 資料儲存之後,該如何通過運算快速轉化成一致的格式,該如何快速運算出自己想要的結果

     對應的MapReduce這樣的分散式運算框架解決了這個問題;但是寫MapReduce需要Java程式碼量很大,所以出現了Hive,Pig       等將SQL轉化成MapReduce的解析引擎;

     普通的MapReduce處理資料只能一批一批地處理,時間延遲太長,為了實現每輸入一條資料就能得到結果,於是出現了            Storm/JStorm這樣的低時延的流式計算框架;

    但是如果同時需要批處理和流處理,按照如上就得搭兩個叢集,Hadoop叢集(包括HDFS+MapReduce+Yarn)和Storm集  群,不易於管理,所以出現了Spark這樣的一站式的計算框架,既可以進行批處理,又可以進行流處理(實質上是微批處理)。

  1. 而後Lambda架構,Kappa架構的出現,又提供了一種業務處理的通用架構。
  2. 為了提高工作效率,加快運速度,出現了一些輔助工具:

    1. Ozzie,azkaban:定時任務排程的工具。
    2. Hue,Zepplin:圖形化任務執行管理,結果檢視工具。
    3. Scala語言:編寫Spark程式的最佳語言,當然也可以選擇用Python。
    4. Python語言:編寫一些指令碼時會用到。
    5. Allluxio,Kylin等:通過對儲存的資料進行預處理,加快運算速度的工具。

以上大致就把整個大資料生態裡面用到的工具所解決的問題列舉了一遍,知道了他們為什麼而出現或者說出現是為了解決什麼問題,進行學習的時候就有的放矢了。

正文

一、大資料相關工作介紹

大資料方向的工作目前主要分為三個主要方向:

  1. 大資料工程師
  2. 資料分析師
  3. 大資料科學家
  4. 其他(資料探勘等)

二、大資料工程師的技能要求

附上大資料工程師技能圖:

enter image description here

必須掌握的技能11條

  1. Java高階(虛擬機器、併發)
  2. Linux 基本操作
  3. Hadoop(HDFS+MapReduce+Yarn )
  4. HBase(JavaAPI操作+Phoenix )
  5. Hive(Hql基本操作和原理理解)
  6. Kafka
  7. Storm/JStorm
  8. Scala
  9. Python
  10. Spark (Core+sparksql+Spark streaming )
  11. 輔助小工具(Sqoop/Flume/Oozie/Hue等)

高階技能6條

  1. 機器學習演算法以及mahout庫加MLlib
  2. R語言
  3. Lambda 架構
  4. Kappa架構
  5. Kylin
  6. Alluxio

三、大資料學習規劃

假設每天可以抽出3個小時的有效學習時間,加上週末每天保證10個小時的有效學習時間;

3個月會有(21*3+4*2*10)*3=423小時的學習時間。

第一階段(基礎階段)

1)Linux學習(跟鳥哥學就ok了)—–20小時

  1. Linux作業系統介紹與安裝。
  2. Linux常用命令。
  3. Linux常用軟體安裝。
  4. Linux網路。
  5. 防火牆。
  6. Shell程式設計等。

官網:https://www.centos.org/download/
中文社群:http://www.linuxidc.com/Linux/2017-09/146919.htm

2)Java 高階學習(《深入理解Java虛擬機器》、《Java高併發實戰》)—30小時

  1. 掌握多執行緒。
  2. 掌握併發包下的佇列。
  3. 瞭解JMS。
  4. 掌握JVM技術。
  5. 掌握反射和動態代理。

官網:https://www.java.com/zh_CN/
中文社群:http://www.java-cn.com/index.html

3)Zookeeper學習(可以參照這篇部落格進行學習:http://www.cnblogs.com/wuxl360/p/5817471.html

  1. Zookeeper分散式協調服務介紹。
  2. Zookeeper叢集的安裝部署。
  3. Zookeeper資料結構、命令。
  4. Zookeeper的原理以及選舉機制。

官網:http://zookeeper.apache.org/
中文社群:http://www.aboutyun.com/forum-149-1.html

第二階段(攻堅階段)

4)Hadoop (《Hadoop 權威指南》)—80小時

1、HDFS

  1. HDFS的概念和特性。
  2. HDFS的shell操作。
  3. HDFS的工作機制。
  4. HDFS的Java應用開發。

2、MapReduce

  1. 執行WordCount示例程式。
  2. 瞭解MapReduce內部的執行機制。 
    1. MapReduce程式執行流程解析。
    2. MapTask併發數的決定機制。
    3. MapReduce中的combiner元件應用。
    4. MapReduce中的序列化框架及應用。
    5. MapReduce中的排序。
    6. MapReduce中的自定義分割槽實現。
    7. MapReduce的shuffle機制。
    8. MapReduce利用資料壓縮進行優化。
    9. MapReduce程式與YARN之間的關係。
    10. MapReduce引數優化。

3、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小時

  1. Hive 基本概念
    1. Hive 應用場景。
    2. Hive 與hadoop的關係。
    3. Hive 與傳統資料庫對比。
    4. Hive 的資料儲存機制。
  2. Hive 基本操作
    1. Hive 中的DDL操作。
    2. 在Hive 中如何實現高效的JOIN查詢。
    3. Hive 的內建函式應用。
    4. Hive shell的高階使用方式。
    5. Hive 常用引數配置。
    6. Hive 自定義函式和Transform的使用技巧。
    7. Hive UDF/UDAF開發例項。
  3. 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小時

  1. hbase簡介。
  2. habse安裝。
  3. hbase資料模型。
  4. hbase命令。
  5. hbase開發。
  6. hbase原理。

官網:http://hbase.apache.org/
中文文件:http://abloz.com/hbase/book.html
中文社群:http://www.aboutyun.com/forum-142-1.html

7)Scala(《快學Scala》)–20小時

  1. Scala概述。
  2. Scala編譯器安裝。
  3. Scala基礎。
  4. 陣列、對映、元組、集合。
  5. 類、物件、繼承、特質。
  6. 模式匹配和樣例類。
  7. 瞭解Scala Actor併發程式設計。
  8. 理解Akka。
  9. 理解Scala高階函式。
  10. 理解Scala隱式轉換。

官網:http://www.scala-lang.org/
初級中文教程:http://www.runoob.com/scala/scala-tutorial.html

8)Spark (《Spark 權威指南》)—60小時

enter image description here

  1. Spark core
    1. Spark概述。
    2. Spark叢集安裝。
    3. 執行第一個Spark案例程式(求PI)。
  2. RDD
    1. RDD概述。
    2. 建立RDD。
    3. RDD程式設計API(Transformation 和 Action Operations)。
    4. RDD的依賴關係
    5. RDD的快取
    6. DAG(有向無環圖)
  3. Spark SQL and DataFrame/DataSet
    1. Spark SQL概述。
    2. DataFrames。
    3. DataFrame常用操作。
    4. 編寫Spark SQL查詢程式。
  4. Spark Streaming
    1. park Streaming概述。
    2. 理解DStream。
    3. DStream相關操作(Transformations 和 Output Operations)。
  5. Structured Streaming
  6. 其他(MLlib and GraphX )

這個部分一般工作中如果不是資料探勘,機器學習一般用不到,可以等到需要用到的時候再深入學習。

官網:http://spark.apache.org
中文文件(但是版本有點老):https://www.gitbook.com/book/aiyanbo/spark-programming-guide-zh-cn/details
中文社群:http://www.aboutyun.com/forum-146-1.html

9)Python (推薦廖雪峰的部落格—30小時

10)自己用虛擬機器搭建一個叢集,把所有工具都裝上,自己開發一個小demo —30小時

可以自己用VMware搭建4臺虛擬機器,然後安裝以上軟體,搭建一個小叢集(本人親測,I7,64位,16G記憶體,完全可以執行起來,以下附上我學習時用虛擬機器搭建叢集的操作文件)

叢集搭建文件1.0版本

1. 叢集規劃

enter image description here

2. 前期準備

2.0 系統安裝

2.1 主機名配置

    2.1.0 vi /etc/sysconfig/network
        NETWORKING=yes

    2.1.1 vi /etc/sysconfig/network
        NETWORKING=yes
        HOSTNAME=ys02

    2.1.2 vi /etc/sysconfig/network
        NETWORKING=yes

    2.1.3 vi /etc/sysconfig/network
        NETWORKING=yes
        HOSTNAME=ys04

2.2 host檔案修改
    2.2.0 vi /etc/hosts
        10.1.1.149 ys01
        10.1.1.148 ys02
        10.1.1.146 ys03
        10.1.1.145 ys04
2.3 關閉防火牆(centos 7預設使用的是firewall,centos 6 預設是iptables)

    2.3.0 systemctl stop firewalld.service (停止firewall)

    2.3.1 systemctl disable firewalld.service (禁止firewall開機啟動)

    2.3.2 firewall-cmd --state (檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)

2.4 免密登入(ys01 ->ys02,03,04)
    ssh-keygen -t rsa
    ssh-copy-id ys02(隨後輸入密碼)
    ssh-copy-id ys03(隨後輸入密碼)
    ssh-copy-id ys04(隨後輸入密碼)
    ssh ys02(測試是否成功)
    ssh ys03(測試是否成功)
    ssh ys04(測試是否成功)

2.5 系統時區與時間同步
    tzselect(生成日期檔案)
    cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime(將日期檔案copy到本地時間中)

3. 軟體安裝

3.0 安裝目錄規劃(軟體為所有使用者公用)

    3.0.0所有軟體的安裝放到/usr/local/ys/soft目錄下(mkdir /usr/local/ys/soft)

    3.0.1所有軟體安裝到/usr/local/ys/app目錄下(mkdir /usr/local/ys/app)

 3.1 JDK(jdk1.7)安裝

    3.1.1 alt+p 後出現sftp視窗,cd /usr/local/ys/soft,使用sftp上傳tar包到虛機ys01的/usr/local/ys/soft目錄下

    3.1.2解壓jdk
      cd /usr/local/ys/soft
        #解壓
        tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local/ys/app

    3.1.3將java新增到環境變數中
    vim /etc/profile
    #在檔案最後新增
    export JAVA_HOME= /usr/local/ys/app/ jdk-7u80
    export PATH=$PATH:$JAVA_HOME/bin

    3.1.4 重新整理配置
    source /etc/profile

3.2 Zookeeper安裝

    3.2.0解壓
    tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/ys/app(解壓)

    3.2.1 重新命名
    mv zookeeper-3.4.5 zookeeper(重新命名資料夾zookeeper-3.4.5為zookeeper)

    3.2.2修改環境變數
    vi /etc/profile(修改檔案)
    新增內容:
    export ZOOKEEPER_HOME=/usr/local/ys/app/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    3.2.3 重新編譯檔案:
    source /etc/profile
    注意:3臺zookeeper都需要修改

    3.2.4修改配置檔案
    cd zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg
    新增內容:
    dataDir=/usr/local/ys/app/zookeeper/data
    dataLogDir=/usr/local/ys/app/zookeeper/log
    server.1=ys01:2888:3888 (主機名, 心跳埠、資料埠)
    server.2=ys02:2888:3888
    server.3=ys04:2888:3888

    3.2.5 建立資料夾
    cd /usr/local/ys/app/zookeeper/
    mkdir -m 755 data
    mkdir -m 755 log

    3.2.6 在data資料夾下新建myid檔案,myid的檔案內容為:
    cd data
    vi myid
    新增內容:
        1
    將叢集下發到其他機器上
    scp -r /usr/local/ys/app/zookeeper ys02:/usr/local/ys/app/
    scp -r /usr/local/ys/app/zookeeper ys04:/usr/local/ys/app/

    3.2.7修改其他機器的配置檔案
    到ys02上:修改myid為:2
    到ys02上:修改myid為:3

    3.2.8啟動(每臺機器)
    zkServer.sh start
    檢視叢集狀態
    jps(檢視程序)
    zkServer.sh status(檢視叢集狀態,主從資訊)

3.3 Hadoop(HDFS+Yarn)

    3.3.0 alt+p 後出現sftp視窗,使用sftp上傳tar包到虛機ys01的/usr/local/ys/soft目錄下

    3.3.1 解壓jdk
      cd /usr/local/ys/soft
        #解壓
        tar -zxvf cenos-7-hadoop-2.6.4.tar.gz -C /usr/local/ys/app

    3.3.2 修改配置檔案

core-site.xml

第三階段(輔助工具工學習階段)

11)Sqoop(CSDN,51CTO ,以及官網)—20小時

  1. 資料匯出概念介紹
  2. Sqoop基礎知識
  3. Sqoop原理及配置說明
  4. Sqoop資料匯入實戰
  5. Sqoop資料匯出實戰、
  6. Sqoop批量作業操作

推薦學習部落格:http://student-lp.iteye.com/blog/2157983
官網:http://sqoop.apache.org/

12)Flume(CSDN,51CTO ,以及官網)—20小時

enter image description here

  1. FLUME日誌採集框架介紹。
  2. FLUME工作機制。
  3. FLUME核心元件。
  4. FLUME引數配置說明。
  5. FLUME採集nginx日誌案例(案例一定要實踐一下)
  6. 推薦學習部落格:http://www.aboutyun.com/thread-8917-1-1.html

官網:http://flume.apache.org

13)Oozie(CSDN,51CTO ,以及官網)–20小時

  1. 任務排程系統概念介紹。
  2. 常用任務排程工具比較。
  3. Oozie介紹。
  4. Oozie核心概念。
  5. Oozie的配置說明。
  6. Oozie實現mapreduce/hive等任務排程實戰案例。

推薦學習部落格:http://www.infoq.com/cn/articles/introductionOozie
官網:http://oozie.apache.org/

14)Hue(CSDN,51CTO ,以及官網)–20小時

推薦學習部落格:http://ju.outofmemory.cn/entry/105162
官網:http://gethue.com/

第四階段(不斷學習階段)

每天都會有新的東西出現,需要關注最新技術動態,不斷學習。任何一般技術都是先學習理論,然後在實踐中不斷完善理論的過程。

備註

1)如果你覺得自己看書效率太慢,你可以網上搜集一些課程,跟著課程走也OK 。如果看書效率不高就很網課,相反的話就自己看書。

2)企業目前更傾向於使用Spark進行微批處理,Storm只有在對時效性要求極高的情況下,才會使用,所以可以做了解。重點學習Spark Streaming。

3)快速學習的能力、解決問題的能力、溝通能力**真的很重要。

4)要善於使用StackOverFlow和Google(遇到解決不了的問題,先Google,如果Google找不到解決方能就去StackOverFlow提問,一般印度三哥都會在2小時內回答你的問題)。

5)視訊課程推薦:

可以去萬能的淘寶購買一些視訊課程,你輸入“大資料視訊課程”,會出現很多,多購買幾份(100塊以內可以搞定),然後選擇一個適合自己的。個人認為小象學院的董西成和陳超的課程含金量會比較高。

四、持續學習資源推薦

  1. Apache 官網(http://apache.org/
  2. Stackoverflow(https://stackoverflow.com/
  3. Github(https://github.com/)
  4. Cloudra官網(https://www.cloudera.com/)
  5. Databrick官網(https://databricks.com/)
  6. About 雲 :(http://www.aboutyun.com/)
  7. CSDN,51CTO (http://www.csdn.net/,http://www.51cto.com/
  8. 至於書籍噹噹一搜會有很多,其實內容都差不多。

五、專案案例分析

1)點選流日誌專案分析(此處借鑑CSDN博主的文章,由於沒有授權,所以就沒有貼過來,下面附上鍊接)—-批處理

http://blog.csdn.net/u014033218/article/details/76847263

2)Spark Streaming在京東的專案實戰(京東的實戰案例值得好好研究一下,由於沒有授權,所以就沒有貼過來,下面附上鍊接)—實時處理 

http://download.csdn.net/download/csdndataid_123/8079233

最後但卻很重要一點:每天都會有新的技術出現,要多關注技術動向,持續學習。

以上內容不保證一年以後仍適用。

【GitChat達人課】
前端惡棍 · 大漠窮秋 :《Angular 初學者快速上手教程 》
Python 中文社群聯合創始人 · Zoom.Quiet :《GitQ: GitHub 入味兒 》
前端顏值擔當 · 餘博倫:《如何從零學習 React 技術棧 》
GA 最早期使用者 · GordonChoi:《GA 電商資料分析實踐課》
技術總監及合夥人 · 楊彪:《Gradle 從入門到實戰》
混元霹靂手 · 江湖前端:《Vue 元件通訊全揭祕》
知名網際網路公司安卓工程師 · 張拭心:《安卓工程師跳槽面試全指南》
--------------------- 
作者:GitChat技術雜談 
來源:CSDN 
原文:https://blog.csdn.net/gitchat/article/details/78341484 
版權宣告:本文為博主原創文章,轉載請附上博文連結!