Hadoop文檔(2.9.2) - HDFS架構(gòu)

介紹

Hadoop分布式文件系統(tǒng)(HDFS)是一種運(yùn)行在通用硬件上的分布式文件系統(tǒng)。它與傳統(tǒng)的分布式文件系統(tǒng)有很多相似之處骚露,但是也有顯著的不同。HDFS是高容錯的,可以部署在低成本硬件上休建。HDFS提供了對應(yīng)用數(shù)據(jù)的高吞吐量訪問,適用于具有大數(shù)據(jù)集的應(yīng)用哪自。HDFS為了流數(shù)據(jù)訪問放松了一些POSIX的限制丰包。

設(shè)定和目標(biāo)

  • 硬件故障:硬件故障是常態(tài)。一個HDFS實例可能由成百上千個服務(wù)器組成壤巷,每臺服務(wù)器存儲部分?jǐn)?shù)據(jù)。如此大量的組件瞧毙,每個組件都有發(fā)生故障的概率胧华,這意味著總有組件是不工作的。因此宙彪,故障探測矩动,快速,自動回復(fù)一直是HDFS的核心架構(gòu)目標(biāo)释漆。
  • 流數(shù)據(jù)訪問:某些運(yùn)行在HDFS上的應(yīng)用程序需要以流的方式訪問數(shù)據(jù)集悲没。為此,HDFS在批處理上做了更多設(shè)計男图。重點(diǎn)在于數(shù)據(jù)訪問的高吞吐量而不是數(shù)據(jù)訪問的低延遲示姿。
  • 大數(shù)據(jù)集:典型的HDFS文件通常以GB乃至TB計。
  • 簡單的一致性模型:HDFS文件使用的是一次寫入逊笆,多次讀取的訪問模型栈戳。文件一旦創(chuàng)建完畢,除了append和truncate难裆,文件不需要寫入和關(guān)閉子檀。文件可以追加但是無法更新镊掖。這個設(shè)定簡化了數(shù)據(jù)一致性問題從而帶來了高吞吐量的數(shù)據(jù)訪問。
  • 移動計算比移動數(shù)據(jù)更廉價:數(shù)據(jù)與計算過程在同一節(jié)點(diǎn)上無疑可以讓計算效率更高褂痰,尤其是在面對海量數(shù)據(jù)的時候亩进。這么做可以極大的減少網(wǎng)絡(luò)堵塞并提高系統(tǒng)吞吐量。HDFS假定將計算過程移動到數(shù)據(jù)處比將數(shù)據(jù)移動到計算過程處更好缩歪。
  • 跨異構(gòu)硬件和軟件平臺的可移植性:HDFS可以很容易的從一個平臺移植到另一個平臺归薛。

NameNode和DataNode

HDFS是主從結(jié)構(gòu)。一個HDFS集群由一個NameNode和一組DataNode組成驶冒。NameNode是主服務(wù)器苟翻,負(fù)責(zé)管理文件系統(tǒng)命名空間以及客戶端對文件的訪問。DataNode通常每個節(jié)點(diǎn)一個骗污,負(fù)責(zé)管理存儲崇猫。HDFS對外暴露了一個文件系統(tǒng)命名空間并允許用戶數(shù)據(jù)作為文件存儲。在內(nèi)部實現(xiàn)上需忿,一個文件會被分割成一個或多個block诅炉,這些block存儲在一組DataNode上。NameNode負(fù)責(zé)執(zhí)行文件系統(tǒng)命名空間操作屋厘,例如打開涕烧,關(guān)閉,重命名文件和目錄等汗洒。此外NameNode還維護(hù)著block和DataNode之間的映射關(guān)系议纯。DataNode負(fù)責(zé)處理來自客戶端的讀寫請求,并根據(jù)NameNode的指令創(chuàng)建溢谤,刪除瞻凤,備份block。


image

NameNode和DataNode都是運(yùn)行在通用機(jī)器上的軟件世杀。這些機(jī)器通常使用Linux系統(tǒng)阀参。HDFS使用Java構(gòu)建,任何支持Java的機(jī)器都可以運(yùn)行NameNode和DataNode瞻坝。一種典型的集群部署方式是使用一臺機(jī)器運(yùn)行NameNode蛛壳,其它機(jī)器每臺運(yùn)行一個DataNode實例。

文件系統(tǒng)命名空間

HDFS使用傳統(tǒng)的分層文件結(jié)構(gòu)所刀。用戶可以創(chuàng)建目錄并在目錄下存儲文件衙荐。文件系統(tǒng)命名空間結(jié)構(gòu)與傳統(tǒng)文件系統(tǒng)類似,用戶可以創(chuàng)建勉痴,刪除文件赫模,將文件從一個目錄移動到另一個目錄,重命名文件蒸矛。HDFS支持用戶限額和訪問權(quán)限瀑罗。

NameNode維護(hù)整個文件系統(tǒng)命名空間胸嘴,它會記錄任何對命名空間的修改。應(yīng)用程序可以指定HDFS中文件的備份數(shù)量斩祭。文件的拷貝數(shù)稱為該文件的備份因子劣像。這個信息也存儲在NameNode中。

數(shù)據(jù)備份

HDFS可以跨機(jī)器存儲海量文件摧玫。每個文件分成一個block的序列存儲耳奕。為了容錯,文件的block會被備份诬像。每個文件的block大小和備份因子都是可配置的屋群。

文件中所有block的大小是相等的(除了最后一個),而對append和hsync提供可變長block支持后坏挠,用戶可以直接創(chuàng)建一個新block芍躏,不必繼續(xù)填充最后一個block。

應(yīng)用程序可以指定文件的備份數(shù)降狠。備份因子可在文件創(chuàng)建時指定对竣,也可以稍后修改。HDFS的文件都是一次寫入的(除了append和truncate)榜配,并且任何時候都只有一個寫入器否纬。

NameNode決定如何備份block。它周期性的接收來自DataNode的心跳檢測和block報表蛋褥。收到心跳檢測說明DataNode工作正常临燃,block報表包含該DataNode上的所有block。


image

副本安置:第一步

備份文件的位置對HDFS的可用性和性能至關(guān)重要烙心。對備份的優(yōu)化讓HDFS從眾多分布式系統(tǒng)中脫穎而出谬俄。這個工作需要大量的優(yōu)化和經(jīng)驗。機(jī)架感知備份放置策略的目的是提高數(shù)據(jù)的可靠性弃理,可用性和網(wǎng)絡(luò)帶寬利用率。目前的備份放置策略實現(xiàn)是這個方向上的第一步屎蜓。短期目標(biāo)是在生產(chǎn)環(huán)境上對其進(jìn)行驗證痘昌,更多的了解它的行為,為測試和研究更復(fù)雜的策略奠定基礎(chǔ)炬转。

大型HDFS集群的機(jī)器通常隸屬于多個機(jī)架辆苔。兩個不同機(jī)架上的節(jié)點(diǎn)進(jìn)行通信必須通過交換機(jī)。一般來說扼劈,同一機(jī)架機(jī)器之間的網(wǎng)絡(luò)帶寬要優(yōu)于不同機(jī)架機(jī)器間的網(wǎng)絡(luò)帶寬驻啤。

NameNode通過Hadoop Rack Awareness進(jìn)程確定每個DataNode所屬的機(jī)架ID。一個簡單但是并非最優(yōu)的策略是將備份放置在獨(dú)立的機(jī)架上荐吵。這種策略可以避免機(jī)架故障時丟失數(shù)據(jù)骑冗,讀數(shù)據(jù)時也可以利用多個機(jī)架的網(wǎng)絡(luò)帶寬赊瞬。這種策略在集群中平均分配備份文件,這樣組件發(fā)生故障時可以平衡負(fù)載贼涩。但是這種策略會增加寫入成本巧涧,因為數(shù)據(jù)需要跨機(jī)架傳輸。

最常見的情況遥倦,備份因子是3谤绳。HDFS的放置策略是:如果寫入器位于DataNode上,則將副本放置在本地計算機(jī)袒哥,否則隨機(jī)選擇一個DataNode缩筛,另一個副本放置在另一個遠(yuǎn)程機(jī)架的節(jié)點(diǎn)上,最后一個副本放在同一個遠(yuǎn)程機(jī)架的另一個節(jié)點(diǎn)上堡称。這種策略減少了機(jī)架間的寫入流量瞎抛,從而提高寫性能。機(jī)架發(fā)生故障的幾率遠(yuǎn)小于節(jié)點(diǎn)故障幾率粮呢。這種策略并不影響數(shù)據(jù)可靠性和可用性婿失,但是它確實減少了讀操作時的聚合網(wǎng)絡(luò)帶寬,因為一個block被放置到兩個機(jī)架上而不是三個啄寡。這種策略的文件副本并不是均勻的分布在所有機(jī)架上豪硅,副本的三分之一位于一個節(jié)點(diǎn),剩下的三分之二位于另一個機(jī)架上挺物。這種策略可以提高寫性能懒浮,而不會影響數(shù)據(jù)可靠性和讀性能。

如果備份因子大于3识藤,那么第四個和之后的副本隨機(jī)放置砚著,同時要保證副本數(shù)量不能超過機(jī)架的上限(公式:(replicas - 1) / racks + 2)。

由于DataNode不能放置同一個block的多個副本痴昧,所以最大備份因子就是最大DataNode數(shù)稽穆。

在提供了存儲類型和存儲策略的支持之后,除了機(jī)架感知赶撰,NameNode放置副本時也會考慮放置策略舌镶。NameNode首先根據(jù)機(jī)架感知選擇節(jié)點(diǎn),然后根據(jù)備份文件的放置策略檢查該節(jié)點(diǎn)的存儲類型豪娜,如果該候選節(jié)點(diǎn)沒有要求的存儲類型餐胀,NameNode會查找下一個節(jié)點(diǎn)。如果第一輪沒有找到足夠的節(jié)點(diǎn)放置備份瘤载,NameNode會使用后備存儲類型開始第二輪查找否灾。

目前,副本放置策略依然在開發(fā)中鸣奔。

副本選擇

為了減少帶寬消耗和讀延遲墨技,HDFS會嘗試找尋一個離讀請求最近的副本惩阶。如果讀請求節(jié)點(diǎn)所在機(jī)架有這樣一個副本,HDFS就優(yōu)先使用這個副本健提。如果HDFS集群跨越多個數(shù)據(jù)中心琳猫,則本地數(shù)據(jù)中心的副本優(yōu)先于遠(yuǎn)程副本。

安全模式

啟動HDFS時私痹,NameNode會進(jìn)入一種稱為安全模式的特殊狀態(tài)脐嫂。安全模式下數(shù)據(jù)block無法備份。NameNode會從DataNode接收心跳檢測和block報表紊遵。block報表包含該DataNode下所有數(shù)據(jù)block的列表信息账千。每個block都有一個指定的最小備份數(shù)。只有block的最小備份數(shù)登記到NameNode中后暗膜,block才可以備份匀奏。備份登記結(jié)束后,NameNode退出安全模式学搜。這是如果還有block不滿足最小備份數(shù)的條件娃善,NameNode才開始備份這些block。

文件系統(tǒng)元數(shù)據(jù)持久化

HDFS命名空間由NameNode保存瑞佩,NameNode使用一個稱為EditLog的事務(wù)日志記錄對文件系統(tǒng)元數(shù)據(jù)的所有更改聚磺。例如,創(chuàng)建一個新文件會在EditLog中插入一條對應(yīng)記錄炬丸,同樣的瘫寝,修改文件備份因子也會插入一條記錄。NameNode使用本地文件存儲EditLog稠炬。整個文件系統(tǒng)命名空間焕阿,包括文件與block之間的映射關(guān)系,文件系統(tǒng)數(shù)據(jù)等首启,都保存在FsImage文件中暮屡。

NameNode在內(nèi)存中維護(hù)文件系統(tǒng)命名空間和文件block映射關(guān)系的鏡像。當(dāng)NameNode啟動毅桃,或者某個閾值觸發(fā)了檢查點(diǎn)時栽惶,NameNode從磁盤上讀取FsImage和EditLog的內(nèi)容,將所有EditLog中的事務(wù)操作應(yīng)用到FsImage的內(nèi)存鏡像中疾嗅,然后在磁盤上生成一個全新的FsImage。之后可以截斷EditLog呵晨,因為所有事務(wù)都已持久化到FsImage喂江。這個過程稱為檢查點(diǎn)焙蹭。檢查點(diǎn)的目的是通過獲取文件系統(tǒng)元數(shù)據(jù)的快照并保存到FsImage來保證HDFS文件系統(tǒng)元數(shù)據(jù)的一致性。讀取FsImage可能很快论悴,但是持續(xù)編輯FsImage就不同了掖棉。因此我們將操作記錄到EditLog中,而不是直接修改FsImage膀估。在檢查點(diǎn)期間幔亥,所有EditLog操作應(yīng)用到FsImage。檢查點(diǎn)可以按周期觸發(fā)(dfs.namenode.checkpoint.period)察纯,也可以按事務(wù)數(shù)觸發(fā)(dfs.namenode.checkpoint.txns)帕棉。如果兩個屬性都設(shè)置了,第一個滿足的閾值會觸發(fā)檢查點(diǎn)饼记。

DataNode在本地文件系統(tǒng)中存儲HDFS數(shù)據(jù)香伴。DataNode對HDFS文件一無所知,它以block為單位存儲HDFS數(shù)據(jù)具则。DataNode不會在同一個目錄下保存所有文件即纲。相反,它使用啟發(fā)式方法來確定每個目錄的最佳文件數(shù)博肋,并適時創(chuàng)建子目錄低斋。在同一個目錄下創(chuàng)建所有文件并不是最佳選擇,因為本地文件系統(tǒng)可能無法支持一個目錄下的大量文件匪凡。DataNode啟動時膊畴,它會掃描整個本地文件系統(tǒng),生成一個本地文件與數(shù)據(jù)block之間的關(guān)系列表锹雏,將其發(fā)送給NameNode巴比,這個列表稱為block報告。

通信協(xié)議

所有HDFS通信協(xié)議都構(gòu)建在TCP/IP協(xié)議之上礁遵∏峤剩客戶端通過TCP端口與NameNode建立連接,它使用ClientProtocol與NameNode交互佣耐。DataNode使用DataProtocol與NameNode交互政勃。一個RPC抽象封裝了客戶端協(xié)議和DataNode協(xié)議。NameNode從不初始化任何RPC兼砖,它只是響應(yīng)來自的客戶端和DataNode的請求奸远。

健壯性

HDFS的主要目標(biāo)是即使出現(xiàn)故障也可以可靠的存儲數(shù)據(jù)。三種常見的故障分別是:NameNode故障讽挟,DataNode故障和網(wǎng)絡(luò)分區(qū)懒叛。

數(shù)據(jù)磁盤故障,心跳檢測和重備份

DataNode周期性的發(fā)送心跳檢測給NameNode耽梅。網(wǎng)絡(luò)分區(qū)可能導(dǎo)致某些DataNode無法連接NameNode薛窥。NameNode無法收到DataNode的心跳檢測后,它會把這樣的DataNode標(biāo)記為dead,并不在發(fā)送新的I/O請求诅迷。注冊到死亡DataNode上的數(shù)據(jù)對HDFS來說不再可用佩番,也會導(dǎo)致某些block的備份數(shù)少于文件指定的最小備份數(shù)。NameNode持續(xù)追蹤block的備份情況并在必要時初始化備份操作罢杉。重備份的原因是多種多樣的:DataNode不可用趟畏,某個備份文件損壞,DataNode磁盤故障滩租,或者文件的備份因子增大赋秀。

為了避免DataNode狀態(tài)抖動引起的備份風(fēng)暴,標(biāo)記DataNode死亡的超時時間設(shè)置的很長(默認(rèn)超過10分鐘)持际。用戶可以設(shè)置一個更短的時間將DataNode標(biāo)記為陳舊(stale)沃琅,這樣可以避免對性能敏感的工作負(fù)載的陳舊DataNode的讀寫操作。

集群重平衡

HDFS架構(gòu)與數(shù)據(jù)重平衡scheme兼容蜘欲。scheme可以在DataNode的磁盤空間低于某個閾值時將數(shù)據(jù)移動到另一個DataNode上益眉。如果對某個文件的需求特別高,scheme還可以動態(tài)創(chuàng)建額外的副本并平衡到整個集群中姥份。這些數(shù)據(jù)平衡scheme還未實現(xiàn)郭脂。

數(shù)據(jù)完整性

從DataNode中讀取的block可能是損壞的。損壞的原因有多種:磁盤故障澈歉,網(wǎng)絡(luò)故障展鸡,或者軟件問題。HDFS客戶端會對文件內(nèi)容進(jìn)行校驗和檢查埃难。當(dāng)客戶端創(chuàng)建一個HDFS文件時莹弊,它會計算出文件所有block的校驗和并保存在同一個命名空間的一個獨(dú)立的隱藏文件中。當(dāng)客戶單檢索文件時還要檢查對應(yīng)校驗和文件中的值涡尘。如果校驗和不匹配忍弛,客戶端會嘗試該block其它節(jié)點(diǎn)上的副本。

元數(shù)據(jù)磁盤故障

FsImage和EditLog是HDFS的核心數(shù)據(jù)結(jié)構(gòu)考抄。如果它們發(fā)生損壞细疚,HDFS就無法使用了。因此川梅,可以通過配置讓NameNode維護(hù)多個FsImage和EditLog的拷貝疯兼。對兩個文件的修改會同步到所有拷貝中。這種同步操作會降低NameNode的TPS贫途,但是這種犧牲是可接受的吧彪,因為HDFS是數(shù)據(jù)密集,不是元數(shù)據(jù)密集丢早。NameNode重啟時来氧,它會選擇最一致的FsImage和EditLog使用。

另一種減低故障的辦法是使用HA。

快照

(略)

數(shù)據(jù)組織

數(shù)據(jù)block

HDFS的目的是支持大型文件啦扬。HDFS支持一次寫入多次讀取。一個典型的block大小是128MB凫碌。因此扑毡,HDFS文件按照128MB的大小分割,每個block可能分布在不同的節(jié)點(diǎn)上盛险。

備份管道

客戶端向HDFS文件寫入數(shù)據(jù)時瞄摊,如果備份因子是三,NameNode使用備份目標(biāo)選擇算法檢索出一組DataNode苦掘。這個列表是可以存儲副本的DataNode换帜。客戶端先向第一個DataNode寫入數(shù)據(jù)鹤啡,DataNode接收數(shù)據(jù)并將數(shù)據(jù)傳輸?shù)搅斜碇械牡诙€DataNode惯驼。第二個DataNode開始接收數(shù)據(jù)并繼續(xù)傳輸數(shù)據(jù)到第三個DataNode。這樣递瑰,數(shù)據(jù)通過管道從一個DataNode傳輸?shù)较乱粋€祟牲。

可訪問性

(略)

空間回收

文件刪除和恢復(fù)

如果開啟了trash配置,從FS shell中刪除的文件并不會立刻從HDFS中刪除抖部,HDFS將它移動到一個trash目錄(每個用戶都有自己的trash目錄说贝,/user/<username>/.Trash)。只要文件還在trash目錄中就可以快速恢復(fù)慎颗。

最近刪除的文件移動到/user/<username>/.Trash/Current目錄中乡恕,每隔一段時間,HDFS會為這些文件創(chuàng)建檢查點(diǎn)文件(/user/<username>/.Trash/<date>)并刪除舊檢查點(diǎn)文件俯萎。

如果trash中的文件過期了傲宜,NameNode將這些文件從命名空間中刪除。與文件關(guān)聯(lián)的block被釋放讯屈。刪除文件和空間釋放之間可能會有延遲蛋哭。

下面是一個例子,首先創(chuàng)建兩個文件:

$ hadoop fs -mkdir -p delete/test1
$ hadoop fs -mkdir -p delete/test2
$ hadoop fs -ls delete/
Found 2 items
drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:39 delete/test1
drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:40 delete/test2

然后刪除test1涮母,該文件會被移到Trash目錄:

$ hadoop fs -rm -r delete/test1
Moved: hdfs://localhost:8020/user/hadoop/delete/test1 to trash at: hdfs://localhost:8020/user/hadoop/.Trash/Current

接著跳過Trash刪除test2:

$ hadoop fs -rm -r -skipTrash delete/test2
Deleted delete/test2

現(xiàn)在可以查看Trash目錄:

$ hadoop fs -ls .Trash/Current/user/hadoop/delete/
Found 1 items\
drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:39 .Trash/Current/user/hadoop/delete/test1

降低備份因子

文件的備份因子降低后谆趾,NameNode選擇可以刪除的副本,在下次心跳檢測時把信息發(fā)送給DataNode叛本,之后DataNode刪除block并釋放空間沪蓬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市来候,隨后出現(xiàn)的幾起案子跷叉,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件云挟,死亡現(xiàn)場離奇詭異梆砸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)园欣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門帖世,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沸枯,你說我怎么就攤上這事日矫。” “怎么了绑榴?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵哪轿,是天一觀的道長。 經(jīng)常有香客問我翔怎,道長窃诉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任姓惑,我火速辦了婚禮褐奴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘于毙。我一直安慰自己敦冬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布唯沮。 她就那樣靜靜地躺著脖旱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪介蛉。 梳的紋絲不亂的頭發(fā)上萌庆,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音币旧,去河邊找鬼践险。 笑死,一個胖子當(dāng)著我的面吹牛吹菱,可吹牛的內(nèi)容都是我干的巍虫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鳍刷,長吁一口氣:“原來是場噩夢啊……” “哼占遥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起输瓜,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤瓦胎,失蹤者是張志新(化名)和其女友劉穎芬萍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搔啊,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柬祠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了负芋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓶盛。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖示罗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芝硬,我是刑警寧澤蚜点,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站拌阴,受9級特大地震影響绍绘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迟赃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一陪拘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纤壁,春花似錦左刽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秒咨,卻和暖如春喇辽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雨席。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工菩咨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陡厘。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓抽米,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雏亚。 傳聞我的和親對象是個殘疾皇子缨硝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一、目標(biāo) HDFS 全稱hadoop分布式文件系統(tǒng)罢低,其最主要的作用是作為 Hadoop 生態(tài)中各系統(tǒng)的存儲服務(wù)查辩。 ...
    Alukar閱讀 2,460評論 1 18
  • 低質(zhì)量的勤奮宜岛,是偽裝起來的懶惰长踊。 整天從頭到尾忙個不停,自認(rèn)為會是天道酬勤萍倡。勤能補(bǔ)拙是良訓(xùn)身弊,一分辛苦一分才。 然而...
    西山有井閱讀 680評論 2 5
  • 從今天開始 講講藍(lán)色的故事 從落葉講起 窗外的風(fēng)景正好列敲。
    樺風(fēng)閱讀 140評論 0 1
  • 看不懂的書 聽不懂的歌 讀不懂的你 依然好奇 想去你的世界走一走 聽你哼哼歌 想靜靜坐在你身旁 吹吹風(fēng)看看遠(yuǎn)處 想...
    98青鳥閱讀 157評論 0 0