---------大數(shù)據(jù)系列學習之一
網(wǎng)絡上流傳著這么的一句流行語:“萬事不懂問度娘”。自從有了各種搜索引擎,新名詞新技術對大眾而言,已不再神秘。然而,當你搜索“大數(shù)據(jù)”或者“big data solution”等關鍵字時,搜索出的海量相關知識鋪天蓋地,對初學者而言,仍然很難在短時間內(nèi)入門。本文目的,是以傻瓜式提問的方式讓初學者輕松的了解“大數(shù)據(jù)”。
大數(shù)據(jù)的概念
“大數(shù)據(jù)”,是不是----數(shù)據(jù)很大就叫大數(shù)據(jù)?
實際上簡單的這樣理解也沒有錯,在明確定義時,會比較強調(diào)大數(shù)據(jù)的4個V的特性: Volume,Variety,Value,Velocity。也就是:
一、數(shù)據(jù)存儲空間占用大(至PB及以上級別);
二、數(shù)據(jù)類型繁多;
三、價值密度低;
四、處理速度快。
搜索的信息中,你會發(fā)現(xiàn)有某些名詞出現(xiàn)的頻率非常高,心里也隨之會產(chǎn)生一些疑問!癙B是多大?”“Map-Reduce是啥?”“Hadoop是啥?”“大數(shù)據(jù)跟云計算啥關系?跟傳統(tǒng)意義的數(shù)據(jù)庫啥關系?”等等。
這么多的信息量,我們還是按照大數(shù)據(jù)的基本定義,四個V來逐一梳理吧。
從第一個V開始,Volume。
數(shù)據(jù)量很大,到底能達到什么程度呢?先來學習一下數(shù)量級的知識吧。
1KB(Kilobyte 千字節(jié)) = 2^10 B = 1024 B;
1MB(Megabyte 兆字節(jié)) = 2^10 KB = 1024 KB = 2^20 B;
1GB(Gigabyte 吉字節(jié)) = 2^10 MB = 1024 MB = 2^30 B;
1TB(Trillionbyte 太字節(jié)) = 2^10 GB = 1024 GB = 2^40 B;
1PB(Petabyte 拍字節(jié)) = 2^10 TB = 1024 TB = 2^50 B;
1EB(Exabyte 艾字節(jié)) = 2^10 PB = 1024 PB = 2^60 B;
1ZB(Zettabyte 澤字節(jié)) = 2^10 EB = 1024 EB = 2^70 B;
1YB(YottaByte 堯字節(jié)) = 2^10 ZB = 1024 ZB = 2^80 B;
1BB(Brontobyte ) = 2^10 YB = 1024 YB = 2^90 B;
1NB(NonaByte ) = 2^10 BB = 1024 BB = 2^100 B;
1DB(DoggaByte) = 2^10 NB = 1024 NB = 2^110 B;
……
“哇!坑爹啊,整出這么多名詞,跟大數(shù)據(jù)都有關系嗎?需要我們掌握嗎?”別激動!其實,KB,MB,GB我們在日常電腦操作中已經(jīng)經(jīng)常碰到了。甚至TB級的大硬盤,也已經(jīng)應用于家用電腦中了。我們所說的“大數(shù)據(jù)”,目前大多產(chǎn)品還處在了立足PB展望EB的級別。后面的那些什么ZB、YB、BB、NB、DB……等,就暫時先當他們是浮云吧~
第二個V, Variety。
關于這一點,百度百科里是這么說的“網(wǎng)絡日志、視頻、圖片、地理位置信息等等”。從專業(yè)一點的角度,我們可以說“大數(shù)據(jù)”中,可以有結構化數(shù)據(jù),但更多的是大量的非結構化和半結構化數(shù)據(jù)。
結構化和非結構化數(shù)據(jù)是什么意思?
結構化數(shù)據(jù)是指,可以存儲在數(shù)據(jù)庫里,可以用二維表結構來邏輯表達實現(xiàn)的數(shù)據(jù)。
非結構化數(shù)據(jù),是指不方便用數(shù)據(jù)庫二維邏輯表來表現(xiàn)的數(shù)據(jù),包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等。
而半結構化數(shù)據(jù),就是介于完全結構化數(shù)據(jù)(如關系型數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫中的數(shù)據(jù))和完全無結構的數(shù)據(jù)(如聲音、圖像文件等)之間的數(shù)據(jù),HTML文檔就屬于半結構化數(shù)據(jù)。它一般是自描述的,數(shù)據(jù)的結構和內(nèi)容混在一起,沒有明顯的區(qū)分。
上述的描述,其實還是有點不明確。用數(shù)據(jù)模型的列表來看,區(qū)別就更清晰一點了:
第三個V,Value。
價值密度低。以視頻為例,連續(xù)不間斷監(jiān)控過程中,可能有用的數(shù)據(jù)僅僅有一兩秒。
第四個V,Velocity。
處理速度快。如此龐大的數(shù)據(jù)量,需要在短時間內(nèi)迅速響應。所使用的技術,當然是有別于傳統(tǒng)的數(shù)據(jù)挖掘技術的。
釋疑解惑
“梳理完了四個V,咋還是云山霧罩的呢?”
下面來回答幾個初學者可能思考到的問題吧!
針對大數(shù)據(jù)的四個V,有沒有什么對應的技術來應對呢?
目前,查詢“大數(shù)據(jù)”,你會發(fā)現(xiàn)度娘給出的各種信息中,Hadoop這個詞出現(xiàn)的很頻繁。而且,很多廠商提供的產(chǎn)品,也都會打上一個標簽:“**產(chǎn)品已經(jīng)并入Hadoop分布式計算平臺,以及將Hadoop引入**產(chǎn)品!
什么是Hadoop?
Hadoop是由Apache基金會開發(fā)的一個分布式系統(tǒng)基礎架構。它是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架。用戶可以在不了解分布式底層細節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力高速運算和存儲。
Hadoop包含了如下子項目:
1. Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他項目公共內(nèi)容,從0.21開始HDFS和MapReduce被分離為獨立的子項目,其余內(nèi)容為Hadoop Common
2. HDFS: Hadoop 分布式文件系統(tǒng) (Distributed File System) - HDFS (Hadoop Distributed File System)
3. MapReduce:并行計算框架,0.20前使用 org.apache.hadoop.mapred 舊接口,0.20版本開始引入org.apache.hadoop.mapreduce的新API
4. HBase: 類似Google BigTable的分布式NoSQL列數(shù)據(jù)庫。
5. Hive:數(shù)據(jù)倉庫工具,由Facebook貢獻。
6. Zookeeper:分布式鎖設施,提供類似Google Chubby的功能,由Facebook貢獻。
7. Avro:新的數(shù)據(jù)序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。
8. Pig: 大數(shù)據(jù)分析平臺,為用戶提供多種接口。
作為初學者,我們先撥開一些浮云,看看這里面到底有些什么。有三個主體部分,是我們需要重點關注的:HDFS、MapReduce、HBase。
實際上,Apache Hadoop的HDFS是Google File System(GFS)的開源實現(xiàn)。MapReduce是Google MapReduce的開源實現(xiàn)。HBase是Google BigTable的開源實現(xiàn)。
Hadoop是一個能夠讓用戶輕松架構和使用的分布式計算平臺。它主要有以下幾個優(yōu)點:1高可靠性2高擴展性3高效性4高容錯性。用戶可以輕松地在Hadoop上開發(fā)和運行處理海量數(shù)據(jù)的應用程序。而實際上,很多公司提供的大數(shù)據(jù)產(chǎn)品也是基于Hadoop進行開發(fā)的。
數(shù)據(jù)存儲空間占用大
針對數(shù)據(jù)存儲空間占用大,我們需要用到的是“分布式存儲”。分布式存儲系統(tǒng),就是將數(shù)據(jù)分散存儲在多臺獨立的設備上。傳統(tǒng)的網(wǎng)絡存儲系統(tǒng)采用集中的存儲服務器存放所有數(shù)據(jù),存儲服務器成為系統(tǒng)性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規(guī)模存儲應用的需要。分布式網(wǎng)絡存儲系統(tǒng)采用可擴展的系統(tǒng)結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴展。
前面我們介紹到的Hadoop,其中的HDFS就是現(xiàn)今最流行的分布式存儲平臺之一。
HDFS原理簡要描述
HDFS(Hadoop Distributed File System),是一個分布式文件系統(tǒng)。HDFS有著高容錯性(fault-tolerent)的特點,并且設計用來部署在低廉的(low-cost)硬件上。它提供高吞吐量(high throughput)來訪問應用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以實現(xiàn)流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
HDFS是一個主從結構的體系,一個HDFS集群是由一個名字節(jié)點,它是一個管理文件的命名空間和調(diào)節(jié)客戶端訪問文件的主服務器,當然還有的數(shù)據(jù)節(jié)點,一個節(jié)點一個,它來管理存儲。HDFS暴露文件命名空間和允許用戶數(shù)據(jù)存儲成文件。
對外部客戶機而言,HDFS 就像一個傳統(tǒng)的分級文件系統(tǒng)?梢詣(chuàng)建、刪除、移動或重命名文件,等等。
內(nèi)部機制,是將一個文件分割成一個或多個的塊,這些塊存儲在一組數(shù)據(jù)節(jié)點中。名字節(jié)點(NameNode)操作文件命名空間的文件或目錄操作,如打開,關閉,重命名,等等。它同時確定塊與數(shù)據(jù)節(jié)點的映射。數(shù)據(jù)節(jié)點(DataNode)來負責來自文件系統(tǒng)客戶的讀寫請求。數(shù)據(jù)節(jié)點同時還要執(zhí)行塊的創(chuàng)建,刪除,和來自名字節(jié)點的塊復制指示。這與傳統(tǒng)的 RAID 架構大不相同。塊的大。ㄍǔ 64MB)和復制的塊數(shù)量在創(chuàng)建文件時由客戶機決定。NameNode 可以控制所有文件操作。
HDFS 內(nèi)部的所有通信都基于標準的 TCP/IP 協(xié)議。
數(shù)據(jù)類型繁多
大數(shù)據(jù)處理,有如下需求:對數(shù)據(jù)庫高并發(fā)讀寫的需求、對海量數(shù)據(jù)的高效率存儲和訪問的需求、對數(shù)據(jù)庫的高可擴展性和高可用性的需求。傳統(tǒng)的關系型數(shù)據(jù)庫在此類需求面前束手無策。此時,一個新的概念被引入了----NoSQL。
什么是NoSQL?
NoSQL=Not Only SQL,指的是非關系型的數(shù)據(jù)庫。
非關系型數(shù)據(jù)庫以鍵值對存儲,它的結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,這樣就不會局限于固定的結構,可以減少一些時間和空間的開銷。
應該說明的是,NoSQL在處理超大量數(shù)據(jù)時性能卓越,而且可以在PC服務器集群上運行,成本低廉,具有高擴展性和實用性。但是,目前大多數(shù)NoSQL是開源項目,沒有供應商正是支持,而且在數(shù)據(jù)完整性等方面遠不如關系型數(shù)據(jù)庫,企業(yè)級應用不多。
HBASE 的原理簡要介紹,如何存儲非結構化數(shù)據(jù)
HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,HBase在Hadoop平臺內(nèi)的結構化數(shù)據(jù)的分布式存儲系統(tǒng)。HBase與傳統(tǒng)關系型數(shù)據(jù)庫的區(qū)別在于,它是一個適合非結構化數(shù)據(jù)存儲的數(shù)據(jù)庫,而且HBase是基于列而不是基于行的模式。
HBase利用Hadoop HDFS作為其文件存儲系統(tǒng),HBase位于結構化存儲層,HDFS為HBase提供了高可靠性的底層存儲支持;用Hadoop MapReduce來處理海量數(shù)據(jù),MapReduce為HBase提供了高性能的計算能力;用Hadoop Zookeeper作為協(xié)同服務,Zookeeper為HBase提供了穩(wěn)定服務和failover機制。
HBase數(shù)據(jù)模型如下:
Ø Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
Ø Timestamp: 時間戳,每次數(shù)據(jù)操作對應的時間戳,可以看作是數(shù)據(jù)的version number
Ø Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支持動態(tài)擴展,無需預先定義Column的數(shù)量以及類型,所有Column均以二進制格式存儲,用戶需要自行進行類型轉換。
當Table隨著記錄數(shù)不斷增加而變大后,會逐漸分裂成多份splits,成為regions,一個region由[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理。
HBase中有兩張?zhí)厥獾腡able,-ROOT-和.META。
.META.:記錄了用戶表的Region信息,.META.可以有多個regoin
-ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region
Zookeeper中記錄了-ROOT-表的location
Client訪問用戶數(shù)據(jù)之前需要首先訪問zookeeper,然后訪問-ROOT-表,接著訪問.META.表,最后才能找到用戶數(shù)據(jù)的位置去訪問,中間需要多次網(wǎng)絡操作, client端會做cache緩存。
價值密度低
Mapreduce是在大數(shù)據(jù)中挖掘價值的有效方法
把MapReduce單獨列出來,是有必要的,因為它太重要了。MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(化簡)",和他們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。
MapReduce 本身就是用于并行處理大數(shù)據(jù)集的軟件框架。MapReduce 的根源是函數(shù)性編程中的 map 和 reduce 函數(shù)。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函數(shù)接受一組數(shù)據(jù)并將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函數(shù)接受 Map 函數(shù)生成的列表,然后根據(jù)它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。
具體分步驟描述為:
1) 在正式執(zhí)行map函數(shù)前,需要對輸入進行“分片”(就是將海量數(shù)據(jù)分成大概相等的“塊”,hadoop的一個分片默認是64M),以便于多個map同時工作,每一個map任務處理一個“分片”。
2) 分片完畢后,多臺機器就可以同時進行map工作了。map函數(shù)要做的事情,相當于對數(shù)據(jù)進行“預處理”,輸出所要的“鍵值”。map對每條記錄的輸出以
3) 在進入reduce階段之前,還要將各個map中相關的數(shù)據(jù)(key相同的數(shù)據(jù))歸結到一起,發(fā)往一個reducer。這里面就涉及到多個map的輸出“混合地”對應多個reducer的情況,這個過程叫做“洗牌”。
4) 接下來進入reduce階段。相同的key的map輸出會到達同一個reducer。reducer對key相同的多個value進行reduce操作,最后一個key的一串value經(jīng)過reduce函數(shù)的作用后,變成了一個value。
處理速度快
MapReduce除了能挖掘大數(shù)據(jù)價值,同時也是一種分布式/并行計算模型。雖然它是一個很好的抽象,但不能有效地解決計算領域的任何問題。為了滿足大數(shù)據(jù)及時響應的特性,數(shù)據(jù)流計算的研究被提上了日程。實時計算方向重要的一個模塊就是實時數(shù)據(jù)流計算。
在數(shù)據(jù)流模型中,需要處理的輸入數(shù)據(jù)(全部或部分)并不存儲在可隨機訪問的磁盤或內(nèi)存中,但它們卻以一個或多個“連續(xù)數(shù)據(jù)流”的形式到達。數(shù)據(jù)流不同于傳統(tǒng)的存儲關系模型,主要區(qū)別有如下幾個方面:
流中的數(shù)據(jù)元素在線到達;
系統(tǒng)無法控制將要處理的新到達的數(shù)據(jù)元素的順序,無論這些數(shù)據(jù)元素是在一個數(shù)據(jù)流中還是跨多個數(shù)據(jù)流;也即重放的數(shù)據(jù)流可能和上次數(shù)據(jù)流的元素順序不一致;
數(shù)據(jù)流的潛在大小也許是無窮無盡的;
一旦數(shù)據(jù)流中的某個元素經(jīng)過處理,要么被丟棄,要么被歸檔存儲。因此,除非該數(shù)據(jù)被直接存儲在內(nèi)存中,否則將不容易被檢索。相對于數(shù)據(jù)流的大小,這是一種典型的極小相關。
數(shù)據(jù)流模型中的操作并不排除傳統(tǒng)關系型數(shù)據(jù)的存在。通常,數(shù)據(jù)流操作將建立數(shù)據(jù)流和關系型數(shù)據(jù)的聯(lián)系。在數(shù)據(jù)流處理過程中,更新存儲關系的同時可能會產(chǎn)生傳輸處理問題。
近年來,業(yè)界出現(xiàn)了不少實時數(shù)據(jù)流計算系統(tǒng),雖然沒有一個類似于Hadoop的集大成者,但是也都各具特色。由于網(wǎng)絡數(shù)據(jù)的不斷膨脹和用戶需求的不斷涌現(xiàn),近年來互聯(lián)網(wǎng)企業(yè)開始廣泛研究和使用數(shù)據(jù)流處理,誕生了Yahoo! S4、Twitter Storm、IBM StreamBase、Facebook的Puma/Puma2 及學術界開源的Borealis等系統(tǒng)。
大數(shù)據(jù)是云計算嗎?
如果有人問你這句話,你看完本文,可以很自信的回答他“Absolutely!”
為了回答這個問題,我們有需要引入一個概念----云計算是什么。
維基百科給云計算下的定義:云計算將IT相關的能力以服務的方式提供給用戶,允許用戶在不了解提供服務的技術、沒有相關知識以及設備操作能力的情況下,通過Internet獲取需要服務。
中國云計算網(wǎng)將云定義為:云計算是分布式計算(Distributed Computing)、并行計算(Parallel Computing)和網(wǎng)格計算(Grid Computing)的發(fā)展,或者說是這些科學概念的商業(yè)實現(xiàn)。
云計算分為三個層次:基礎設施即服務(IaaS),平臺即服務(PaaS)和軟件即服務(SaaS)。
“在說什么,云啊云啊,好多的云啊,好大的棉花糖啊~~”
云計算的核心技術是海量數(shù)據(jù)分布式存儲和海量數(shù)據(jù)分布式計算,現(xiàn)在云計算系統(tǒng)主要采用Map-Reduce模型。
“Map-Reduce?哪里看到過?”沒錯,在前面對大數(shù)據(jù)的解讀的時候,我們就已經(jīng)明確描述過這一段。終于看到熟悉的內(nèi)容了,無比興奮啊。
實際上,云計算的數(shù)據(jù)存儲技術主要有谷歌的非開源的GFS(Google File System)和 Hadoop 開發(fā)團隊開發(fā)的GFS的開源實現(xiàn)HDFS(Hadoop Distributed File System)。大部分IT廠商,包括yahoo、Intel的“云”計劃采用的都是HDFS的數(shù)據(jù)存儲技術。
通過對簡單的云計算的定義及技術分析,加上前面我們對大數(shù)據(jù)的了解,不難得出結論,大數(shù)據(jù)當然是可以歸為云計算的范疇。
應用領域有哪些?
說些我們熟知的地方吧,哪些我們接觸到的地方用到了Hadoop?
要回答這個問題,舉幾個例子,很容易。在國內(nèi),包括中國移動、百度、網(wǎng)易、淘寶、騰訊、金山和華為等眾多公司都在研究和使用它。
行業(yè)動態(tài)及展望
“大數(shù)據(jù)”的影響,增加了對信息管理專家的需求,甲骨文,IBM,微軟和SAP花了超過15億美元的在軟件智能數(shù)據(jù)管理和分析的專業(yè)公司。這個行業(yè)自身價值超過1000億美元,增長近10%,大數(shù)據(jù)已經(jīng)出現(xiàn),因為我們生活在一個社會中有更多的東西。有46億全球移動電話用戶有1億美元和20億人訪問互聯(lián)網(wǎng);旧,人們比以往任何時候都與數(shù)據(jù)或信息交互。1990年至2005年,全球超過1億人進入中產(chǎn)階級,這意味著越來越多的人,誰收益的這筆錢將成為反過來導致更多的識字信息的增長。思科公司預計,到2013年,在互聯(lián)網(wǎng)上流動的交通量將達到每年667艾字節(jié)。
最早提出“大數(shù)據(jù)”時代已經(jīng)到來的機構是全球知名咨詢公司麥肯錫。麥肯錫在研究報告中指出,數(shù)據(jù)已經(jīng)滲透到每一個行業(yè)和業(yè)務職能領域,逐漸成為重要的生產(chǎn)因素;而人們對于海量數(shù)據(jù)的運用將預示著新一波生產(chǎn)率增長和消費者盈余浪潮的到來。
麥肯錫的報告發(fā)布后,大數(shù)據(jù)迅速成為了計算機行業(yè)爭相傳誦的熱門概念,也引起了金融界的高度關注。隨著大數(shù)據(jù)時代的全面開啟,你是否做好了充分的準備迎接這個時代的到來呢?
作者:華通科技 徐文卓