什么是NoSQL?
NoSQL=Not Only SQL,指的是非關系型的數據庫。
非關系型數據庫以鍵值對存儲,它的結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會局限于固定的結構,可以減少一些時間和空間的開銷。
應該說明的是,NoSQL在處理超大量數據時性能卓越,而且可以在PC服務器集群上運行,成本低廉,具有高擴展性和實用性。但是,目前大多數NoSQL是開源項目,沒有供應商正是支持,而且在數據完整性等方面遠不如關系型數據庫,企業級應用不多。
HBASE 的原理簡要介紹,如何存儲非結構化數據
HBase是一個分布式的、面向列的開源數據庫,HBase在Hadoop平臺內的結構化數據的分布式存儲系統。HBase與傳統關系型數據庫的區別在于,它是一個適合非結構化數據存儲的數據庫,而且HBase是基于列而不是基于行的模式。
HBase利用Hadoop HDFS作為其文件存儲系統,HBase位于結構化存儲層,HDFS為HBase提供了高可靠性的底層存儲支持;用Hadoop MapReduce來處理海量數據,MapReduce為HBase提供了高性能的計算能力;用Hadoop Zookeeper作為協同服務,Zookeeper為HBase提供了穩定服務和failover機制。
HBase數據模型如下:
? Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
? Timestamp: 時間戳,每次數據操作對應的時間戳,可以看作是數據的version number
? Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支持動態擴展,無需預先定義Column的數量以及類型,所有Column均以二進制格式存儲,用戶需要自行進行類型轉換。
當Table隨著記錄數不斷增加而變大后,會逐漸分裂成多份splits,成為regions,一個region由[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理。
HBase中有兩張特殊的Table,-ROOT-和.META。
.META.:記錄了用戶表的Region信息,.META.可以有多個regoin
-ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region
Zookeeper中記錄了-ROOT-表的location
Client訪問用戶數據之前需要首先訪問zookeeper,然后訪問-ROOT-表,接著訪問.META.表,最后才能找到用戶數據的位置去訪問,中間需要多次網絡操作, client端會做cache緩存。
價值密度低
Mapreduce是在大數據中挖掘價值的有效方法
把MapReduce單獨列出來,是有必要的,因為它太重要了。MapReduce是一種編程模型,用于大規模數據集(大于1TB)的并行運算。概念“Map(映射)”和“Reduce(化簡)”,和他們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。
MapReduce 本身就是用于并行處理大數據集的軟件框架。MapReduce 的根源是函數性編程中的 map 和 reduce 函數。它由兩個可能包含有許多實例(許多 Map 和 Reduce)的操作組成。Map 函數接受一組數據并將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Reduce 函數接受 Map 函數生成的列表,然后根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。
具體分步驟描述為:
1) 在正式執行map函數前,需要對輸入進行“分片”(就是將海量數據分成大概相等的“塊”,hadoop的一個分片默認是64M),以便于多個map同時工作,每一個map任務處理一個“分片”。
2) 分片完畢后,多臺機器就可以同時進行map工作了。map函數要做的事情,相當于對數據進行“預處理”,輸出所要的“鍵值”。map對每條記錄的輸出以《key,value》對的形式輸出。
3) 在進入reduce階段之前,還要將各個map中相關的數據(key相同的數據)歸結到一起,發往一個reducer。這里面就涉及到多個map的輸出“混合地”對應多個reducer的情況,這個過程叫做“洗牌”。
4) 接下來進入reduce階段。相同的key的map輸出會到達同一個reducer。reducer對key相同的多個value進行reduce操作,最后一個key的一串value經過reduce函數的作用后,變成了一個value。
處理速度快
MapReduce除了能挖掘大數據價值,同時也是一種分布式/并行計算模型。雖然它是一個很好的抽象,但不能有效地解決計算領域的任何問題。為了滿足大數據及時響應的特性,數據流計算的研究被提上了日程。實時計算方向重要的一個模塊就是實時數據流計算。
在數據流模型中,需要處理的輸入數據(全部或部分)并不存儲在可隨機訪問的磁盤或內存中,但它們卻以一個或多個“連續數據流”的形式到達。數據流不同于傳統的存儲關系模型,主要區別有如下幾個方面:
流中的數據元素在線到達;
系統無法控制將要處理的新到達的數據元素的順序,無論這些數據元素是在一個數據流中還是跨多個數據流;也即重放的數據流可能和上次數據流的元素順序不一致;
數據流的潛在大小也許是無窮無盡的;
一旦數據流中的某個元素經過處理,要么被丟棄,要么被歸檔存儲。因此,除非該數據被直接存儲在內存中,否則將不容易被檢索。相對于數據流的大小,這是一種典型的極小相關。
數據流模型中的操作并不排除傳統關系型數據的存在。通常,數據流操作將建立數據流和關系型數據的聯系。在數據流處理過程中,更新存儲關系的同時可能會產生傳輸處理問題。
近年來,業界出現了不少實時數據流計算系統,雖然沒有一個類似于Hadoop的集大成者,但是也都各具特色。由于網絡數據的不斷膨脹和用戶需求的不斷涌現,近年來互聯網企業開始廣泛研究和使用數據流處理,誕生了Yahoo! S4、Twitter Storm、IBM StreamBase、Facebook的Puma/Puma2 及學術界開源的Borealis等系統。
大數據是云計算嗎?
如果有人問你這句話,你看完本文,可以很自信的回答他“Absolutely!”
為了回答這個問題,我們有需要引入一個概念----云計算是什么。
維基百科給云計算下的定義:云計算將IT相關的能力以服務的方式提供給用戶,允許用戶在不了解提供服務的技術、沒有相關知識以及設備操作能力的情況下,通過Internet獲取需要服務。
中國云計算網將云定義為:云計算是分布式計算(Distributed Computing)、并行計算(Parallel Computing)和網格計算(Grid Computing)的發展,或者說是這些科學概念的商業實現。
云計算分為三個層次:基礎設施即服務(IaaS),平臺即服務(PaaS)和軟件即服務(SaaS)。
“在說什么,云啊云啊,好多的云啊,好大的棉花糖啊~~”
云計算的核心技術是海量數據分布式存儲和海量數據分布式計算,現在云計算系統主要采用Map-Reduce模型。
“Map-Reduce?哪里看到過?”沒錯,在前面對大數據的解讀的時候,我們就已經明確描述過這一段。終于看到熟悉的內容了,無比興奮啊。
實際上,云計算的數據存儲技術主要有谷歌的非開源的GFS(Google File System)和 Hadoop 開發團隊開發的GFS的開源實現HDFS(Hadoop Distributed File System)。大部分IT廠商,包括yahoo、Intel的“云”計劃采用的都是HDFS的數據存儲技術。
通過對簡單的云計算的定義及技術分析,加上前面我們對大數據的了解,不難得出結論,大數據當然是可以歸為云計算的范疇。
應用領域有哪些?
說些我們熟知的地方吧,哪些我們接觸到的地方用到了Hadoop?
要回答這個問題,舉幾個例子,很容易。在國內,包括中國移動、百度、網易、淘寶、騰訊、金山和華為等眾多公司都在研究和使用它。
行業動態及展望
“大數據”的影響,增加了對信息管理專家的需求,甲骨文,IBM,微軟和SAP花了超過15億美元的在軟件智能數據管理和分析的專業公司。這個行業自身價值超過1000億美元,增長近10%,大數據已經出現,因為我們生活在一個社會中有更多的東西。有46億全球移動電話用戶有1億美元和20億人訪問互聯網。基本上,人們比以往任何時候都與數據或信息交互。1990年至2005年,全球超過1億人進入中產階級,這意味著越來越多的人,誰收益的這筆錢將成為反過來導致更多的識字信息的增長。思科公司預計,到2013年,在互聯網上流動的交通量將達到每年667艾字節。
最早提出“大數據”時代已經到來的機構是全球知名咨詢公司麥肯錫。麥肯錫在研究報告中指出,數據已經滲透到每一個行業和業務職能領域,逐漸成為重要的生產因素;而人們對于海量數據的運用將預示著新一波生產率增長和消費者盈余浪潮的到來。
麥肯錫的報告發布后,大數據迅速成為了計算機行業爭相傳誦的熱門概念,也引起了金融界的高度關注。隨著大數據時代的全面開啟,你是否做好了充分的準備迎接這個時代的到來呢?
評論
查看更多