獨(dú)家 | 一文讀懂Hadoop(二)HDFS

1. HDFS優(yōu)缺點(diǎn)

1.1 優(yōu)點(diǎn)

1.1.1 高容錯(cuò)性

可以由數(shù)百或數(shù)千個(gè)服務(wù)器機(jī)器組成反浓,每個(gè)服務(wù)器機(jī)器存儲(chǔ)文件系統(tǒng)數(shù)據(jù)的一部分;

數(shù)據(jù)自動(dòng)保存多個(gè)副本南窗;

副本丟失后檢測(cè)故障快速揍很,自動(dòng)恢復(fù)。

1.1.2 適合批處理

移動(dòng)計(jì)算而非數(shù)據(jù)万伤;

數(shù)據(jù)位置暴露給計(jì)算框架窒悔;

數(shù)據(jù)訪問(wèn)的高吞吐量;

運(yùn)行的應(yīng)用程序?qū)ζ鋽?shù)據(jù)集進(jìn)行流式訪問(wèn)敌买。

1.1.3 適合大數(shù)據(jù)處理

典型文件大小為千兆字節(jié)到太字節(jié)简珠;

支持單個(gè)實(shí)例中的數(shù)千萬(wàn)個(gè)文件;

10K+節(jié)點(diǎn)虹钮。

1.1.4 可構(gòu)建在廉價(jià)的機(jī)器上

通過(guò)多副本提高可靠性聋庵;

提供了容錯(cuò)與恢復(fù)機(jī)制膘融。

1.1.5 跨異構(gòu)硬件和軟件平臺(tái)的可移植性強(qiáng)

輕松地從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)。

1.1.6 簡(jiǎn)單一致性模型

應(yīng)用程序需要一次寫(xiě)入多次讀取文件的訪問(wèn)模型祭玉;

除了追加和截?cái)嘀庋跤常恍枰囊褎?chuàng)建,寫(xiě)入和關(guān)閉的文件攘宙;

簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題屯耸,并實(shí)現(xiàn)了高吞吐量數(shù)據(jù)訪問(wèn);

高度可配置蹭劈,具有非常適合于許多安裝的默認(rèn)配置疗绣。大多數(shù)時(shí)候,只需要為非常大的集群調(diào)整配置铺韧。

1.2 缺點(diǎn)

1.2.1 不適合低延遲的數(shù)據(jù)訪問(wèn)

HDFS設(shè)計(jì)更多的是批處理多矮,而不是用戶交互使用。重點(diǎn)在于數(shù)據(jù)訪問(wèn)的高吞吐量哈打,而不是數(shù)據(jù)訪問(wèn)的低延遲塔逃。

1.2.2 不適合小文件存取

占用NameNode大量?jī)?nèi)存;

尋道時(shí)間超過(guò)讀取時(shí)間料仗。

1.2.3 無(wú)法并發(fā)寫(xiě)入湾盗、文件隨即修改

一個(gè)文件只能有一個(gè)寫(xiě)者;

僅支持追加和截?cái)唷?/p>

2. ?基本組成

2.1 Namenode

2.1.1 接受客戶端的讀寫(xiě)服務(wù)

執(zhí)行文件系統(tǒng)命名空間操作立轧,如打開(kāi)格粪,關(guān)閉和重命名文件和目錄。

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

記錄對(duì)文件系統(tǒng)命名空間或其屬性的任何更改氛改。

2.1.3 metadata組成

Metadata是存儲(chǔ)在Namenode上的元數(shù)據(jù)信息帐萎,它存儲(chǔ)到磁盤(pán)的文件名為:fsimage。并且有個(gè)叫edits的文件記錄對(duì)metadata的操作日志胜卤〗迹總體來(lái)說(shuō),fsimage與edits文件記錄了Metadata中的權(quán)限信息和文件系統(tǒng)目錄樹(shù)葛躏、文件包含哪些塊澈段、確定塊到DataNode的映射、Block存放在哪些DataNode上(由DataNode啟動(dòng)時(shí)上報(bào))舰攒。

NameNode將這些信息加載到內(nèi)存并進(jìn)行拼裝均蜜,就成為了一個(gè)完整的元數(shù)據(jù)信息。

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

HDFS支持傳統(tǒng)的分層文件組織芒率。用戶或應(yīng)用程序可以在這些目錄中創(chuàng)建目錄和存儲(chǔ)文件囤耳。文件系統(tǒng)命名空間層次結(jié)構(gòu)與大多數(shù)其他現(xiàn)有文件系統(tǒng)類(lèi)似:可以創(chuàng)建和刪除文件,將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄,或重命名文件充择。HDFS支持用戶配額和訪問(wèn)權(quán)限德玫。但不支持硬鏈接或軟鏈接。

NameNode維護(hù)文件系統(tǒng)命名空間椎麦。對(duì)文件系統(tǒng)命名空間或其屬性的任何更改由NameNode記錄宰僧。應(yīng)用程序可以指定應(yīng)由HDFS維護(hù)的文件的副本數(shù)。文件的副本數(shù)稱(chēng)為該文件的復(fù)制因子观挎。此信息由NameNode存儲(chǔ)琴儿。

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

NameNode的metadata信息在啟動(dòng)后會(huì)加載到內(nèi)存,由于加載到內(nèi)存的數(shù)據(jù)很不安全嘁捷,斷電后就沒(méi)有了造成,因此必須對(duì)內(nèi)存中存放的信息做持久化處理。

Namenode上保存著HDFS的命名空間雄嚣。對(duì)于任何對(duì)文件系統(tǒng)元數(shù)據(jù)產(chǎn)生修改的操作晒屎,Namenode都會(huì)使用一種稱(chēng)為Edits的事務(wù)日志記錄下來(lái)。例如缓升,在HDFS中創(chuàng)建一個(gè)文件鼓鲁,Namenode就會(huì)在Edits中插入一條記錄來(lái)表示;同樣地港谊,修改文件的副本系數(shù)也將往Edits插入一條記錄骇吭。Namenode在本地操作系統(tǒng)的文件系統(tǒng)中存儲(chǔ)這個(gè)Edits。整個(gè)文件系統(tǒng)的命名空間歧寺,包括數(shù)據(jù)塊到文件的映射燥狰、文件的屬性等,都存儲(chǔ)在一個(gè)稱(chēng)為FsImage的文件中成福,這個(gè)文件也是放在Namenode所在的本地文件系統(tǒng)上碾局。

Namenode在內(nèi)存中保存著整個(gè)文件系統(tǒng)的命名空間和文件數(shù)據(jù)塊映射(Blockmap)的映像荆残。這個(gè)關(guān)鍵的元數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)得很緊湊奴艾,因而一個(gè)有4G內(nèi)存的Namenode足夠支撐大量的文件和目錄。當(dāng)Namenode啟動(dòng)時(shí)内斯,它從硬盤(pán)中讀取Edits和FsImage蕴潦,將所有Edits中的事務(wù)作用在內(nèi)存中的FsImage上,并將這個(gè)新版本的FsImage從內(nèi)存中保存到本地磁盤(pán)上俘闯,然后刪除舊的Edits潭苞,因?yàn)檫@個(gè)舊的Edits的事務(wù)都已經(jīng)作用在FsImage上了。這個(gè)過(guò)程稱(chēng)為一個(gè)檢查點(diǎn)(checkpoint)真朗。

Datanode將HDFS數(shù)據(jù)以文件的形式存儲(chǔ)在本地的文件系統(tǒng)中此疹,它并不知道有關(guān)HDFS文件的信息。它把每個(gè)HDFS數(shù)據(jù)塊存儲(chǔ)在本地文件系統(tǒng)的一個(gè)單獨(dú)的文件中。Datanode并不在同一個(gè)目錄創(chuàng)建所有的文件蝗碎,實(shí)際上湖笨,它用試探的方法來(lái)確定每個(gè)目錄的最佳文件數(shù)目,并且在適當(dāng)?shù)臅r(shí)候創(chuàng)建子目錄蹦骑。在同一個(gè)目錄中創(chuàng)建所有的本地文件并不是最優(yōu)的選擇慈省,這是因?yàn)楸镜匚募到y(tǒng)可能無(wú)法高效地在單個(gè)目錄中支持大量的文件。當(dāng)一個(gè)Datanode啟動(dòng)時(shí)眠菇,它會(huì)掃描本地文件系統(tǒng)边败,產(chǎn)生一個(gè)這些本地文件對(duì)應(yīng)的所有HDFS數(shù)據(jù)塊的列表,然后作為報(bào)告發(fā)送到Namenode捎废,這個(gè)報(bào)告就是塊狀態(tài)報(bào)告笑窜。

2.2 SecondaryNameNode

它不是NameNode的備份,但可以作為NameNode的備份缕坎,當(dāng)因?yàn)閿嚯娀蚍?wù)器損壞的情況怖侦,可以用SecondNameNode中已合并的fsimage文件作為備份文件恢復(fù)到NameNode上,但是很有可能丟失掉在合并過(guò)程中新生成的edits信息谜叹。因此不是完全的備份匾寝。

由于NameNode僅在啟動(dòng)期間合并fsimage和edits文件,因此在繁忙的群集上荷腊,edits日志文件可能會(huì)隨時(shí)間變得非常大艳悔。較大編輯文件的另一個(gè)副作用是下一次重新啟動(dòng)NameNode需要更長(zhǎng)時(shí)間。SecondNameNode的主要功能是幫助NameNode合并edits和fsimage文件女仰,從而減少NameNode啟動(dòng)時(shí)間猜年。

2.2.1 SNN執(zhí)行合并時(shí)機(jī)

根據(jù)配置文件配置的時(shí)間間隔fs.checkpoint.period默認(rèn)1小時(shí);

dfs.namenode.checkpoint.txns疾忍,默認(rèn)設(shè)置為1百萬(wàn)乔外,也就是Edits中的事務(wù)條數(shù)達(dá)到1百萬(wàn)就會(huì)觸發(fā)一次合并,即使未達(dá)到檢查點(diǎn)期間一罩。

2.2.2 SNN合并流程



首先生成一個(gè)名叫edits.new的文件用于記錄合并過(guò)程中產(chǎn)生的日志信息杨幼;

當(dāng)觸發(fā)到某一時(shí)機(jī)時(shí)(時(shí)間間隔達(dá)到1小時(shí)或Edits中的事務(wù)條數(shù)達(dá)到1百萬(wàn))時(shí)SecondaryNamenode將edits文件、與fsimage文件從NameNode上讀取到SecondNamenode上聂渊;

將edits文件與fsimage進(jìn)行合并操作差购,合并成一個(gè)fsimage.ckpt文件;

將生成的合并后的文件fsimage.ckpt文件轉(zhuǎn)換到NameNode上汉嗽;

將fsimage.ckpt在NameNode上變成fsimage文件替換NameNode上原有的fsimage文件欲逃,并將edits.new文件上變成edits文件替換NameNode上原有的edits文件。

SNN在hadoop2.x及以上版本在非高可用狀態(tài)時(shí)還存在饼暑,但是在hadoop2.x及以上版本高可用狀態(tài)下SNN就不存在了稳析,在hadoop2.x及以上版本在高可用狀態(tài)下洗做,處于standby狀態(tài)的NameNode來(lái)做合并操作。

2.3 DataNode

管理附加到它們運(yùn)行的節(jié)點(diǎn)的存儲(chǔ)彰居,并允許用戶數(shù)據(jù)存儲(chǔ)在文件中竭望;

在內(nèi)部,文件被分割成一個(gè)或多個(gè)塊(Block)裕菠,并且這些塊被存儲(chǔ)在一組DataNode中咬清;

負(fù)責(zé)提供來(lái)自文件系統(tǒng)客戶端的讀取和寫(xiě)入請(qǐng)求;

執(zhí)行塊創(chuàng)建奴潘,刪除旧烧;

啟動(dòng)DN進(jìn)程的時(shí)候會(huì)向NN匯報(bào)Block信息;

通過(guò)向NN發(fā)送心跳保持與其聯(lián)系(3秒一次)画髓,如果NN10分鐘沒(méi)有收到DN的心跳掘剪,則認(rèn)為DN已經(jīng)丟失,并且復(fù)制其上的Block到其他的DN上奈虾。

2.3.1 HDFS存儲(chǔ)單元(block)

2.3.1.1文件被切分成固定大小的數(shù)據(jù)塊

默認(rèn)數(shù)據(jù)塊大小為64MB(hadoop1.x)夺谁、128MB(hadoop2.x)、256MB(hadoop3.x)肉微,可配置匾鸥;

若文件大小不到一個(gè)塊大小,則單獨(dú)存成一個(gè)block碉纳,block塊是一個(gè)邏輯意義上的概念勿负。文件大小是多少,就占多少空間劳曹。

2.3.1.2 一個(gè)文件存儲(chǔ)方式

按大小被切分成不同的block奴愉,存儲(chǔ)到不同的節(jié)點(diǎn)上;

默認(rèn)情況下铁孵,每個(gè)block都有3個(gè)副本锭硼;

block大小與副本數(shù)通過(guò)client端上傳文件時(shí)設(shè)置,文件上傳成功后副本數(shù)可以變更蜕劝,block size不可變更檀头。

2.3.1.3 設(shè)計(jì)思想

將大文件拆分成256MB的block塊,每個(gè)block塊分別隨機(jī)存放在不同的節(jié)點(diǎn)上熙宇,從而避免了數(shù)據(jù)傾斜的問(wèn)題鳖擒,但是在開(kāi)發(fā)過(guò)程中溉浙,如果算法烫止、程序?qū)懙牟缓茫瑯右矔?huì)出現(xiàn)數(shù)據(jù)傾斜的問(wèn)題戳稽。

2.3.2 數(shù)據(jù)復(fù)

2.3.2.1 數(shù)據(jù)復(fù)制概述

HDFS被設(shè)計(jì)成能夠在一個(gè)大集群中跨機(jī)器可靠地存儲(chǔ)超大文件馆蠕。它將每個(gè)文件存儲(chǔ)成一系列的數(shù)據(jù)塊期升,除了最后一個(gè),所有的數(shù)據(jù)塊都是同樣大小的互躬。為了容錯(cuò)播赁,文件的所有數(shù)據(jù)塊都會(huì)有副本。每個(gè)文件的數(shù)據(jù)塊大小和副本系數(shù)都是可配置的吼渡。應(yīng)用程序可以指定某個(gè)文件的副本數(shù)目容为。副本系數(shù)可以在文件創(chuàng)建的時(shí)候指定,也可以在之后改變寺酪。HDFS中的文件都是一次性寫(xiě)入的坎背,并且嚴(yán)格要求在任何時(shí)候只能有一個(gè)寫(xiě)入者。

Namenode全權(quán)管理數(shù)據(jù)塊的復(fù)制寄雀,它周期性地從集群中的每個(gè)Datanode接收心跳信號(hào)和塊狀態(tài)報(bào)告(Blockreport)得滤。接收到心跳信號(hào)意味著該Datanode節(jié)點(diǎn)工作正常。塊狀態(tài)報(bào)告包含了一個(gè)該Datanode上所有數(shù)據(jù)塊的列表盒犹。


2.3.2.2 Block的副本放置策略

副本的存放是HDFS可靠性和性能的關(guān)鍵懂更。優(yōu)化的副本存放策略是HDFS區(qū)分于其他大部分分布式文件系統(tǒng)的重要特性。這種特性需要做大量的調(diào)優(yōu)急膀,并需要經(jīng)驗(yàn)的積累沮协。HDFS采用一種稱(chēng)為機(jī)架感知(rack-aware)的策略來(lái)改進(jìn)數(shù)據(jù)的可靠性、可用性和網(wǎng)絡(luò)帶寬的利用率卓嫂。目前實(shí)現(xiàn)的副本存放策略只是在這個(gè)方向上的第一步皂股。實(shí)現(xiàn)這個(gè)策略的短期目標(biāo)是驗(yàn)證它在生產(chǎn)環(huán)境下的有效性,觀察它的行為命黔,為實(shí)現(xiàn)更先進(jìn)的策略打下測(cè)試和研究的基礎(chǔ)呜呐。

大型HDFS實(shí)例一般運(yùn)行在跨越多個(gè)機(jī)架的計(jì)算機(jī)組成的集群上,不同機(jī)架上的兩臺(tái)機(jī)器之間的通訊需要經(jīng)過(guò)交換機(jī)悍募。在大多數(shù)情況下蘑辑,同一個(gè)機(jī)架內(nèi)的兩臺(tái)機(jī)器間的帶寬會(huì)比不同機(jī)架的兩臺(tái)機(jī)器間的帶寬大。

通過(guò)一個(gè)機(jī)架感知的過(guò)程坠宴,Namenode可以確定每個(gè)Datanode所屬的機(jī)架id洋魂。一個(gè)簡(jiǎn)單但沒(méi)有優(yōu)化的策略就是將副本存放在不同的機(jī)架上。這樣可以有效防止當(dāng)整個(gè)機(jī)架失效時(shí)數(shù)據(jù)的丟失喜鼓,并且允許讀數(shù)據(jù)的時(shí)候充分利用多個(gè)機(jī)架的帶寬副砍。這種策略設(shè)置可以將副本均勻分布在集群中,有利于當(dāng)組件失效情況下的負(fù)載均衡庄岖。但是豁翎,因?yàn)檫@種策略的一個(gè)寫(xiě)操作需要傳輸數(shù)據(jù)塊到多個(gè)機(jī)架,這增加了寫(xiě)的代價(jià)隅忿。

在大多數(shù)情況下心剥,副本系數(shù)是3邦尊,HDFS的存放策略是將一個(gè)副本存放在本地機(jī)架的節(jié)點(diǎn)上,一個(gè)副本放在同一機(jī)架的另一個(gè)節(jié)點(diǎn)上优烧,最后一個(gè)副本放在不同機(jī)架的節(jié)點(diǎn)上蝉揍。這種策略減少了機(jī)架間的數(shù)據(jù)傳輸,這就提高了寫(xiě)操作的效率畦娄。機(jī)架的錯(cuò)誤遠(yuǎn)遠(yuǎn)比節(jié)點(diǎn)的錯(cuò)誤少又沾,所以這個(gè)策略不會(huì)影響到數(shù)據(jù)的可靠性和可用性。于此同時(shí)熙卡,因?yàn)閿?shù)據(jù)塊只放在兩個(gè)(不是三個(gè))不同的機(jī)架上捍掺,所以此策略減少了讀取數(shù)據(jù)時(shí)需要的網(wǎng)絡(luò)傳輸總帶寬。在這種策略下再膳,副本并不是均勻分布在不同的機(jī)架上挺勿。三分之一的副本在一個(gè)節(jié)點(diǎn)上,三分之二的副本在一個(gè)機(jī)架上喂柒,其他副本均勻分布在剩下的機(jī)架中不瓶,這一策略在不損害數(shù)據(jù)可靠性和讀取性能的情況下改進(jìn)了寫(xiě)的性能。

2.3.2.3 副本選擇

為了降低整體的帶寬消耗和讀取延時(shí)灾杰,HDFS會(huì)盡量讓讀取程序讀取離它最近的副本蚊丐。如果在讀取程序的同一個(gè)機(jī)架上有一個(gè)副本,那么就讀取該副本艳吠。如果一個(gè)HDFS集群跨越多個(gè)數(shù)據(jù)中心麦备,那么客戶端也將首先讀本地?cái)?shù)據(jù)中心的副本。

2.3.2.4 安全模式

NameNode在啟動(dòng)的時(shí)候會(huì)進(jìn)入一個(gè)稱(chēng)為安全模式的特殊狀態(tài)昭娩,它首先將映像文件(fsimage)載入內(nèi)存凛篙,并執(zhí)行編輯日志(edits)中的各項(xiàng)操作;

一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)映射栏渺,則創(chuàng)建一個(gè)新的fsimage文件(這個(gè)操作不需要SecondNameNode來(lái)做)與一個(gè)空的編輯日志呛梆;

此刻namenode運(yùn)行在安全模式,即namenode的文件系統(tǒng)對(duì)于客戶端來(lái)說(shuō)是只讀的磕诊,顯示目錄填物、顯示文件內(nèi)容等,寫(xiě)霎终、刪除滞磺、重命名都會(huì)失敗莱褒;

在此階段namenode搜集各個(gè)datanode的報(bào)告击困,當(dāng)數(shù)據(jù)塊達(dá)到最小副本數(shù)以上時(shí),會(huì)被認(rèn)為是“安全”的保礼,在一定比例的數(shù)據(jù)塊被認(rèn)為是安全的以后(可設(shè)置)沛励,再過(guò)若干時(shí)間,安全模式結(jié)束炮障;

當(dāng)檢測(cè)到副本數(shù)不足數(shù)據(jù)塊時(shí)目派,該塊會(huì)被復(fù)制,直到達(dá)到最小副本數(shù)胁赢,系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode維護(hù)的企蹭,而是以塊列表形式存儲(chǔ)在datanode中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末智末,一起剝皮案震驚了整個(gè)濱河市谅摄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌系馆,老刑警劉巖送漠,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異由蘑,居然都是意外死亡闽寡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)尼酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爷狈,“玉大人销部,你說(shuō)我怎么就攤上這事就缆。” “怎么了一死?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鹿响,是天一觀的道長(zhǎng)羡微。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惶我,這世上最難降的妖魔是什么拷淘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮指孤,結(jié)果婚禮上启涯,老公的妹妹穿的比我還像新娘。我一直安慰自己恃轩,他們只是感情好结洼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叉跛,像睡著了一般松忍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筷厘,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天鸣峭,我揣著相機(jī)與錄音宏所,去河邊找鬼。 笑死摊溶,一個(gè)胖子當(dāng)著我的面吹牛爬骤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莫换,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼霞玄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拉岁?” 一聲冷哼從身側(cè)響起坷剧,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喊暖,沒(méi)想到半個(gè)月后惫企,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陵叽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年雅任,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咨跌。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沪么,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锌半,到底是詐尸還是另有隱情禽车,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布刊殉,位于F島的核電站殉摔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏记焊。R本人自食惡果不足惜逸月,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遍膜。 院中可真熱鬧碗硬,春花似錦、人聲如沸瓢颅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挽懦。三九已至翰意,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冀偶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工醒第, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人进鸠。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓稠曼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親堤如。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒲列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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