大數據學習方向,從入門到精通
很多初學者在萌生向大數據方向發展的想法之後,不免產生一些疑問,應該怎樣入門?應該學習哪些技術?學習路線又是什麼?
所有萌生入行的想法與想要學習Java的同學的初衷是一樣的。崗位非常火,就業薪資比較高,,前景非常可觀。基本都是這個原因而嚮往大數據,但是對大數據卻不甚了解。
如果你想學習,那麼首先你需要學會編程,其次你需要掌握數學,統計學的知識,最後融合應用,就可以想在數據方向發展,籠統來說,就是這樣的。但是僅僅這樣並沒有什麼幫助。
現在你需要問自己幾個問題:對於計算機/軟體,你的興趣是什麼?是計算機專業,對操作系統、硬體、網路、伺服器感興趣?是軟體專業,對軟體開發、編程、寫代碼感興趣?還是數學、統計學專業,對數據和數字特別感興趣。你自己的專業又是什麼?
如果你是金融專業,你可以學習,因為這結合起來你自己的專業,將讓你在只有你專業知識的競爭者之中脫穎而出,畢竟現在AI+已經涉及到金融行業了。
說了這麼多,無非就是想告訴你,大數據的三個大的發展方向:平台搭建/優化/運維/監控;大數據開發/ 設計/ 架構;數據分析/挖掘。
請不要問我哪個容易,只能說能掙錢的都不簡單。
說一下大數據的四個典型的特徵:數據量大; 數據類型繁多,(結構化、非結構化文本、日誌、視頻、圖片、地理位置等); 商業價值高,但需要在海量數據之上,通過數據分析與機器學習快速的挖掘出來; 處理時效性高,海量數據的處理需求不再局限在離線計算當中。
現如今,為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:文件存儲: N、Mesos日誌收集:Flume、Scribe、Logstash、Kibana消息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ查詢分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid分散式協調服務:Zookeeper集群管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager數據挖掘、機器學習:Mahout、Spark MLLib數據同步:Sqoop任務調度:Oozie
是不是眼花繚亂了,上面的這些內容,別談精通了,就算全部都會使用的,應該也沒幾個。咱們接下來就大數據開發/ 設計/ 架構方向來了解一下學習路線。
在接下的學習中,不論遇到什麼問題,先試試搜索並自己解決。Google首選,其次百度。
於入門者而言,官方文檔永遠是首選文檔。
第一章:Hadoop在大數據存儲和計算中Hadoop可以算是開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。
關於Hadoop,你至少需要搞清楚這些是什麼:Hadoop 1.0、Hadoop 2.0MapReduce、HDFSNameNode、DataNodeJobTracker、TaskTrackerYarn、ResourceManager、NodeManager
自己學會如何搭建Hadoop,先讓它跑起來。建議先使用安裝包命令行安裝,不要使用管理工具安裝。現在都用Hadoop 2.0。
HDFS目錄操作命令;上傳、下載文件命令;提交運行MapReduce示常式序;打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。知道Hadoop的系統日誌在哪裡。
以上完成之後,就應該去了解他們的原理了:
MapReduce:如何分而治之;HDFS:數據到底在哪裡,究竟什麼才是副本;
Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;
如果有合適的學習網站,視頻就去聽課,如果沒有或者比較喜歡書籍,也可以啃書。當然最好的方法是先去搜索出來這些是幹什麼的,大概有了概念之後,然後再去聽視頻。
之後便是自己尋找一個例子:
自己寫一個(照抄也行)WordCount程序,
打包並提交到Hadoop運行。你不會Java?Shell、Python都可以,有個東西叫Hadoop Streaming。如果你認真完成了以上幾步,恭喜你,你的一隻腳已經進來了。
第二章:更高效的WordCount在這裡,一定要學習SQL,它會對你的工作有很大的幫助。
就像是你寫(或者抄)的WordCount一共有幾行代碼?但是你用SQL就非常簡單了,例如:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,而SQL一行搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。
另外就是SQL On Hadoop之Hive於大數據而言一定要學習的。
什麼是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適合做海量數據的數據倉庫工具,而不是資料庫工具。
了解了它的作用之後,就是安裝配置Hive的環節,當可以正常進入Hive命令行是,就是安裝配置成功了。
了解Hive是怎麼工作的
學會Hive的基本命令:
創建、刪除表;載入數據到表;下載Hive表的數據;
MapReduce的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);
HDFS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;
自己會寫簡單的MapReduce程序,運行出現問題,知道在哪裡查看日誌;
會寫簡單的Select、Where、group by等SQL語句;
Hive SQL轉換成MapReduce的大致流程;
Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;
從上面的學習,你已經了解到,HDFS是Hadoop提供的分散式存儲框架,它可以用來存儲海量數據,MapReduce是Hadoop提供的分散式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapReduce,提交運行。
此時,你的」大數據平台」是這樣的:那麼問題來了,海量數據如何到HDFS上呢?
第三章:數據採集把各個數據源的數據採集到Hadoop上。
3.1 HDFS PUT命令
這個在前面你應該已經使用過了。put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。建議熟練掌握。
3.2 HDFS API
HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。
實際環境中一般自己較少編寫程序使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。建議了解原理,會寫Demo。
3.3 Sqoop
Sqoop是一個主要用於Hadoop/Hive與傳統關係型資料庫,Oracle、MySQL、SQLServer等之間進行數據交換的開源框架。就像Hive把SQL翻譯成MapReduce一樣,Sqoop把你指定的參數翻譯成MapReduce,提交到Hadoop運行,完成Hadoop與其他資料庫之間的數據交換。
自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較複雜)。了解Sqoop常用的配置參數和方法。
使用Sqoop完成從MySQL同步數據到HDFS;使用Sqoop完成從MySQL同步數據到Hive表;如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。
3.4 Flume
Flume是一個分散式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關係型資料庫的數據採集和傳輸。Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。
因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。
下載和配置Flume。使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;Flume的配置和使用較為複雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
之所以介紹這個,是因為我們公司目前使用的Hadoop與關係型資料庫數據交換的工具,就是之前基於DataX開發的,非常好用。
可以參考我的博文《異構數據源海量數據交換工具-Taobao DataX 下載和使用》。現在DataX已經是3.0版本,支持很多數據源。你也可以在其之上做二次開發。有興趣的可以研究和使用一下,對比一下它與Sqoop。
第四章:把Hadoop上的數據搞到別處去Hive和MapReduce進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?其實,此處的方法和第三章基本一致的。
HDFS GET命令:把HDFS上的文件GET到本地。需要熟練掌握。
HDFS API:同3.2.
Sqoop:同3.3.使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數據同步到MySQL。
如果你已經按照流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;知道sqoop是HDFS和其他數據源之間的數據交換工具;知道flume可以用作實時的日誌採集。
從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建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什麼是Spark,什麼是SparkSQL。Spark有的核心概念及名詞解釋。SparkSQL和Spark是什麼關係,SparkSQL和Hive是什麼關係。SparkSQL為什麼比Hive跑的快。
5.2 如何部署和運行SparkSQLSpark有哪些部署模式?如何在Yarn上運行SparkSQL?
使用SparkSQL查詢Hive中的表。Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。
關於Spark和SparkSQL,如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
第六章:數據多次利用請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。
在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,儘管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。
為了滿足數據的一次採集、多次消費的需求,這裡要說的便是Kafka。
關於Kafka:什麼是Kafka?Kafka的核心概念及名詞解釋。
如何部署和使用Kafka:使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。使用Java程序自己編寫並運行生產者和消費者程序。Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。
如果你已經認真完整的學習了以上的內容,那麼你應該已經具備以下技能和知識點:為什麼Spark比MapReduce快。使用SparkSQL代替Hive,更快的運行SQL。使用Kafka完成數據的一次收集,多次消費架構。自己可以寫程序完成Kafka的生產者和消費者。
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。大數據學習資料分享群119599574 不管你是小白還是大牛,小編我都挺歡迎,今天的源碼已經上傳到群文件,不定期分享乾貨,包括我自己整理的一份最新的適合2018年學習的大數據開發和零基礎入門教程,歡迎初學和進階中的小夥伴。
推薦閱讀:
※雲棲大會 | 阿里巴巴 CTO 王堅:城市大腦 —— 數據重塑城市未來
※第一章:安裝VMWare
※首屆UBDC全域大數據峰會在京舉辦:全域數據概念受追捧
※今日數據行業日報(2017.6.19)
※人工智慧時代最稀缺的是人才?