大數據本質也是數據,可是又有了新的特徵,包括數據來源廣、數據格式多樣化(結構化數據、非結構化數據、Excel文件、文本文件等)、數據量大(最少也是TB級別的、甚至多是PB級別)、數據增加速度快等。web
針對以上主要的4個特徵咱們須要考慮如下問題:算法
一、數據來源廣,該如何採集彙總?,對應出現了Sqoop,Cammel,Datax等工具。sql
二、數據採集以後,該如何存儲?,對應出現了GFS,HDFS,TFS等分佈式文件存儲系統。數據庫
三、因爲數據增加速度快,數據存儲就必須能夠水平擴展。編程
四、數據存儲以後,該如何經過運算快速轉化成一致的格式,該如何快速運算出本身想要的結果?服務器
對應的MapReduce這樣的分佈式運算框架解決了這個問題;可是寫MapReduce須要Java代碼量很大,因此出現了Hive,Pig等將SQL轉化成MapReduce的解析引擎;數據結構
普通的MapReduce處理數據只能一批一批地處理,時間延遲太長,爲了實現每輸入一條數據就能獲得結果,因而出現了Storm/JStorm這樣的低時延的流式計算框架;架構
可是若是同時須要批處理和流處理,按照如上就得搭兩個集羣,Hadoop集羣(包括HDFS+MapReduce+Yarn)和Storm集羣,不易於管理,因此出現了Spark這樣的一站式的計算框架,既能夠進行批處理,又能夠進行流處理(實質上是微批處理)。併發
然後Lambda架構,Kappa架構的出現,又提供了一種業務處理的通用架構。app
爲了提升工做效率,加快運速度,出現了一些輔助工具:
Ozzie,azkaban:定時任務調度的工具。
Hue,Zepplin:圖形化任務執行管理,結果查看工具。
Scala語言:編寫Spark程序的最佳語言,固然也能夠選擇用Python。
Python語言:編寫一些腳本時會用到。
Allluxio,Kylin等:經過對存儲的數據進行預處理,加快運算速度的工具。
以上大體就把整個大數據生態裏面用到的工具所解決的問題列舉了一遍,知道了他們爲何而出現或者說出現是爲了解決什麼問題,進行學習的時候就有的放矢了。
1、大數據相關工做介紹
大數據方向的工做目前主要分爲三個主要方向:
大數據工程師
數據分析師
大數據科學家
其餘(數據挖掘等)
2、大數據工程師的技能要求
必須掌握的技能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、學習路徑
假設天天能夠抽出3個小時的有效學習時間,加上週末天天保證10個小時的有效學習時間;
3個月會有(21*3+4*2*10)*3=423小時的學習時間。若是是六個月就是846小時的學習時間,足夠大家去從入門大數據到邁入大數據行業的門檻,有志者事竟成。
四、拓展
大數據是對海量數據進行存儲、計算、統計、分析處理的一系列處理手段,處理的數據量一般是TB級,甚至是PB或EB級的數據,這是傳統數據處理手段所沒法完成的,
其涉及的技術有分佈式計算、高併發處理、高可用處理、集羣、實時性計算等,聚集了當前IT領域熱門流行的IT技術。
大數據入門,須要學習如下這些知識點:
一、Java編程技術
Java編程技術是大數據學習的基礎,Java是一種強類型語言,擁有極高的跨平臺能力,能夠編寫桌面應用程序、Web應用程序、分佈式系統和嵌入式系統應用程序等,是大數據工程師最喜歡的編程工具,所以,想學好大數據,掌握Java基礎是必不可少的。
二、Linux命令
對於大數據開發一般是在Linux環境下進行的,相比Linux操做系統,Windows操做系統是封閉的操做系統,開源的大數據軟件很受限制,所以,想從事大數據開發相關工做,還需掌握Linux基礎操做命令。
三、Hadoop
Hadoop是大數據開發的重要框架,其核心是HDFS和MapReduce,HDFS爲海量的數據提供了存儲,MapReduce爲海量的數據提供了計算,所以,須要重點掌握,除此以外,還須要掌握Hadoop集羣、Hadoop集羣管理、YARN以及Hadoop高級管理等相關技術與操做!
四、Hive
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行,十分適合數據倉庫的統計分析。對於Hive需掌握其安裝、應用及高級操做等。
五、Avro與Protobuf
Avro與Protobuf均是數據序列化系統,能夠提供豐富的數據結構類型,十分適合作數據存儲,還可進行不一樣語言之間相互通訊的數據交換格式,學習大數據,需掌握其具體用法。
六、ZooKeeper
ZooKeeper是Hadoop和Hbase的重要組件,是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組件服務等,在大數據開發中要掌握ZooKeeper的經常使用命令及功能的實現方法。
七、HBase
HBase是一個分佈式的、面向列的開源數據庫,它不一樣於通常的關係數據庫,更適合於非結構化數據存儲的數據庫,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,大數據開發需掌握HBase基礎知識、應用、架構以及高級用法等。
八、phoenix
phoenix是用Java編寫的基於JDBC API操做HBase的開源SQL引擎,其具備動態列、散列加載、查詢服務器、追蹤、事務、用戶自定義函數、二級索引、命名空間映射、數據收集、行時間戳列、分頁查詢、跳躍查詢、視圖以及多租戶的特性,大數據開發需掌握其原理和使用方法。
九、Redis
Redis是一個key-value存儲系統,其出現很大程度補償了memcached這類key/value存儲的不足,在部分場合能夠對關係數據庫起到很好的補充做用,它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便,大數據開發需掌握Redis的安裝、配置及相關使用方法。
十、Flume
Flume是一款高可用、高可靠、分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。大數據開發需掌握其安裝、配置以及相關使用方法。
十一、SSM
SSM框架是由Spring、SpringMVC、MyBatis三個開源框架整合而成,常做爲數據源較簡單的web項目的框架。大數據開發需分別掌握Spring、SpringMVC、MyBatis三種框架的同時,再使用SSM進行整合操做。
十二、Kafka
Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,其在大數據開發應用上的目的是經過Hadoop的並行加載機制來統一線上和離線的消息處理,也是爲了經過集羣來提供實時的消息。大數據開發需掌握Kafka架構原理及各組件的做用和使用方法及相關功能的實現。
1三、Scala
Scala是一門多範式的編程語言,大數據開發重要框架Spark是採用Scala語言設計的,想要學好Spark框架,擁有Scala基礎是必不可少的,所以,大數據開發需掌握Scala編程基礎知識!
1四、Spark
Spark是專爲大規模數據處理而設計的快速通用的計算引擎,其提供了一個全面、統一的框架用於管理各類不一樣性質的數據集和數據源的大數據處理的需求,大數據開發需掌握Spark基礎、SparkJob、Spark RDD、spark job部署與資源分配、Spark shuffle、Spark內存管理、Spark廣播變量、Spark SQL、Spark Streaming以及Spark ML等相關知識。
1五、Azkaban
Azkaban是一個批量工做流任務調度器,可用於在一個工做流內以一個特定的順序運行一組工做和流程,能夠利用Azkaban來完成大數據的任務調度,大數據開發需掌握Azkaban的相關配置及語法規則。
1六、Python與數據分析
Python是面向對象的編程語言,擁有豐富的庫,使用簡單,應用普遍,在大數據領域也有所應用,主要可用於數據採集、數據分析以及數據可視化等,所以,大數據開發需學習必定的Python知識。