前言:mysql
1、背景介紹web
2、大數據介紹算法
正文:sql
1、大數據相關的工做介紹數據庫
2、大數據工程師的技能要求編程
3、大數據學習規劃後端
4、持續學習資源推薦(書籍,博客,網站)性能優化
5、項目案例分析(批處理+實時處理)服務器
大數據學習羣:119599574網絡
本人目前是一名大數據工程師,項目數據50T,日均數據增加20G左右,我的是從Java後端開發,通過3個月的業餘自學成功轉型大數據工程師。
大數據本質也是數據,可是又有了新的特徵,包括數據來源廣、數據格式多樣化(結構化數據、非結構化數據、Excel文件、文本文件等)、數據量大(最少也是TB級別的、甚至多是PB級別)、數據增加速度快等。
針對以上主要的4個特徵咱們須要考慮如下問題:
數據來源廣,該如何採集彙總?,對應出現了Sqoop,Cammel,Datax等工具。
數據採集以後,該如何存儲?,對應出現了GFS,HDFS,TFS等分佈式文件存儲系統。
因爲數據增加速度快,數據存儲就必須能夠水平擴展。
數據存儲以後,該如何經過運算快速轉化成一致的格式,該如何快速運算出本身想要的結果?
對應的MapReduce這樣的分佈式運算框架解決了這個問題;可是寫MapReduce須要Java代碼量很大,因此出現了Hive,Pig等將SQL轉化成MapReduce的解析引擎;
普通的MapReduce處理數據只能一批一批地處理,時間延遲太長,爲了實現每輸入一條數據就能獲得結果,因而出現了Storm/JStorm這樣的低時延的流式計算框架;
可是若是同時須要批處理和流處理,按照如上就得搭兩個集羣,Hadoop集羣(包括HDFS+MapReduce+Yarn)和Storm集羣,不易於管理,因此出現了Spark這樣的一站式的計算框架,既能夠進行批處理,又能夠進行流處理(實質上是微批處理)。
然後Lambda架構,Kappa架構的出現,又提供了一種業務處理的通用架構。
爲了提升工做效率,加快運速度,出現了一些輔助工具:
Ozzie,azkaban:定時任務調度的工具。
Hue,Zepplin:圖形化任務執行管理,結果查看工具。
Scala語言:編寫Spark程序的最佳語言,固然也能夠選擇用Python。
Python語言:編寫一些腳本時會用到。
Allluxio,Kylin等:經過對存儲的數據進行預處理,加快運算速度的工具。
以上大體就把整個大數據生態裏面用到的工具所解決的問題列舉了一遍,知道了他們爲何而出現或者說出現是爲了解決什麼問題,進行學習的時候就有的放矢了。
大數據方向的工做目前主要分爲三個主要方向:
大數據工程師
數據分析師
大數據科學家
其餘(數據挖掘等)
附上大數據工程師技能圖:
必須掌握的技能11條
Java高級(虛擬機、併發)
Linux 基本操做
Hadoop(HDFS+MapReduce+Yarn )
HBase(JavaAPI操做+Phoenix )
Hive(Hql基本操做和原理理解)
Kafka
Storm/JStorm
Scala
Python
Spark (Core+sparksql+Spark streaming )
輔助小工具(Sqoop/Flume/Oozie/Hue等)
高階技能6條
機器學習算法以及mahout庫加MLlib
R語言
Lambda 架構
Kappa架構
Kylin
Alluxio
假設天天能夠抽出3個小時的有效學習時間,加上週末天天保證10個小時的有效學習時間;
3個月會有(21*3+4*2*10)*3=423小時的學習時間。
第一階段(基礎階段)
1)Linux學習—–20小時
Linux操做系統介紹與安裝。
Linux經常使用命令。
Linux經常使用軟件安裝。
Linux網絡。
防火牆。
Shell編程等。
學習以前沒搞清楚的知識
傳統的web應用(LAMP、JavaEE、NODE系等)與大數據什麼關係?
以前一直覺得大數據的東西就是來取代傳統的Web應用的,其實並非這樣;即便是大數據的架構,應用層依然會是傳統的web應用,可是會根據數據特色對數據存儲(結構化數據依然會保存在傳統的關係型數據庫——如MySql,日誌等非結構數據會保存在分佈式文件系統——如Hadoop的HDFS)。
大數據的東西不是取代傳統的web應用,而是對web應用的加強。基於分佈式存儲和分佈式計算,之前單機或者小規模集羣沒法解決的問題,使用了大數據技術以後就能夠解決了,好比日誌等數據當數據量很是大的時候(TB甚至PB),對這些數據的分析在傳統架構上是不可能或者是很是慢的,使用了大數據技術以後就是可能的了——主要是將數據處理經過MapReduce等拆分到不一樣的節點(電腦)上執行,而後將節點上的結果合併,最後生成分析結果。
雲計算和大數據
如今幾乎全部的公司都把本身的產品吹成「雲」...可是真的都是「雲」麼?其實不少都是傳統的web應用部署到阿里雲這些第三方雲平臺吧;還有一部分有本身服務器(通常配置),而後搞個公網ip,部署上去也說本身是「雲」。
Hadoop結構(更新)
下面的內容是在看視頻以前寫的,做爲一些參考吧。
學習歷程
瞭解Hadoop生態系統,瞭解一下生態系統中各模塊的做用,文章後面對各模塊有一些簡單的總結
HDFS
YARN
HBase
MapReduce
Hive
Pig
Mahout
Zookeeper
Sqoop
Flume
Kafka等
瞭解Spark,瞭解Spark比MapReduce的優點,學習RDD編程
Spark SQL
Spark Streaming
Spark Mlib
...
找兩臺電腦搭個Hadoop、Spark集羣,配置Spark開發環境(SBT),運行一些demo例程,典型如WordCount
研究一下MapReduce的WordCount和Spark的WorkCount的代碼,經過對比加深理解
參考以下案例,瞭解大數據應用,熟悉HBase,Hive,Sqoop等
HBase
HBase是一個高可靠、高性能、面向列、可伸縮的分佈式數據庫,是谷歌BigTable的開源實現,主要用來存儲非結構化和半結構化的鬆散數據。HBase的目標是處理很是龐大的表,能夠經過水平擴展的方式,利用廉價計算機集羣處理由超過10億行數據和數百萬列元素組成的數據表
HBase能夠直接使用本地文件系統或者Hadoop做爲數據存儲方式,不過爲了提升數據可靠性和系統的健壯性,發揮HBase處理大數據量等功能,須要使用Hadoop做爲文件系統。與Hadoop同樣,HBase目標主要依靠橫向擴展,經過不斷增長廉價的商用服務器來增長計算和存儲能力。
HIVE
Hive是一個構建於Hadoop頂層的數據倉庫工具,由Facebook公司開發,並在2008年8月開源。Hive在某種程度上能夠看做是用戶編程接口,其自己並不存儲和處理數據,而是依賴HDFS來存儲數據,依賴MapReduce來處理數據。Hive定義了簡單的相似SQL的查詢語言——HiveQL,它與大部分SQL語法兼容,可是,並不徹底支持SQL標準,好比,HiveSQL不支持更新操做,也不支持索引和事務,它的子查詢和鏈接操做也存在不少侷限。
HiveQL語句能夠快速實現簡單的MapReduce任務,這樣用戶經過編寫的HiveQL語句就能夠運行MapReduce任務,沒必要編寫複雜的MapReduce應用程序。對於Java開發工程師而言,就沒必要花費大量精力在記憶常見的數據運算與底層的MapReduce Java API的對應關係上;對於DBA來講,能夠很容易把原來構建在關係數據庫上的數據倉庫應用程序移植到Hadoop平臺上。因此說,Hive是一個能夠有效、合理、直觀地組織和使用數據的分析工具。
Impala
Hive 做爲現有比較流行的數據倉庫分析工具之一,獲得了普遍的應用,可是因爲Hive採用MapReduce 來完成批量數據處理,所以,實時性很差,查詢延遲較高。Impala 做爲新一代開源大數據分析引擎,支持實時計算,它提供了與Hive 相似的功能,並在性能上比Hive高出3~30 倍。Impala 發展勢頭迅猛,甚至有可能會超過Hive 的使用率而成爲Hadoop 上最流行的實時計算平臺。
Hive 與Impala 的不一樣點總結以下:
第一,Hive 比較適合進行長時間的批處理查詢分析,而Impala 適合進行實時交互式SQL 查詢。
第二,Hive 依賴於MapReduce 計算框架,執行計劃組合成管道型的MapReduce 任務模式進行執行,而Impala 則把執行計劃表現爲一棵完整的執行計劃樹,能夠更天然地分發執行計劃到各個Impalad執行查詢。
第三,Hive在執行過程當中,若是內存放不下全部數據,則會使用外存,以保證查詢能順序執行完成,而Impala在遇到內存放不下數據時,不會利用外存,因此,Impala目前處理查詢時會受到必定的限制。
Hive與Impala的相同點總結以下:
第一,Hive與Impala使用相同的存儲數據池,都支持把數據存儲於HDFS和HBase中,其中,HDFS支持存儲TEXT、RCFILE、PARQUET、AVRO、ETC等格式的數據,HBase存儲表中記錄。
第二,Hive與Impala使用相同的元數據。
第三,Hive與Impala中對SQL的解釋處理比較類似,都是經過詞法分析生成執行計劃。
總的來講,Impala的目的不在於替換現有的MapReduce工具,把Hive與Impala配合使用效果最佳,能夠先使用Hive進行數據轉換處理,以後再使用Impala在Hive處理後的結果數據集上進行快速的數據分析。
PIG
Pig 是Hadoop 生態系統的一個組件,提供了相似SQL 的Pig Latin 語言(包含Filter、GroupBy、Join、OrderBy 等操做,同時也支持用戶自定義函數),容許用戶經過編寫簡單的腳原本實現複雜的數據分析,而不須要編寫複雜的MapReduce 應用程序,Pig 會自動把用戶編寫的腳本轉換成MapReduce 做業在Hadoop 集羣上運行,並且具有對生成的MapReduce程序進行自動優化的功能,因此,用戶在編寫Pig 程序的時候,不須要關心程序的運行效率,這就大大減小了用戶編程時間。所以,經過配合使用Pig 和Hadoop,在處理海量數據時就能夠實現事半功倍的效果,比使用Java、C++等語言編寫MapReduce 程序的難度要小不少,而且用更少的代碼量實現了相同的數據處理分析功能。Pig 能夠加載數據、表達轉換數據以及存儲最終結果,所以,在企業實際應用中,Pig一般用於ETL(Extraction、Transformation、Loading)過程,即來自各個不一樣數據源的數據被收集過來之後,採用Pig 進行統一加工處理,而後加載到數據倉庫Hive 中,由Hive 實現對海量數據的分析。須要特別指出的是,每種數據分析工具都有必定的侷限性,Pig 的設計和MapReduce 同樣,都是面向批處理的,所以,Pig 並不適合全部的數據處理任務,特別是當須要查詢大數據集中的一小部分數據時,Pig 仍然須要對整個或絕大部分數據集進行掃描,所以,實現性能不會很好。
Tez
Tez 是Apache 開源的支持DAG 做業的計算框架,經過DAG 做業的方式運行MapReduce 做業,提供了程序運行的總體處理邏輯,就能夠去除工做流當中多餘的Map 階段,減小沒必要要的操做,提高數據處理的性能。Hortonworks把Tez 應用到數據倉庫Hive 的優化中,使得性能提高了約100 倍。如圖15-13 所示,可讓Tez 框架運行在YARN 框架之上,而後讓MapReduce、Pig 和Hive 等計算框架運行在Tez框架之上,從而藉助於Tez 框架實現對MapReduce、Pig 和Hive 等的性能優化,更好地解決現有MapReduce 框架在迭代計算(如PageRank 計算)和交互式計算方面存在的問題。
Tez在解決Hive、Pig延遲大、性能低等問題的思路,是和那些支持實時交互式查詢分析的產品(如Impala、Dremel和Drill等)是不一樣的。Impala、Dremel和Drill的解決問題思路是拋棄MapReduce計算框架,再也不將相似SQL語句的HiveQL或者Pig語句翻譯成MapReduce程序,而是採用與商用並行關係數據庫相似的分佈式查詢引擎,能夠直接從HDFS或者HBase中用SQL語句查詢數據,而不須要把SQL語句轉化成MapReduce任務來執行,從而大大下降了延遲,很好地知足了實時查詢的要求。可是,Tez則不一樣,好比,針對Hive數據倉庫進行優化的「Tez+Hive」解決方案,仍採用MapReduce計算框架,可是對DAG的做業依賴關係進行了裁剪,並將多個小做業合併成一個大做業,這樣,不只計算量減小了,並且寫HDFS次數也會大大減小。
Kafka
Kafka是由LinkedIn公司開發的一種高吞吐量的分佈式發佈訂閱消息系統,用戶經過Kafka系統能夠發佈大量的消息,同時也能實時訂閱消費消息。
在大數據時代涌現的新的日誌收集處理系統(Flume、Scribe等)每每更擅長批量離線處理,而不能較好地支持實時在線處理。相對而言,Kafka能夠同時知足在線實時處理和批量離線處理。
Kafka設計的初衷是構建一個能夠處理海量日誌、用戶行爲和網站運營統計等的數據處理框架
最近幾年,Kafka在大數據生態系統中開始扮演愈來愈重要的做用,在Uber、Twitter、Netflix、LinkedIn、Yahoo、Cisco、Goldman Sachs等公司獲得了大量的應用。目前,在不少公司的大數據平臺中,Kafka一般扮演數據交換樞紐的角色。
在公司的大數據生態系統中,能夠把Kafka做爲數據交換樞紐,不一樣類型的分佈式系統(關係數據庫、NoSQL數據庫、流處理系統、批處理系統等),能夠統一接入到Kafka,實現和Hadoop各個組件之間的不一樣類型數據的實時高效交換,較好地知足各類企業應用需求。
Sqoop
Sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql...)間進行數據的傳遞,能夠將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也能夠將HDFS的數據導進到關係型數據庫中。大數據學習QQ羣119599574