大數據時代的帶來意味着咱們生活水平的提升算法
大數據時代的三次浪潮?數據庫
在1980年左右,我的計算機開始出現相對來講信息能夠更好的處理了。編程
在1995年左右,互聯網開始普及,爲用戶之間的信息傳輸帶來了很大的便利。安全
到了2010年,信息量開始爆炸,因此出現了物聯網,雲計算,大數據等熱門行業。網絡
是什麼在背後支撐着大數據統領整個世紀呢?數據結構
一個是存儲量增大,另外一個是CPU計算能力的提升,還有一方面是咱們網絡寬帶速度的增長。架構
說到這裏,那什麼是大數據呢?框架
這裏用四化來歸納。機器學習
大量化:數據量的大大增長數據結構和算法
多樣化:數據的類型多樣,也能夠泛泛統稱爲結構化數據和非結構化數據。
價值化:價值密度低可是商業價值高好比說在一個監控視頻中,可能說有用的數據就那一兩秒可是商業價值很大。
快速化:數據的處理速度很是之快。
大數據技術層面分解:
數據採集:利用工具將數據進行抽取,轉換最終加載到數據倉庫或數據集市中,固然也能夠獲取實時採集的數據進行實時處理分析。
數據存儲管理:利用分佈式文件系統,數據倉庫,關係型數據庫等對數據進行存儲管理。
數據處理分析:利用分佈式並行計算結合數據結構和算法對海良數據進行處理分析。最終對數據進行可視化方便人們更好的理解分析數據。
數據隱私和安全:創建隱私數據保護體系來保護我的隱私和數據安全。
兩大核心技術(重點):
分佈式存儲 分佈式計算
GFS/HDFS
HBase MapReduce
NoSQL(鍵值,圖形,文檔數據庫)
NewSQL
大數據計算分爲幾種方式?
現在比較火熱的大數據技術有哪些?
Hadoop,Spark,Flink,Beam等等
Hadoop是什麼鬼?
Hadoop是一個開源框架,可編寫和運行分佈式應用處理大規模數據。 Hadoop框架的核心是HDFS和MapReduce。其中 HDFS 是分佈式文件系統,MapReduce 是分佈式數據處理模型和執行環境。
Hadoop2.0生態系統以下:
Hadoop的核心:
開源於Google的GFS。它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。底層自行百度吧
map任務在執行的過程當中,會將結果存放到內存當中,當內存佔用達到必定的閾值(這個閾值是能夠設置的)時,map會將中間的結果寫入到本地磁盤上,造成臨時文件這個過程叫作溢寫。
map在溢寫的過程當中,會根據指定reduce任務個數分別寫到對應的分區當中,這就是partition過程。每個分區對應的是一個reduce任務。而且在寫的過程當中,進行相應的排序。在溢寫的過程當中還能夠設置conbiner過程,該過程跟reduce產生的結果應該是一致的,所以該過程應用存在必定的限制,須要慎用。
每個map端最後都只存在一個臨時文件做爲reduce的輸入,所以會對中間溢寫到磁盤的多個臨時文件進行合併Merge操做。最後造成一個內部分區的一個臨時文件。
==============================Reduce======================================
首先要實現數據本地化,須要將遠程節點上的map輸出複製到本地。
Merge過程,這個合併過程主要是對不一樣的節點上的map輸出結果進行合併。
不斷的複製和合並以後,最終造成一個輸入文件。Reduce將最終的計算結果存放在HDFS上。
針對MR2是新一代的MR的API。其主要是運行在Yarn的資源管理框架上。
YARN (Yet Another Resource Negotiator,另外一種資源協調者)。它是一種資源調度和管理框架,通俗的來講就是分配底層CPU和內存資源。它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處。
Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據。
她其實就是一個包含了機器學習算法的學習庫。
HBase是Google Bigtable克隆版,HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。
主要解決分佈式環境下的數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。
雅虎開源,他主要是對數據流的處理。
facebook開源,Hive定義了一種相似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行,提供了很大的便利。
Flume是一個可擴展、適合複雜環境的海量日誌收集系統。
Storm能夠方便地在一個計算機集羣中編寫與擴展複雜的實時計算,Storm用於實時處理,就比如 Hadoop 用於批處理。Storm保證每一個消息都會獲得處理,並且它很快——在一個小集羣中,每秒能夠處理數以百萬計的消息。更棒的是你可使用任意編程語言來作開發。
首先附上一張架構圖:
主件介紹:
SparkCore:將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,併爲運行在其上的上層組件提供API。
SparkSQL:Spark Sql 是Spark來操做結構化數據的程序包,可讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。
SparkStreaming: 是Spark提供的實時數據進行流式計算的組件。
MLlib:提供經常使用機器學習算法的實現庫。
GraphX:提供一個分佈式圖計算框架,能高效進行圖計算。
BlinkDB:用於在海量數據上進行交互式SQL的近似查詢引擎。
Tachyon:之內存爲中心高容錯的的分佈式文件系統。
爲何會出現spark?
你們確定知道在2016年左右不少公司紛紛轉向spark,爲何呢?這是由於spark在Hadoop的基礎上作了不少的改善,能夠說是Hadoop升級版。
在Hadoop中會存在一些缺點例如:
表達能力差
磁盤IO開銷大
延遲高
spark:
中間結果輸出:基於MapReduce的計算引擎一般會將中間結果輸出到磁盤上,進行存儲和容錯。出於任務管道承接的,考慮,當一些查詢翻譯到MapReduce任務時,每每會產生多個Stage,而這些串聯的Stage又依賴於底層文件系統(如HDFS)來存儲每個Stage的輸出結果。
Spark是MapReduce的替代方案,並且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。
它的一些應用場景: