大數據如何學起

國際數據公司IDC預測,到2020年,企業基於大數據計算分析平臺的支出將突破5000億美元,大數據解決方案在未來四年中,幫助全球企業分享大約1.6萬億美元新增收入的數據紅利。數聯尋英近日發佈的首份《大數據人才報告》顯示, 目前全國大數據人才只有46萬,未來3到5年人才缺口達150萬之多。

根據麥肯錫報告, 僅僅在美國市場,2018年大數據人才和高級分析專家的人才缺口將高達19萬。此外美國企業還需要150萬位能夠提出正確問題、運用大數據分析結果的大數據相關管理人才。對於高速發展的大數據行業來說,行業人才的稀缺目前已成爲抑致行業發展的重要因素。人才的稀缺性外加上誘人的高額薪資,使得互聯網行業很多技術人員紛紛想要轉型進入大數據領域,成爲數據科學家、大數據工程師等等。

今天,我們將爲大家介紹大數據工程師所需掌握的技能,讓小夥伴們有個參照。 先來看一個常見的大數據基礎平臺架構圖。

 

互聯網科技發展蓬勃興起,人工智能時代來臨,抓住下一個風口。爲幫助那些往想互聯網方向轉行想學習,卻因爲時間不夠,資源不足而放棄的人。我自己整理的一份最新的大數據進階資料和高級開發教程,大數據學習羣:199加上【427】最後加上210就可以找到組織學習  歡迎進階中和進想深入大數據的小夥伴加入。
 

從這張大數據架構圖上來看,我們發現,一個普通的大數據基礎平臺架構中,分爲數據集成層、文件存儲層、數據存儲層、編程模型層和數據分析層,然後再到上層應用。大數據基礎平臺架構中,往往還會有數據挖掘層和數據可視化層等。 再看這場架構圖。

從以上兩張架構圖我們可以看到,整個大數據基礎平臺架構中,其實是涉及非常多的技術、語言和技能的。下面爲大家一一細表。

一、大數據通用處理平臺

1、SparkSpark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的算法。

其中, RDD是Spark的核心,RDD,全稱爲Resilient Distributed Datasets,是一個容錯的、並行的數據結構,可以讓用戶顯式地將數據存儲到磁盤和內存中,並能控制數據的分區。同時,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學習腦圖。

 

2、FlinkFlink 是一個開源的針對批量數據和流數據的處理引擎,已經發展爲 ASF 的頂級項目之一。Flink 的核心是一個提供了數據分發以及並行化計算的流數據處理引擎,已經支持了 API 化的 SQL 查詢,包括圖操作和機器學習的相關算法。

Flink 是一個針對流數據和批數據的分佈式處理引擎。它主要是由 Java 代碼實現。目前主要還是依靠開源社區的貢獻而發展。對 Flink 而言,其所要處理的主要場景就是流數據,批數據只是流數據的一個極限特例而已。再換句話說,Flink 會把所有任務當成流來處理,這也是其最大的特點。Flink 可以支持本地的快速迭代,以及一些環形的迭代任務。並且 Flink 可以定製化內存管理。

3、Hadoop

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。 用戶可以在不瞭解分佈式底層細節的情況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。 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。

二、分佈式存儲

HDFSHadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有很多共同點。但同時,它和其他的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。

三、資源調度

YarnApache Hadoop YARN (Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處。 YARN的基本思想是將JobTracker的兩個主要功能(資源管理和作業調度/監控)分離,主要方法是創建一個全局的ResourceManager(RM)和若干個針對應用程序的ApplicationMaster(AM)。這裏的應用程序是指傳統的MapReduce作業或作業的DAG(有向無環圖)。

MesosMesos是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的DrillCloudera的ImpalaShark

其中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許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索),您可以使用它。logstash帶有一個web界面,搜索和展示所有日誌。

8.3 Kibana

kibana 也是一個開源和免費的工具,他可以幫助您彙總、分析和搜索重要數據日誌並提供友好的web界面。他可以爲 Logstash 和 ElasticSearch 提供的日誌分析的 Web 界面。

五、消息隊列

 

 

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可以調用的擴展類庫。需要注意的是在您使用擴展類庫時可能需要考慮平臺問題,某些可能不提供跨平臺的實現。

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。

 

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公司發佈的主要面對科學計算、可視化以及交互式程序設計的高科技計算環境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易於使用的視窗環境中,爲科學研究、工程設計以及必須進行有效數值計算的衆多科學領域提供了一種全面的解決方案,並在很大程度上擺脫了傳統非交互式程序設計語言(如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 發佈的大數據工程師技能圖譜來看,想要成爲大數據工程師,除了以上提到的知識點之外,還需要掌握數據可視化、機器學習、算法和雲計算等多個知識點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章