大數據開發學習路線整理


 參考博客:做了五年大數據開發工程師總結的的大數據學習路線

大數據的4V特征

1.        數據量大,TB->PB

2.        數據類型繁多,結構化、非結構化文本、日志、視頻、圖片、地理位置等;

3.        商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;

4.        處理時效性高,海量數據的處理需求不再局限在離線計算當中。

常見的大數據的開源框架:

l  文件存儲:Hadoop HDFSTachyonKFS

l  離線計算:Hadoop MapReduceSpark

l  流式、實時計算:StormSpark StreamingS4Heron

l  K-VNOSQL數據庫:HBaseRedisMongoDB

l  資源管理:YARNMesos

l  日志收集:FlumeScribeLogstashKibana

l  消息系統:KafkaStormMQZeroMQRabbitMQ

l  查詢分析:HiveImpalaPigPrestoPhoenixSparkSQLDrillFlinkKylinDruid

l  分布式協調服務:Zookeeper

l  集群管理與監控:AmbariGangliaNagiosCloudera Manager

l  數據挖掘、機器學習:MahoutSpark MLLib

l  數據同步:Sqoop

l  任務調度:Oozie

l  ……

第一章:初識Hadoop

1.1 學會百度與Google

不論遇到什么問題,先試試搜索並自己解決。Google首選,翻不過去的,就用百度吧。

1.2 參考資料首選官方文檔

特別是對於入門來說,官方文檔永遠是首選文檔。

1.3 先讓Hadoop跑起來

Hadoop可以算是大數據存儲和計算的開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。

關於Hadoop,你至少需要搞清楚以下是什么

l  Hadoop 1.0Hadoop 2.0Hadoop1.0知道它就行了,現在都用Hadoop 2.0.

l  MapReduceHDFS

l  NameNodeDataNode

l  JobTrackerTaskTracker

l  YarnResourceManagerNodeManager

l  自己搭建Hadoop,請使用第一步和第二步,能讓它跑起來就行。(建議先使用安裝包命令行安裝,不要使用管理工具安裝。)

1.4 試試使用Hadoop

l  HDFS目錄操作命令;

l  上傳、下載文件命令;

l  提交運行MapReduce示例程序;

l  打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日志。

l  知道Hadoop的系統日志在哪里。

1.5了解Hadoop原理

l  MapReduce:如何分而治之;

l  HDFS:數據到底在哪里,什么是副本;

l  Yarn到底是什么,它能干什么;

l  NameNode到底在干些什么;

l  ResourceManager到底在干些什么;

1.6 自己寫一個MapReduce程序

l  請仿照WordCount例子,自己寫一個(照抄也行)WordCount程序,

l  打包並提交到Hadoop運行。

你不會JavaShellPython都可以,有個東西叫Hadoop Streaming

如果你認真完成了以上幾步,恭喜你,你的一只腳已經進來了。

第二章:更高效的WordCount

2.1 SQL

你知道數據庫嗎?你會寫SQL嗎?如果不會,請學點SQL吧。

2.2 SQLWordCount

1.6中,你寫(或者抄)的WordCount一共有幾行代碼?

給你看看我的:

SELECT word,COUNT(1) FROM wordcount GROUP BY word;

這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,我這一句就搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL接口。

2.3 SQL On HadoopHive

什么是Hive?官方給的解釋是:

The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

為什么說Hive是數據倉庫工具,而不是數據庫工具呢?有的朋友可能不知道數據倉庫,數據倉庫是邏輯上的概念,底層使用的是數據庫,數據倉庫中的數據有這兩個特點:最全的歷史數據(海量)、相對穩定的;所謂相對穩定,指的是數據倉庫不同於業務系統數據庫,數據經常會被更新,數據一旦進入數據倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數據的數據倉庫工具,而不是數據庫工具。

2.4 安裝配置Hive

請參考1.1 1.2 完成Hive的安裝配置。可以正常進入Hive命令行。

2.5 試試使用Hive

請參考1.1 1.2 ,在Hive中創建wordcount表,並運行2.2中的SQL語句。

Hadoop WEB界面中找到剛才運行的SQL任務。

SQL查詢結果是否和1.4MapReduce中的結果一致。

2.6 Hive是怎么工作的

明明寫的是SQL,為什么Hadoop WEB界面中看到的是MapReduce任務?

2.7 學會Hive的基本命令

l  創建、刪除表;

l  加載數據到表;

l  下載Hive表的數據;

l  請參考1.2,學習更多關於Hive的語法和命令。

如果你已經按照《寫給大數據開發初學者的話》中第一章和第二章的流程認真完整的走了一遍,那么你應該已經具備以下技能和知識點:

l  Hadoop1.0Hadoop2.0的區別;

l  MapReduce的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);

l  HDFS讀寫數據的流程;向HDFSPUT數據;從HDFS中下載數據;

l  自己會寫簡單的MapReduce程序,運行出現問題,知道在哪里查看日志;

l  會寫簡單的SELECTWHEREGROUP BYSQL語句;

l  Hive SQL轉換成MapReduce的大致流程;

l  Hive中常見的語句:創建表、刪除表、往表中加載數據、分區、將表中數據下載到本地。

從上面的學習,你已經了解到,HDFSHadoop提供的分布式存儲框架,它可以用來存儲海量數據,MapReduceHadoop提供的分布式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On HadoopHive提供了SQL接口,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapReduce,提交運行。

此時,你的”大數據平台”是這樣的:

那么問題來了,海量數據如何到HDFS上呢?

第三章:把別處的數據搞到Hadoop上

此處也可以叫做數據采集,把各個數據源的數據采集到Hadoop上。

3.1 HDFS PUT命令(建議熟練掌握)

這個在前面你應該已經使用過了。

put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。

3.2 HDFS API

HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。

實際環境中一般自己較少編寫程序使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。

l  建議了解原理,會寫Demo。

3.3 Sqoop

Sqoop是一個主要用於Hadoop/Hive與傳統關系型數據庫Oracle/MySQL/SQLServer等之間進行數據交換的開源框架。

就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數翻譯成MapReduce,提交到Hadoop運行,完成Hadoop與其他數據庫之間的數據交換。

l  自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較復雜)。

l  了解Sqoop常用的配置參數和方法。

l  使用Sqoop完成從MySQL同步數據到HDFS;

l  使用Sqoop完成從MySQL同步數據到Hive表;

PS:如果后續選型確定使用Sqoop作為數據交換工具,那么建議熟練掌握,否則,了解和會用Demo即可。

3.4 Flume

Flume是一個分布式的海量日志采集和傳輸框架,因為“采集和傳輸框架”,所以它並不適合關系型數據庫的數據采集和傳輸。

Flume可以實時的從網絡協議、消息系統、文件系統采集日志,並傳輸到HDFS上。

因此,如果你的業務有這些數據源的數據,並且需要實時的采集,那么就應該考慮使用Flume。

l  下載和配置Flume。

l  使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;

PS:Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。

3.5 阿里開源的DataX

之所以介紹這個,是因為我們這邊一個老師目前就職的公司使用的Hadoop與關系型數據庫數據交換的工具,就是之前基於DataX開發的,非常好用。

現在DataX已經是3.0版本,支持很多數據源。

你也可以在其之上做二次開發。

PS:有興趣的可以研究和使用一下,對比一下它與Sqoop。

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

第四章:把Hadoop上的數據搞到別處去

前面介紹了如何把數據源的數據采集到Hadoop上,數據到Hadoop上之后,便可以使用Hive和MapReduce進行分析了。那么接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?

其實,此處的方法和第三章基本一致的。

4.1 HDFS GET命令

l  把HDFS上的文件GET到本地。需要熟練掌握。

4.2 HDFS API

同3.2.

4.3 Sqoop

同3.3.

l  使用Sqoop完成將HDFS上的文件同步到MySQL;

l  使用Sqoop完成將Hive表中的數據同步到MySQL;

4.4 DataX

同3.5.

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

如果你已經按照這個路線走了一遍,那么你接下來就應該具備以下技能和知識點:

l  知道如何把已有的數據采集到HDFS上,包括離線采集和實時采集;

l  你已經知道sqoop(或者還有DataX)是HDFS和其他數據源之間的數據交換工具;

l  你已經知道flume可以用作實時的日志采集。

l  搭建Hadoop集群,把數據采集到Hadoop上,使用Hive和MapReduce來分析數據,把分析結果同步到其他數據源。

接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapReduce來執行。

第五章:快一點吧,我的SQL

其實大家都已經發現Hive后台使用MapReduce作為執行引擎,實在是有點慢。

因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.

這三種框架基於半內存或者全內存,提供了SQL接口來快速查詢分析Hadoop上的數據。

我們目前使用的是SparkSQL,至於為什么用SparkSQL,原因大概有以下吧:

使用Spark還做了其他事情,不想引入過多的框架;

Impala對內存的需求太大,沒有過多資源部署;

5.1 關於Spark和SparkSQL

l  什么是Spark,什么是SparkSQL。

l  Spark有的核心概念及名詞解釋。

l  SparkSQL和Spark是什么關系,SparkSQL和Hive是什么關系。

l  SparkSQL為什么比Hive跑的快。

5.2 如何部署和運行SparkSQL

l  Spark有哪些部署模式?

l  如何在Yarn上運行SparkSQL?

l  使用SparkSQL查詢Hive中的表。

PS: Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之后,可以先從SparkSQL入手,循序漸進。

關於Spark和SparkSQL,可參考 http://lxw1234.com/archives/category/spark

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

第六章:一次采集、多次消費

在實際業務場景下,特別是對於一些監控日志,想即時的從日志中了解一些指標(關於實時計算,后面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume采集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。

為了滿足數據的一次采集、多次消費的需求,這里要說的便是Kafka。

6.1 關於Kafka

l  什么是Kafka?

l  Kafka的核心概念及名詞解釋。

6.2 如何部署和使用Kafka

l  使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。

l  使用Java程序自己編寫並運行生產者和消費者程序。

l  Flume和Kafka的集成,使用Flume監控日志,並將日志數據實時發送至Kafka。

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

這時,使用Flume采集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。

接下來你應該已經具備以下技能和知識點:

l  為什么Spark比MapReduce快。

l  使用SparkSQL代替Hive,更快的運行SQL。

l  使用Kafka完成數據的一次收集,多次消費架構。

l  自己可以寫程序完成Kafka的生產者和消費者。

從前面的學習,你已經掌握了大數據平台中的數據采集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據采集任務成功完成后,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日志來方便查錯。

第七章:越來越多的分析任務

不僅僅是分析任務,數據采集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。

7.1 Apache Oozie

l  Oozie是什么?有哪些功能?

l  Oozie可以調度哪些類型的任務(程序)?

l  Oozie可以支持哪些任務觸發方式?

l  安裝配置Oozie。

7.2 其他開源的任務調度系統

l  Azkaban:

https://azkaban.github.io/

light-task-scheduler:

https://github.com/ltsopensource/light-task-scheduler

l  Zeus:

https://github.com/alibaba/zeus

……

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

第八章:我的數據要實時

在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。

8.1 Storm

l  什么是Storm?有哪些可能的應用場景?

l  Storm由哪些核心組件構成,各自擔任什么角色?

l  Storm的簡單安裝和部署。

l  自己編寫Demo程序,使用Storm完成實時數據流計算。

8.2 Spark Streaming

l  什么是Spark Streaming,它和Spark是什么關系?

l  Spark Streaming和Storm比較,各有什么優缺點?

l  使用Kafka + Spark Streaming,完成實時計算的Demo程序。

如果你認真完成了上面的學習和實踐,此時,你的”大數據平台”應該是這樣的:

 

至此,你的大數據平台底層架構已經成型了,其中包括了數據采集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。

第九章:我的數據要對外

通常對外(業務)提供數據訪問,大體上包含以下方面:

l  離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;離線數據的提供可以采用Sqoop、DataX等離線數據交換工具。

l  實時:比如,在線網站的推薦系統,需要實時從數據平台中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。

l  根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。

l  OLAP分析:OLAP除了要求底層的數據模型比較規范,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那么Kylin是最好的選擇。

l  即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。

這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。

如果你已經掌握了如何很好的對外(業務)提供數據,那么你的“大數據平台”應該是這樣的:

第十章:牛逼高大上的機器學習

關於這塊,我這個門外漢也只能是簡單介紹一下了。數學專業畢業的我非常慚愧,很后悔當時沒有好好學數學。

在我們的業務中,遇到的能用機器學習解決的問題大概這么三類:

l  分類問題:包括二分類和多分類,二分類就是解決了預測的問題,就像預測一封郵件是否垃圾郵件;多分類解決的是文本的分類;

l  聚類問題:從用戶搜索過的關鍵詞,對用戶進行大概的歸類。

l  推薦問題:根據用戶的歷史瀏覽和點擊行為進行相關推薦。

大多數行業,使用機器學習解決的,也就是這幾類問題。

入門學習線路:

l  數學基礎;

l  機器學習實戰(Machine Learning in Action),懂Python最好;

l  SparkMlLib提供了一些封裝好的算法,以及特征處理、特征選擇的方法。

機器學習確實牛逼高大上,也是我學習的目標。

那么,可以把機器學習部分也加進你的“大數據平台”了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM