什麼是大數據

一、什麼是大數據
進入本世紀以來,尤其是2010年之後,隨着互聯網特別是移動互聯網的發展,數據的增長呈爆炸趨勢,已經很難估計全世界的電子設備中存儲的數據到底有多少,描述數據系統的數據量的計量單位從MB(1MB大約等於一百萬字節)、GB(1024MB)、TB(1024GB),一直向上攀升,目前,PB(等於1024TB)級的數據系統已經很常見,隨着移動個人數據、社交網站、科學計算、證券交易、網站日誌、傳感器網絡數據量的不斷加大,國內擁有的總數據量早已超出 ZB(1ZB=1024EB,1EB=1024PB)級別。
傳統的數據處理方法是:隨着數據量的加大,不斷更新硬件指標,採用更加強大的CPU、更大容量的磁盤這樣的措施,但現實是:數據量增大的速度遠遠超出了單機計算和存儲能力提升的速度。
而“大數據”的處理方法是:採用多機器、多節點的處理大量數據方法,而採用這種新的處理方法,就需要有新的大數據系統來保證,系統需要處理多節點間的通訊協調、數據分隔等一系列問題。
總之,採用多機器、多節點的方式,解決各節點的通訊協調、數據協調、計算協調問題,處理海量數據的方式,就是“大數據”的思維。其特點是,隨着數據量的不斷加大,可以增加機器數量,水平擴展,一個大數據系統,可以多達幾萬臺機器甚至更多。
二、hadoop概述
Hadoop是一個開發和運行處理大規模數據的軟件平臺,是Apache的一個用Java語言實現開源軟件框架,實現在大量計算機組成的集羣中對海量數據進行分佈式計算。
Hadoop框架中最核心設計就是:HDFS和MapReduce。HDFS提供了海量數據的存儲,MapReduce提供了對數據的計算。
Hadoop的發行版除了社區的Apache hadoop外,cloudera,hortonworks,IBM,INTEL,華爲,大快搜索等等都提供了自己的商業版本。商業版主要是提供了專業的技術支持,這對一些大型企業尤其重要。DK.Hadoop是大快深度整合,重新編譯後的HADOOP發行版,可單獨發佈。獨立部署FreeRCH(大快大數據一體化開發框架)時,必需的組件。DK.HADOOP整合集成了NOSQL數據庫,簡化了文件系統與非關係數據庫之間的編程;DK.HADOOP改進了集羣同步系統,使得HADOOP的數據處理更加高效。
三、hadoop開發技術詳解
1、Hadoop運行原理
Hadoop是一個開源的可運行於大規模集羣上的分佈式並行編程框架,其最核心的設計包括:MapReduce和HDFS。基於Hadoop,你可以輕鬆地編寫可處理海量數據的分佈式並行程序,並將其運行於由成百上千個結點組成的大規模計算機集羣上。
基於MapReduce計算模型編寫分佈式並行程序相對簡單,程序員的主要工作就是設計實現Map和Reduce類,其它的並行編程中的種種複雜問題,如分佈式存儲,工作調度,負載平衡,容錯處理,網絡通信等,均由MapReduce框架和HDFS文件系統負責處理,程序員完全不用操心。換句話說程序員只需要關心自己的業務邏輯即可,不必關心底層的通信機制等問題,即可編寫出複雜高效的並行程序。如果說分佈式並行編程的難度足以讓普通程序員望而生畏的話,開源的Hadoop的出現極大的降低了它的門檻。
2、Mapreduce原理
Map-Reduce的處理過程主要涉及以下四個部分:
•Client進程:用於提交Map-reduce任務job;
•JobTracker進程:其爲一個Java進程,其main class爲JobTracker;
•TaskTracker進程:其爲一個Java進程,其main class爲TaskTracker;
•HDFS:Hadoop分佈式文件系統,用於在各個進程間共享Job相關的文件;
其中JobTracker進程作爲主控,用於調度和管理其它的TaskTracker進程, JobTracker可以運行於集羣中任一臺計算機上,通常情況下配置JobTracker進程運行在NameNode節點之上。TaskTracker負責執行JobTracker進程分配給的任務,其必須運行於DataNode上,即DataNode既是數據存儲結點,也是計算結點。JobTracker將Map任務和Reduce任務分發給空閒的TaskTracker,讓這些任務並行運行,並負責監控任務的運行情況。如果某一個TaskTracker出故障了,JobTracker會將其負責的任務轉交給另一個空閒的TaskTracker重新運行。
3、HDFS存儲的機制
Hadoop的分佈式文件系統HDFS是建立在Linux文件系統之上的一個虛擬分佈式文件系統,它由一個管理節點( NameNode )和N個數據節點( DataNode )組成,每個節點均是一臺普通的計算機。在使用上同我們熟悉的單機上的文件系統非常類似,一樣可以建目錄,創建,複製,刪除文件,查看文件內容等。但其底層實現上是把文件切割成Block(塊),然後這些Block分散地存儲於不同的DataNode上,每個Block還可以複製數份存儲於不同的DataNode上,達到容錯容災之目的。NameNode則是整個HDFS的核心,它通過維護一些數據結構,記錄了每一個文件被切割成了多少個Block,這些Block可以從哪些DataNode中獲得,各個DataNode的狀態等重要信息。
HDFS的數據塊
每個磁盤都有默認的數據塊大小,這是磁盤進行讀寫的基本單位.構建於單個磁盤之上的文件系統通過磁盤塊來管理該文件系統中的塊.該文件系統中的塊一般爲磁盤塊的整數倍.磁盤塊一般爲512字節.HDFS也有塊的概念,默認爲64MB(一個map處理的數據大小).HDFS上的文件也被劃分爲塊大小的多個分塊,與其他文件系統不同的是,HDFS中小於一個塊大小的文件不會佔據整個塊的空間.
任務粒度——數據切片(Splits)
把原始大數據集切割成小數據集時,通常讓小數據集小於或等於HDFS中一個Block的大小(缺省是64M),這樣能夠保證一個小數據集位於一臺計算機上,便於本地計算。有M個小數據集待處理,就啓動M個Map任務,注意這M個Map任務分佈於N臺計算機上並行運行,Reduce任務的數量R則可由用戶指定。
HDFS用塊存儲帶來的第一個明顯的好處一個文件的大小可以大於網絡中任意一個磁盤的容量,數據塊可以利用磁盤中任意一個磁盤進行存儲.第二個簡化了系統的設計,將控制單元設置爲塊,可簡化存儲管理,計算單個磁盤能存儲多少塊就相對容易.同時也消除了對元數據的顧慮,如權限信息,可以由其他系統單獨管理。
4、舉一個簡單的例子說明MapReduce的運行機制
以計算一個文本文件中每個單詞出現的次數的程序爲例,<k1,v1>可以是<行在文件中的偏移位置,文件中的一行>,經Map函數映射之後,形成一批中間結果<單詞,出現次數>,而Reduce函數則可以對中間結果進行處理,將相同單詞的出現次數進行累加,得到每個單詞的總的出現次數。
什麼是大數據
5、MapReduce的核心過程----Shuffle['ʃʌfl]和Sort
shuffle是mapreduce的心臟,瞭解了這個過程,有助於編寫效率更高的mapreduce程序和hadoop調優。
Shuffle是指從Map產生輸出開始,包括系統執行排序以及傳送Map輸出到Reducer作爲輸入的過程。如下圖所示:
什麼是大數據
首先從Map端開始分析,當Map開始產生輸出的時候,他並不是簡單的把數據寫到磁盤,因爲頻繁的操作會導致性能嚴重下降,他的處理更加複雜,數據首先是寫到內存中的一個緩衝區,並作一些預排序,以提升效率,如圖:
什麼是大數據

每個Map任務都有一個用來寫入“輸出數據”的“循環內存緩衝區”,這個緩衝區默認大小是100M(可以通過io.sort.mb屬性來設置具體的大小),當緩衝區中的數據量達到一個特定的閥值(io.sort.mb * io.sort.spill.percent,其中io.sort.spill.percent默認是0.80)時,系統將會啓動一個後臺線程把緩衝區中的內容spill到磁盤。在spill過程中,Map的輸出將會繼續寫入到緩衝區,但如果緩衝區已經滿了,Map就會被阻塞直到spill完成。spill線程在把緩衝區的數據寫到磁盤前,會對他進行一個二次排序,首先根據數據所屬的partition排序,然後每個partition中再按Key排序。輸出包括一個索引文件和數據文件,如果設定了Combiner,將在排序輸出的基礎上進行。Combiner就是一個Mini Reducer,它在執行Map任務的節點本身運行,先對Map的輸出作一次簡單的Reduce,使得Map的輸出更緊湊,更少的數據會被寫入磁盤和傳送到Reducer。Spill文件保存在由mapred.local.dir指定的目錄中,Map任務結束後刪除。
每當內存中的數據達到spill閥值的時候,都會產生一個新的spill文件,所以在Map任務寫完他的最後一個輸出記錄的時候,可能會有多個spill文件,在Map任務完成前,所有的spill文件將會被歸併排序爲一個索引文件和數據文件。如圖3所示。這是一個多路歸併過程,最大歸併路數由io.sort.factor控制(默認是10)。如果設定了Combiner,並且spill文件的數量至少是3(由min.num.spills.for.combine屬性控制),那麼Combiner將在輸出文件被寫入磁盤前運行以壓縮數據。
大快大數據平臺(DKH),是大快公司爲了打通大數據生態系統與傳統非大數據公司之間的通道而設計的一站式搜索引擎級,大數據通用計算平臺。傳統公司通過使用DKH,可以輕鬆的跨越大數據的技術鴻溝,實現搜索引擎級的大數據平臺性能。
 DKH,有效的集成了整個HADOOP生態系統的全部組件,並深度優化,重新編譯爲一個完整的更高性能的大數據通用計算平臺,實現了各部件的有機協調。因此DKH相比開源的大數據平臺,在計算性能上有了高達5倍(最大)的性能提升。
 DKH,更是通過大快獨有的中間件技術,將複雜的大數據集羣配置簡化至三種節點(主節點、管理節點、計算節點),極大的簡化了集羣的管理運維,增強了集羣的高可用性、高可維護性、高穩定性。
 DKH,雖然進行了高度的整合,但是仍然保持了開源系統的全部優點,並與開源系統100%兼容,基於開源平臺開發的大數據應用,無需經過任何改動,即可在DKH上高效運行,並且性能會有最高5倍的提升。
DKH標準平臺技術構架圖
什麼是大數據

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