想要成為大數據工程師?你需要掌握以下知識(上)
http://mp.weixin.qq.com/s?src=3×tamp=1478140385&ver=1&signature=XDh44AJ0Er8YeNxFKyl80qTwQyOxseg8ZHWb5CHojFeOPMiAYkuCNVbbmUUlx-7q6KxVCiUEsJwO06suliNywUnZAKylez-JCG8rA-W9E1HDD1oWyCL7tgLVmYwkkujWp8QRjN17FTIlutOZxhq2bw1ngOn8JslQZ5-NNbJOk=
文| 林肯公園
國際數據公司IDC預測,到2020年,企業基于大數據計算分析平臺的支出將突破5000億美元,大數據解決方案在未來四年中,幫助全球企業分享大約1.6萬億美元新增收入的數據紅利。
數聯尋英近日發布的首份《大數據人才報告》顯示,目前全國大數據人才只有46萬,未來3到5年人才缺口達150萬之多。
根據麥肯錫報告,僅僅在美國市場,2018年大數據人才和高級分析專家的人才缺口將高達19萬。此外美國企業還需要150萬位能夠提出正確問題、運用大數據分析結果的大數據相關管理人才。
對于高速發展的大數據行業來說,行業人才的稀缺目前已成為抑致行業發展的重要因素。人才的稀缺性外加上誘人的高額薪資,使得互聯網行業很多技術人員紛紛想要轉型進入大數據領域,成為數據科學家、大數據工程師等等。
今天,我們將為大家介紹大數據工程師所需掌握的技能,讓小伙伴們有個參照。 先來看一個常見的大數據基礎平臺架構圖。
從這張大數據架構圖上來看,我們發現,一個普通的大數據基礎平臺架構中,分為數據集成層、文件存儲層、數據存儲層、編程模型層和數據分析層,然后再到上層應用。
大數據基礎平臺架構中,往往還會有數據挖掘層和數據可視化層等。 再看這場架構圖。
一、大數據通用處理平臺
1、Spark
Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的MapReduce的算法。
同時,RDD還提供了一組豐富的操作來操作這些數據。在這些操作中,諸如map、flatMap、filter等轉換操作實現了monad模式,很好地契合了Scala的集合操作。
除此之外,RDD還提供了諸如join、groupBy、reduceByKey等更為方便的操作(注意,reduceByKey是action,而非transformation),以支持常見的數據運算。 Spark SQL是Spark的一個組件,用于結構化數據的計算。
Spark SQL提供了一個稱為DataFrames的編程抽象,DataFrames可以充當分布式SQL查詢引擎。 Spark Streaming是建立在Spark上的實時計算框架,通過它提供的豐富的API、基于內存的高速執行引擎,用戶可以結合流式、批處理和交互試查詢應用。
Spark Streaming是一種構建在Spark上的實時計算框架,它擴展了Spark處理大規模流式數據的能力。 Spark Streaming的優勢在于:
能運行在100+的結點上,并達到秒級延遲。
使用基于內存的Spark作為執行引擎,具有高效和容錯的特性。
能集成Spark的批處理和交互查詢。
為實現復雜的算法提供和批處理類似的簡單接口。
MLlib 是Spark對常用的機器學習算法的實現庫,同時包括相關的測試和數據生成器。MLlib 目前支持四種常見的機器學習問題:二元分類,回歸,聚類以及協同過濾,同時也包括一個底層的梯度下降優化基礎算法。 下面是Spark學習腦圖。
右鍵點擊可看在線版
你可以通過Spark官網以及Spark 36大數據專區來進一步了解Spark。
2、Flink
Flink 是一個開源的針對批量數據和流數據的處理引擎,已經發展為 ASF 的頂級項目之一。Flink 的核心是一個提供了數據分發以及并行化計算的流數據處理引擎,已經支持了 API 化的 SQL 查詢,包括圖操作和機器學習的相關算法。
再換句話說,Flink 會把所有任務當成流來處理,這也是其最大的特點。Flink 可以支持本地的快速迭代,以及一些環形的迭代任務。并且 Flink 可以定制化內存管理。
3、Hadoop
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。
HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。 其中,
HDFS (分布式文件系統)
Mapreduce(計算框架)
Yarn(資源管理平臺)
Pig(piglatin 語句到 mapreduce 的映射)
Hive(數據倉庫,提供 SQL)
Mahout(機器學習算法的 mapreduce 實現庫)
你可以通過Hadoop官網以及Hadoop 36大數據專區來進一步了解Hadoop。
二、分布式存儲
HDFS
Hadoop分布式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分布式文件系統。它和現有的分布式文件系統有很多共同點。但同時,它和其他的分布式文件系統的區別也是很明顯的。
HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。
三、資源調度
Yarn
Apache Hadoop YARN (Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。
YARN的基本思想是將JobTracker的兩個主要功能(資源管理和作業調度/監控)分離,主要方法是創建一個全局的ResourceManager(RM)和若干個針對應用程序的ApplicationMaster(AM)。這里的應用程序是指傳統的MapReduce作業或作業的DAG(有向無環圖)。
Mesos Mesos是Apache下的開源分布式資源管理框架,它被稱為是分布式系統的內核。Mesos最初是由加州大學伯克利分校的AMPLab開發的,后在Twitter得到廣泛使用。
Mesos的起源于Google的數據中心資源管理系統Borg。Twitter從Google的Borg系統中得到啟發,然后就開發一個類似的資源管理系統來幫助他們擺脫可怕的“失敗之鯨”。
后來他們注意到加州大學伯克利分校AMPLab正在開發的名為Mesos的項目,這個項目的負責人是Ben Hindman,Ben是加州大學伯克利分校的博士研究生。
之后Ben Hindman加入了Twitter,負責開發和部署Mesos。現在Mesos管理著Twitter超過30,0000臺服務器上的應用部署,“失敗之鯨”已成往事。其他公司紛至沓來,也部署了Mesos,比如Airbnb(空中食宿網)、eBay(電子港灣)和Netflix。
四、數據分析/數據倉庫(SQL類)
1、Pig
Apache Pig 是一個高級過程語言,適合于使用 Hadoop 和 MapReduce 平臺來查詢大型半結構化數據集。
通過允許對分布式數據集進行類似 SQL 的查詢,Pig 可以簡化 Hadoop 的使用。本文將探索 Pig 背后的語言,并在一個簡單的 Hadoop 集群中發現其用途。
2、Hive
hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。
其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
3、kylin
Apache Kylin?是一個開源的分布式分析引擎,提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由eBay Inc. 開發并貢獻至開源社區。它能在亞秒內查詢巨大的Hive表。
Apache Kylin 最初由ebay開發,現已經開源至Apache軟件基金會。它是Hadoop之上的SQL查詢接口,是一種高性能的SQL on Hadoop工具。它能在亞秒內查詢巨大的Hive表。
4、Spark SQL
SparkSQL的前身是Shark,給熟悉RDBMS但又不理解MapReduce的技術人員提供快速上手的工具,Hive應運而生,它是當時唯一運行在Hadoop上的SQL-on-Hadoop工具。
但是MapReduce計算過程中大量的中間磁盤落地過程消耗了大量的I/O,降低的運行效率,為了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具開始產生,其中表現較為突出的是:
MapR的Drill
Cloudera的Impala
Shark
其中Shark是伯克利實驗室Spark生態環境的組件之一,它修改了下圖所示的右下角的內存管理、物理計劃、執行三個模塊,并使之能運行在Spark引擎上,從而使得SQL查詢的速度得到10-100倍的提升。
5、Spark DataFrame
Spark發布了最新的1.3.0版本,其中最重要的變化,便是DataFrame這個API的推出。DataFrame讓Spark具備了處理大規模結構化數據的能力,在比原有的RDD轉化方式易用的前提下,計算性能更還快了兩倍。
這一個小小的API,隱含著Spark希望大一統「大數據江湖」的野心和決心。DataFrame像是一條聯結所有主流數據源并自動轉化為可并行處理格式的水渠,通過它Spark能取悅大數據生態鏈上的所有玩家,無論是善用R的數據科學家,慣用SQL的商業分析師,還是在意效率和實時性的統計工程師。
6、Impala
Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數據。
已有的Hive系統雖然也提供了SQL語義,但由于Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以滿足查詢的交互性。相比之下,Impala的最大特點也是最大賣點就是它的快速。
7、Phoenix
Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,并編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對于簡單查詢來說,其性能量級是毫秒,對于百萬級別的行數來說,其性能量級是秒。更多參考官網。
8、ELK Stack
ELK Stack 是 Elasticsearch、Logstash、Kibana 三個開源軟件的組合。在實時數據檢索和分析場合,三者通常是配合共用,而且又都先后歸于 Elastic.co 公司名下,故有此簡稱。
8.1 ElasticSearch
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java開發的,并作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
8.2 Logstash
Logstash是一個完全開源的工具,他可以對你的日志進行收集、分析,并將其存儲供以后使用(如,搜索),您可以使用它。logstash帶有一個web界面,搜索和展示所有日志。
8.3 Kibana
kibana 也是一個開源和免費的工具,他可以幫助您匯總、分析和搜索重要數據日志并提供友好的web界面。他可以為 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面。
五、消息隊列
參考資料:
什么是消息隊列(Message Queue)?
消息隊列設計精要:
1、 Kafka(純日志類,大吞吐量)
是一款分布式消息發布和訂閱的系統,具有高性能和高吞吐率。換個說法即Kafka是一個分布式的,可劃分的,冗余備份的持久性的日志服務。它主要用于處理活躍的流式數據。
2、RocketMQ
分布式消息隊列,是一款分布式、隊列模型的消息中間件。
3、ZeroMQ
是一種基于消息隊列的多線程網絡庫,其對套接字類型、連接處理、幀、甚至路由的底層細節進行抽象,提供跨越多種傳輸協議的套接字。
ZeroMQ是網絡通信中新的一層,介于應用層和傳輸層之間(按照TCP/IP劃分),其是一個可伸縮層,可并行運行,分散在分布式系統間。
4、ActiveMQ
開源的消息隊列軟件,是JMS消息通信規范的一個實現,運行在JVM下,支持多種語言,如JAVA,C++,C#。
5、RabbitMQ
是一個在AMQP基礎上完整的,可復用的企業消息系統。它可以用于大型軟件系統各個模塊之間的高效通信,支持高并發,支持可擴展。
六、流式計算
1、Storm/JStorm
對比Hadoop的批處理,Storm是個實時的、分布式以及具備高容錯的計算系統。同Hadoop一樣Storm也可以處理大批量的數據,然而Storm在保證高可靠性的前提下還可以讓處理進行的更加實時;也就是說,所有的信息都會被處理。
Storm同樣還具備容錯和分布計算這些特性,這就讓Storm可以擴展到不同的機器上進行大批量的數據處理。他同樣還有以下的這些特性:
· 易于擴展:對于擴展,伴隨著業務的發展,我們的數據量、計算量可能會越來越大,所以希望這個系統是可擴展的。你只需要添加機器和改變對應的topology(拓撲)設置。Storm使用Hadoop Zookeeper進行集群協調,這樣可以充分的保證大型集群的良好運行。
· 每條信息的處理都可以得到保證。
· Storm集群管理簡易。
· Storm的容錯機能:一旦topology遞交,Storm會一直運行它直到topology被廢除或者被關閉。而在執行中出現錯誤時,也會由Storm重新分配任務。這是分布式系統中通用問題。一個節點掛了不能影響我的應用。
· 低延遲。都說了是實時計算系統了,延遲是一定要低的。
· 盡管通常使用Java,Storm中的topology可以用任何語言設計。
2、Spark Streaming
Spark Streaming是一種構建在Spark上的實時計算框架,它擴展了Spark處理大規模流式數據的能力。
Spark Streaming的優勢在于:
· 能運行在100+的結點上,并達到秒級延遲。
· 使用基于內存的Spark作為執行引擎,具有高效和容錯的特性。
· 能集成Spark的批處理和交互查詢。
· 為實現復雜的算法提供和批處理類似的簡單接口。
基于云梯Spark Streaming總體架構
Spark on Yarn啟動后,由Spark AppMaster把Receiver作為一個Task提交給某一個Spark Executor;Receive啟動后輸入數據,生成數據塊,然后通知Spark AppMaster;Spark AppMaster會根據數據塊生成相應的Job,并把Job的Task提交給空閑Spark Executor 執行。
圖中藍色的粗箭頭顯示被處理的數據流,輸入數據流可以是磁盤、網絡和HDFS等,輸出可以是HDFS,數據庫等。
3、Flink
Flink 是一個針對流數據和批數據的分布式處理引擎。它主要是由 Java 代碼實現。對 Flink 而言,其所要處理的主要場景就是流數據,批數據只是流數據的一個極限特例而已。
再換句話說,Flink 會把所有任務當成流來處理,這也是其最大的特點。
Flink 可以支持本地的快速迭代,以及一些環形的迭代任務。并且 Flink 可以定制化內存管理。在這點,如果要對比 Flink 和 Spark 的話,Flink 并沒有將內存完全交給應用層。
這也是為什么 Spark 相對于 Flink,更容易出現 OOM 的原因(out of memory)。就框架本身與應用場景來說,Flink 更相似與 Storm。
Flink 架構圖
七、日志收集
1、Scribe
Scribe是Facebook開源的日志收集系統,在Facebook內部已經得到的應用。它能夠從各種日志源上收集日志,存儲到一個中央存儲系統(可以是NFS,分布式文件系統等)上,以便于進行集中統計分析處理。
它為日志的“分布式收集,統一處理”提供了一個可擴展的,高容錯的方案。當中央存儲系統的網絡或者機器出現故障時,scribe會將日志轉存到本地或者另一個位置,當中央存儲系統恢復后,scribe會將轉存的日志重新傳輸給中央存儲系統。
其通常與Hadoop結合使用,scribe用于向HDFS中push日志,而Hadoop通過MapReduce作業進行定期處理。
2、Flume
Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。
當前Flume有兩個版本Flume 0.9X版本的統稱Flume-og,Flume1.X版本的統稱Flume-ng。由于Flume-ng經過重大重構,與Flume-og有很大不同,使用時請注意區分。
編程語言
1、Java
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等 。
詳細請參考Java官網。
2、Python
Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議 。
Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。
Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。
常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然后對其中[2] 有特別要求的部分,用更合適的語言改寫。
比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調用的擴展類庫。
需要注意的是在您使用擴展類庫時可能需要考慮平臺問題,某些可能不提供跨平臺的實現。
詳細請參考Python官網和36大數據Python專區。
3、R
R是一種用于統計計算的編程語言,由奧克蘭大學的Ross Ihaka 和 Robert Gentleman發明。如今被廣泛地使用于統計分析、數據挖掘等方向。
R是用于統計分析、繪圖的語言和操作環境。R是屬于GNU系統的一個自由、免費、源代碼開放的軟件,它是一個用于統計計算和統計制圖的優秀工具。
R 是統計領域廣泛使用的誕生于1980年左右的 S 語言的一個分支。R是S語言的一種實現。S語言是由 AT&T貝爾實驗室開發的一種用來進行數據探索、統計分析、作圖的解釋型語言。
最初S語言的實現版本主要是S-PLUS。S-PLUS是一個商業軟件,它基于S語言,并由MathSoft公司的統計科學部進一步完善。后來Auckland大學的Robert Gentleman 和 Ross Ihaka 及其他志愿人員開發了一個R系統。
R的使用與S-PLUS有很多類似之處,兩個軟件有一定的兼容性。
S-PLUS的使用手冊,只要經過不多的修改就能成為 R的使用手冊。所以有人說:R,是S-PLUS的一個“克隆”。但是請不要忘了:R is free。
詳細請參見R官網和36大數據R專區。
4、Ruby
Ruby,一種簡單快捷的面向對象(面向對象程序設計)腳本語言,在20世紀90年代由日本人松本行弘(Yukihiro Matsumoto)開發,遵守GPL協議和Ruby License。
它的靈感與特性來自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 語言。
Ruby明顯比其他類似的編程語言(如Perl或Python)年輕,又因為Ruby是日本人發明的,所以早期的非日文資料和程序都比較貧乏,所以在網上仍然可以找到類似“Ruby的資料太少”之類的批評。
約于2000年,Ruby開始進入美國,英文的資料開始發展。Ruby歸根結底源于Perl和Python兩類語言,與C,C++,C#,java是不同大類。
5、Scala
Scala是一門多范式的編程語言,一種類似java的編程語言[1] ,設計初衷是實現可伸縮的語言[2] 、并集成面向對象編程和函數式編程的各種特性。Scala編程語言抓住了很多開發者的眼球。
如果你粗略瀏覽Scala的網站,你會覺得Scala是一種純粹的面向對象編程語言,而又無縫地結合了命令式編程和函數式編程風格。
數據分析挖掘
1、MATLAB
MATLAB 是美國MathWorks公司出品的商業數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。
MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)。是由美國mathworks公司發布的主要面對科學計算、可視化以及交互式程序設計的高科技計算環境。
它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案。
MATLAB在很大程度上擺脫了傳統非交互式程序設計語言(如C、Fortran)的編輯模式,代表了當今國際科學計算軟件的先進水平。
MATLAB和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。
MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。
2、SPSS
SPSS(Statistical Product and Service Solutions),“統計產品與服務解決方案”軟件。最初軟件全稱為“社會科學統計軟件包”(SolutionsStatistical Package for the Social Sciences)。
隨著SPSS產品服務領域的擴大和服務深度的增加,SPSS公司已于2000年正式將英文全稱更改為“統計產品與服務解決方案”,這標志著SPSS的戰略方向正在做出重大調整。
SPSS為IBM公司推出的一系列用于統計學分析運算、數據挖掘、預測分析和決策支持任務的軟件產品及相關服務的總稱,有Windows和Mac OS X等版本。
SPSS是世界上最早的統計分析軟件,由美國斯坦福大學的三位研究生Norman H. Nie、C. Hadlai (Tex) Hull 和 Dale H. Bent于1968年研究開發成功,同時成立了SPSS公司,并于1975年成立法人組織、在芝加哥組建了SPSS總部。
2009年7月28日,IBM公司宣布將用12億美元現金收購統計分析軟件提供商SPSS公司。如今SPSS已出至版本22.0,而且更名為IBM SPSS。迄今,SPSS公司已有40余年的成長歷史。
3、SAS
SAS(全稱STATISTICAL ANALYSIS SYSTEM,簡稱SAS)是全球最大的軟件公司之一,是由美國NORTH CAROLINA州立大學1966年開發的統計分析軟件。
1976年SAS軟件研究所(SAS INSTITUTE INC。)成立,開始進行SAS系統的維護、開發、銷售和培訓工作。期間經歷了許多版本,并經過多年來的完善和發展,SAS系統在國際上已被譽為統計分析的標準軟件,在各個領域得到廣泛應用。
根據StuQ 發布的大數據工程師技能圖譜來看,想要成為大數據工程師,除了以上提到的知識點之外,還需要掌握數據可視化、機器學習、算法和云計算等多個知識點。今天先為大家介紹到這里,下一篇文章我們將會繼續為你介紹。
參考:
大數據工程師技能圖譜
一共81個,開源大數據處理工具匯總(上)
一共81個,開源大數據處理工具匯總(下),包括日志收集系統/集群管理/RPC等
33款可用來抓數據的開源爬蟲軟件工具
由于微信文中不能放鏈接,更多詳情請閱讀全文。
End.