欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

hadoopnosql的簡單介紹

什么是NoSQL數(shù)據(jù)庫?

NoSQL,是not only sql,是非關(guān)系數(shù)據(jù)庫,不同于oracle等關(guān)系數(shù)據(jù)庫。hadoop,是分布式解決方案,即為Mapreduce(計算的)和HDFS(文件系統(tǒng)),使用Hadoop和NoSQL可以構(gòu)造海量數(shù)據(jù)解決方案。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站設(shè)計、曲陽網(wǎng)絡(luò)推廣、小程序設(shè)計、曲陽網(wǎng)絡(luò)營銷、曲陽企業(yè)策劃、曲陽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供曲陽建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:chinadenli.net

什么是NoSQL數(shù)據(jù)庫

什么是NoSQL數(shù)據(jù)庫?從名稱“非SQL”或“非關(guān)系型”衍生而來,這些數(shù)據(jù)庫不使用類似SQL的查詢語言,通常稱為結(jié)構(gòu)化存儲。這些數(shù)據(jù)庫自1960年就已經(jīng)存在,但是直到現(xiàn)在一些大公司(例如Google和Facebook)開始使用它們時,這些數(shù)據(jù)庫才流行起來。該數(shù)據(jù)庫最明顯的優(yōu)勢是擺脫了一組固定的列、連接和類似SQL的查詢語言的限制。有時,NoSQL這個名稱也可能表示“不僅僅SQL”,來確保它們可能支持SQL。 NoSQL數(shù)據(jù)庫使用諸如鍵值、寬列、圖形或文檔之類的數(shù)據(jù)結(jié)構(gòu),并且可以如JSON之類的不同格式存儲。

NoSQL與Hadoop的區(qū)別?

NoSQL,是not

only

sql,是非關(guān)系數(shù)據(jù)庫,不同于oracle等關(guān)系數(shù)據(jù)庫。

hadoop,是分布式解決方案,即為Mapreduce(計算的)和HDFS(文件系統(tǒng)),使用Hadoop和NoSQL可以構(gòu)造海量數(shù)據(jù)解決方案。

NoSQL-HDFS-基本概念

Hadoop

文件系統(tǒng):文件系統(tǒng)是用來存儲和管理文件,并且提供文件的查詢、增加、刪除等操作。

直觀上的體驗:在shell窗口輸入 ls 命令,就可以看到當前目錄下的文件夾、文件。

文件存儲在哪里?硬盤

一臺只有250G硬盤的電腦,如果需要存儲500G的文件可以怎么辦?先將電腦硬盤擴容至少250G,再將文件分割成多塊,放到多塊硬盤上儲存。

通過 hdfs dfs -ls 命令可以查看分布式文件系統(tǒng)中的文件,就像本地的ls命令一樣。

HDFS在客戶端上提供了查詢、新增和刪除的指令,可以實現(xiàn)將分布在多臺機器上的文件系統(tǒng)進行統(tǒng)一的管理。

在分布式文件系統(tǒng)中,一個大文件會被切分成塊,分別存儲到幾臺機器上。結(jié)合上文中提到的那個存儲500G大文件的那個例子,這500G的文件會按照一定的大小被切分成若干塊,然后分別存儲在若干臺機器上,然后提供統(tǒng)一的操作接口。

看到這里,不少人可能會覺得,分布式文件系統(tǒng)不過如此,很簡單嘛。事實真的是這樣的么?

潛在問題

假如我有一個1000臺機器組成的分布式系統(tǒng),一臺機器每天出現(xiàn)故障的概率是0.1%,那么整個系統(tǒng)每天出現(xiàn)故障的概率是多大呢?答案是(1-0.1%)^1000=63%,因此需要提供一個容錯機制來保證發(fā)生差錯時文件依然可以讀出,這里暫時先不展開介紹。

如果要存儲PB級或者EB級的數(shù)據(jù),成千上萬臺機器組成的集群是很常見的,所以說分布式系統(tǒng)比單機系統(tǒng)要復雜得多呀。

這是一張HDFS的架構(gòu)簡圖:

client通過nameNode了解數(shù)據(jù)在哪些DataNode上,從而發(fā)起查詢。此外,不僅是查詢文件,寫入文件的時候也是先去請教NameNode,看看應該往哪個DateNode中去寫。

為了某一份數(shù)據(jù)只寫入到一個Datanode中,而這個Datanode因為某些原因出錯無法讀取的問題,需要通過冗余備份的方式來進行容錯處理。因此,HDFS在寫入一個數(shù)據(jù)塊的時候,不會僅僅寫入一個DataNode,而是會寫入到多個DataNode中,這樣,如果其中一個DataNode壞了,還可以從其余的DataNode中拿到數(shù)據(jù),保證了數(shù)據(jù)不丟失。

實際上,每個數(shù)據(jù)塊在HDFS上都會保存多份,保存在不同的DataNode上。這種是犧牲一定存儲空間換取可靠性的做法。

接下來我們來看一下完整的文件寫入的流程:

大文件要寫入HDFS,client端根據(jù)配置將大文件分成固定大小的塊,然后再上傳到HDFS。

讀取文件的流程:

1、client詢問NameNode,我要讀取某個路徑下的文件,麻煩告訴我這個文件都在哪些DataNode上?

2、NameNode回復client,這個路徑下的文件被切成了3塊,分別在DataNode1、DataNode3和DataNode4上

3、client去找DataNode1、DataNode3和DataNode4,拿到3個文件塊,通過stream讀取并且整合起來

文件寫入的流程:

1、client先將文件分塊,然后詢問NameNode,我要寫入一個文件到某個路徑下,文件有3塊,應該怎么寫?

2、NameNode回復client,可以分別寫到DataNode1、DataNode2、DataNode3、DataNode4上,記住,每個塊重復寫3份,總共是9份

3、client找到DataNode1、DataNode2、DataNode3、DataNode4,把數(shù)據(jù)寫到他們上面

出于容錯的考慮,每個數(shù)據(jù)塊有3個備份,但是3個備份快都直接由client端直接寫入勢必會帶來client端過重的寫入壓力,這個點是否有更好的解決方案呢?回憶一下mysql主備之間是通過binlog文件進行同步的,HDFS當然也可以借鑒這個思想,數(shù)據(jù)其實只需要寫入到一個datanode上,然后由datanode之間相互進行備份同步,減少了client端的寫入壓力,那么至于是一個datanode寫入成功即成功,還是需要所有的參與備份的datanode返回寫入成功才算成功,是可靠性配置的策略,當然這個設(shè)置會影響到數(shù)據(jù)寫入的吞吐率,我們可以看到可靠性和效率永遠是“魚和熊掌不可兼得”的。

潛在問題

NameNode確實會回放editlog,但是不是每次都從頭回放,它會先加載一個fsimage,這個文件是之前某一個時刻整個NameNode的文件元數(shù)據(jù)的內(nèi)存快照,然后再在這個基礎(chǔ)上回放editlog,完成后,會清空editlog,再把當前文件元數(shù)據(jù)的內(nèi)存狀態(tài)寫入fsimage,方便下一次加載。

這樣,全量回放就變成了增量回放,但是如果NameNode長時間未重啟過,editlog依然會比較大,恢復的時間依然比較長,這個問題怎么解呢?

SecondNameNode是一個NameNode內(nèi)的定時任務(wù)線程,它會定期地將editlog寫入fsimage,然后情況原來的editlog,從而保證editlog的文件大小維持在一定大小。

NameNode掛了, SecondNameNode并不能替代NameNode,所以如果集群中只有一個NameNode,它掛了,整個系統(tǒng)就掛了。hadoop2.x之前,整個集群只能有一個NameNode,是有可能發(fā)生單點故障的,所以hadoop1.x有本身的不穩(wěn)定性。但是hadoop2.x之后,我們可以在集群中配置多個NameNode,就不會有這個問題了,但是配置多個NameNode,需要注意的地方就更多了,系統(tǒng)就更加復雜了。

俗話說“一山不容二虎”,兩個NameNode只能有一個是活躍狀態(tài)active,另一個是備份狀態(tài)standby,我們看一下兩個NameNode的架構(gòu)圖。

兩個NameNode通過JournalNode實現(xiàn)同步editlog,保持狀態(tài)一致可以相互替換。

因為active的NameNode掛了之后,standby的NameNode要馬上接替它,所以它們的數(shù)據(jù)要時刻保持一致,在寫入數(shù)據(jù)的時候,兩個NameNode內(nèi)存中都要記錄數(shù)據(jù)的元信息,并保持一致。這個JournalNode就是用來在兩個NameNode中同步數(shù)據(jù)的,并且standby NameNode實現(xiàn)了SecondNameNode的功能。

進行數(shù)據(jù)同步操作的過程如下:

active NameNode有操作之后,它的editlog會被記錄到JournalNode中,standby NameNode會從JournalNode中讀取到變化并進行同步,同時standby NameNode會監(jiān)聽記錄的變化。這樣做的話就是實時同步了,并且standby NameNode就實現(xiàn)了SecondNameNode的功能。

優(yōu)點:

缺點:

文章標題:hadoopnosql的簡單介紹
網(wǎng)頁地址:http://chinadenli.net/article26/dsgddcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作營銷型網(wǎng)站建設(shè)網(wǎng)站設(shè)計公司網(wǎng)站導航建站公司虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)