Hadoop 學(xué)習(xí)系列(三)之 YARN 詳細(xì)解析

原文地址:http://pengtuo.tech/2018/09/22/yarn-architecture/

一球订、YARN 初識(shí)

Apache Hadoop YARN 是開源 Hadoop 分布式處理框架中的資源管理和作業(yè)調(diào)度技術(shù)。作為 Apache Hadoop 的核心組件之一瑰钮,YARN 負(fù)責(zé)將系統(tǒng)資源分配給在 Hadoop 集群中運(yùn)行的各種應(yīng)用程序冒滩,并調(diào)度要在不同集群節(jié)點(diǎn)上執(zhí)行的任務(wù)。

YARN 的基本思想是將資源管理和作業(yè)調(diào)度/監(jiān)視的功能分解為單獨(dú)的 daemon(守護(hù)進(jìn)程)浪谴,其擁有一個(gè)全局 ResourceManager(RM) 和每個(gè)應(yīng)用程序的 ApplicationMaster(AM)开睡。應(yīng)用程序可以是單個(gè)作業(yè),也可以是作業(yè)的 DAG苟耻。

ResourceManager和 NodeManager構(gòu)成了數(shù)據(jù)計(jì)算框架篇恒。 ResourceManager 是在系統(tǒng)中的所有應(yīng)用程序之間仲裁資源的最終權(quán)限。NodeManager 是每臺(tái)機(jī)器框架代理凶杖,負(fù)責(zé) Containers胁艰,監(jiān)視其資源使用情況(CPU,內(nèi)存,磁盤腾么,網(wǎng)絡(luò))并將其報(bào)告給 ResourceManager奈梳。

每個(gè)應(yīng)用程序 ApplicationMaster 實(shí)際上是一個(gè)框架特定的庫(kù),其任務(wù)是協(xié)調(diào)來(lái)自 ResourceManager 的資源解虱,并與 NodeManager 一起執(zhí)行和監(jiān)視任務(wù)攘须。

[圖片上傳失敗...(image-767f76-1538235943456)]

在 YARN 體系結(jié)構(gòu)中,ResourceManager 作為守護(hù)程序運(yùn)行饭寺,作為架構(gòu)中的全局的 master 角色阻课,通常在專用計(jì)算機(jī)上運(yùn)行叫挟,它在各種競(jìng)爭(zhēng)應(yīng)用程序之間仲裁可用的群集資源艰匙。ResourceManager 跟蹤群集上可用的活動(dòng)節(jié)點(diǎn)和資源的數(shù)量,并協(xié)調(diào)用戶提交的應(yīng)用程序應(yīng)獲取哪些資源以及事件抹恳。ResourceManager 是具有此信息的單個(gè)進(jìn)程员凝,因此它可以以共享,安全和多租戶的方式進(jìn)行調(diào)度決策(例如奋献,根據(jù)應(yīng)用程序優(yōu)先級(jí)健霹,隊(duì)列容量,ACL瓶蚂,數(shù)據(jù)位置等)糖埋。

當(dāng)用戶提交應(yīng)用程序時(shí),將啟動(dòng)名為 ApplicationMaster 的輕量級(jí)進(jìn)程實(shí)例窃这,以協(xié)調(diào)應(yīng)用程序中所有任務(wù)的執(zhí)行瞳别。這包括監(jiān)視任務(wù),重新啟動(dòng)失敗的任務(wù)杭攻,推測(cè)性地運(yùn)行慢速任務(wù)以及計(jì)算應(yīng)用程序計(jì)數(shù)器的總值祟敛。ApplicationMaster 和屬于其應(yīng)用程序的任務(wù)在 NodeManagers 控制的資源容器中運(yùn)行。

NodeManager 有許多動(dòng)態(tài)創(chuàng)建的資源容器兆解。容器的大小取決于它包含的資源量馆铁,例如內(nèi)存、CPU锅睛、磁盤和網(wǎng)絡(luò)IO埠巨。目前,僅支持內(nèi)存和CPU现拒。節(jié)點(diǎn)上的容器數(shù)是配置參數(shù)和用于守護(hù)程序及OS的資源之外的節(jié)點(diǎn)資源總量(例如總CPU和總內(nèi)存)的乘積乖订。

ApplicationMaster 可以在容器內(nèi)運(yùn)行任何類型的任務(wù)。例如具练,MapReduce ApplicationMaster 請(qǐng)求容器啟動(dòng) map 或 reduce 任務(wù)乍构,而 Giraph ApplicationMaster 請(qǐng)求容器運(yùn)行 Giraph 任務(wù)。您還可以實(shí)現(xiàn)運(yùn)行特定任務(wù)的自定義 ApplicationMaster

在 YARN 中,MapReduce 簡(jiǎn)單地降級(jí)為分布式應(yīng)用程序的角色(但仍然是非常流行且有用的)哥遮,現(xiàn)在稱為MRv2岂丘。

此外,YARN 通過 ReservationSystem 支持資源預(yù)留的概念眠饮,ReservationSystem 允許用戶通過配置文件來(lái)指定資源的時(shí)間和時(shí)間約束(例如奥帘,截止日期)的,并保留資源以確保重要作業(yè)的可預(yù)測(cè)執(zhí)行仪召。ReservationSystem 可跟蹤資源超時(shí)寨蹋,執(zhí)行預(yù)留的準(zhǔn)入控制,并動(dòng)態(tài)指示基礎(chǔ)調(diào)度程序確保預(yù)留已滿扔茅。

二已旧、YARN 基本服務(wù)組件

YARN 總體上是 master/slave 結(jié)構(gòu),在整個(gè)資源管理框架中召娜,ResourceManager 為 master运褪,NodeManager 是 slave。

YARN的基本組成結(jié)構(gòu)玖瘸,YARN 主要由 ResourceManager秸讹、NodeManager、ApplicationMaster 和 Container 等幾個(gè)組件構(gòu)成雅倒。

  • ResourceManager是Master上一個(gè)獨(dú)立運(yùn)行的進(jìn)程璃诀,負(fù)責(zé)集群統(tǒng)一的資源管理、調(diào)度蔑匣、分配等等劣欢;
  • NodeManager是Slave上一個(gè)獨(dú)立運(yùn)行的進(jìn)程,負(fù)責(zé)上報(bào)節(jié)點(diǎn)的狀態(tài)殖演;
  • ApplicationMaster相當(dāng)于這個(gè)Application的監(jiān)護(hù)人和管理者氧秘,負(fù)責(zé)監(jiān)控、管理這個(gè)Application的所有Attempt在cluster中各個(gè)節(jié)點(diǎn)上的具體運(yùn)行趴久,同時(shí)負(fù)責(zé)向Yarn ResourceManager申請(qǐng)資源丸相、返還資源等;
  • Container是yarn中分配資源的一個(gè)單位彼棍,包涵內(nèi)存灭忠、CPU等等資源,YARN以Container為單位分配資源座硕;

ResourceManager 負(fù)責(zé)對(duì)各個(gè) NadeManager 上資源進(jìn)行統(tǒng)一管理和調(diào)度弛作。當(dāng)用戶提交一個(gè)應(yīng)用程序時(shí),需要提供一個(gè)用以跟蹤和管理這個(gè)程序的 ApplicationMaster华匾,它負(fù)責(zé)向 ResourceManager 申請(qǐng)資源映琳,并要求 NodeManger 啟動(dòng)可以占用一定資源的任務(wù)。由于不同的 ApplicationMaster 被分布到不同的節(jié)點(diǎn)上,因此它們之間不會(huì)相互影響萨西。

image

Client 向 ResourceManager 提交的每一個(gè)應(yīng)用程序都必須有一個(gè) ApplicationMaster有鹿,它經(jīng)過 ResourceManager 分配資源后,運(yùn)行于某一個(gè) Slave 節(jié)點(diǎn)的 Container 中谎脯,具體做事情的 Task葱跋,同樣也運(yùn)行與某一個(gè) Slave 節(jié)點(diǎn)的 Container 中。

2.1 ResourceManager

RM是一個(gè)全局的資源管理器源梭,集群只有一個(gè)娱俺,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配,包括處理客戶端請(qǐng)求废麻、啟動(dòng)/監(jiān)控 ApplicationMaster荠卷、監(jiān)控 NodeManager、資源的分配與調(diào)度脑溢。它主要由兩個(gè)組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager僵朗,ASM)赖欣。

(1) 調(diào)度器

調(diào)度器根據(jù)容量屑彻、隊(duì)列等限制條件(如每個(gè)隊(duì)列分配一定的資源,最多執(zhí)行一定數(shù)量的作業(yè)等)顶吮,將系統(tǒng)中的資源分配給各個(gè)正在運(yùn)行的應(yīng)用程序社牲。需要注意的是,該調(diào)度器是一個(gè)“純調(diào)度器”悴了,它從事任何與具體應(yīng)用程序相關(guān)的工作搏恤,比如不負(fù)責(zé)監(jiān)控或者跟蹤應(yīng)用的執(zhí)行狀態(tài)等,也不負(fù)責(zé)重新啟動(dòng)因應(yīng)用執(zhí)行失敗或者硬件故障而產(chǎn)生的失敗任務(wù)湃交,這些均交由應(yīng)用程序相關(guān)的ApplicationMaster完成熟空。

調(diào)度器僅根據(jù)各個(gè)應(yīng)用程序的資源需求進(jìn)行資源分配,而資源分配單位用一個(gè)抽象概念“資源容器”(Resource Container搞莺,簡(jiǎn)稱Container)表示息罗,Container是一個(gè)動(dòng)態(tài)資源分配單位,它將內(nèi)存才沧、CPU迈喉、磁盤、網(wǎng)絡(luò)等資源封裝在一起温圆,從而限定每個(gè)任務(wù)使用的資源量挨摸。

(2) 應(yīng)用程序管理器

應(yīng)用程序管理器主要負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序,接收job的提交請(qǐng)求岁歉,為應(yīng)用分配第一個(gè) Container 來(lái)運(yùn)行 ApplicationMaster得运,包括應(yīng)用程序提交、與調(diào)度器協(xié)商資源以啟動(dòng) ApplicationMaster、監(jiān)控 ApplicationMaster 運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)它等熔掺。

2.2 ApplicationMaster

管理 YARN 內(nèi)運(yùn)行的一個(gè)應(yīng)用程序的每個(gè)實(shí)例彬檀。關(guān)于 job 或應(yīng)用的管理都是由 ApplicationMaster 進(jìn)程負(fù)責(zé)的,Yarn 允許我們以為自己的應(yīng)用開發(fā) ApplicationMaster瞬女。

功能:

  • 數(shù)據(jù)切分窍帝;
  • 為應(yīng)用程序申請(qǐng)資源并進(jìn)一步分配給內(nèi)部任務(wù)(TASK);
  • 任務(wù)監(jiān)控與容錯(cuò)诽偷;
  • 負(fù)責(zé)協(xié)調(diào)來(lái)自ResourceManager的資源坤学,并通過NodeManager監(jiān)視容易的執(zhí)行和資源使用情況。

可以說(shuō)报慕,ApplicationMaster 與 ResourceManager 之間的通信是整個(gè) Yarn 應(yīng)用從提交到運(yùn)行的最核心部分深浮,是 Yarn 對(duì)整個(gè)集群進(jìn)行動(dòng)態(tài)資源管理的根本步驟,Yarn 的動(dòng)態(tài)性眠冈,就是來(lái)源于多個(gè)Application 的 ApplicationMaster 動(dòng)態(tài)地和 ResourceManager 進(jìn)行溝通飞苇,不斷地申請(qǐng)、釋放蜗顽、再申請(qǐng)布卡、再釋放資源的過程。

2.3 NodeManager

NodeManager 整個(gè)集群有多個(gè)雇盖,負(fù)責(zé)每個(gè)節(jié)點(diǎn)上的資源和使用忿等。

NodeManager 是一個(gè) slave 服務(wù):它負(fù)責(zé)接收 ResourceManager 的資源分配請(qǐng)求,分配具體的 Container 給應(yīng)用崔挖。同時(shí)贸街,它還負(fù)責(zé)監(jiān)控并報(bào)告 Container 使用信息給 ResourceManager。通過和ResourceManager 配合狸相,NodeManager 負(fù)責(zé)整個(gè) Hadoop 集群中的資源分配工作薛匪。

功能:NodeManager 本節(jié)點(diǎn)上的資源使用情況和各個(gè) Container 的運(yùn)行狀態(tài)(cpu和內(nèi)存等資源)

  • 接收及處理來(lái)自 ResourceManager 的命令請(qǐng)求,分配 Container 給應(yīng)用的某個(gè)任務(wù)脓鹃;
  • 定時(shí)地向RM匯報(bào)以確保整個(gè)集群平穩(wěn)運(yùn)行逸尖,RM 通過收集每個(gè) NodeManager 的報(bào)告信息來(lái)追蹤整個(gè)集群健康狀態(tài)的,而 NodeManager 負(fù)責(zé)監(jiān)控自身的健康狀態(tài)将谊;
  • 處理來(lái)自 ApplicationMaster 的請(qǐng)求冷溶;
  • 管理著所在節(jié)點(diǎn)每個(gè) Container 的生命周期;
  • 管理每個(gè)節(jié)點(diǎn)上的日志尊浓;
  • 執(zhí)行 Yarn 上面應(yīng)用的一些額外的服務(wù)逞频,比如 MapReduce 的 shuffle 過程;

當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí)栋齿,它會(huì)向 ResourceManager 進(jìn)行注冊(cè)并告知 ResourceManager 自己有多少資源可用苗胀。在運(yùn)行期襟诸,通過 NodeManager 和 ResourceManager 協(xié)同工作,這些信息會(huì)不斷被更新并保障整個(gè)集群發(fā)揮出最佳狀態(tài)基协。

NodeManager 只負(fù)責(zé)管理自身的 Container歌亲,它并不知道運(yùn)行在它上面應(yīng)用的信息。負(fù)責(zé)管理應(yīng)用信息的組件是 ApplicationMaster

2.4 Container

Container 是 YARN 中的資源抽象澜驮,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源陷揪,如內(nèi)存、CPU杂穷、磁盤悍缠、網(wǎng)絡(luò)等,當(dāng) AM 向 RM 申請(qǐng)資源時(shí)耐量,RM 為 AM 返回的資源便是用 Container 表示的飞蚓。YARN 會(huì)為每個(gè)任務(wù)分配一個(gè) Container,且該任務(wù)只能使用該 Container 中描述的資源廊蜒。

Container 和集群節(jié)點(diǎn)的關(guān)系是:一個(gè)節(jié)點(diǎn)會(huì)運(yùn)行多個(gè) Container趴拧,但一個(gè) Container 不會(huì)跨節(jié)點(diǎn)。任何一個(gè) job 或 application 必須運(yùn)行在一個(gè)或多個(gè) Container 中山叮,在 Yarn 框架中著榴,ResourceManager 只負(fù)責(zé)告訴 ApplicationMaster 哪些 Containers 可以用,ApplicationMaster 還需要去找 NodeManager 請(qǐng)求分配具體的 Container聘芜。

需要注意的是兄渺,Container 是一個(gè)動(dòng)態(tài)資源劃分單位缝龄,是根據(jù)應(yīng)用程序的需求動(dòng)態(tài)生成的汰现。目前為止,YARN 僅支持 CPU 和內(nèi)存兩種資源叔壤,且使用了輕量級(jí)資源隔離機(jī)制 Cgroups 進(jìn)行資源隔離瞎饲。

功能:

  • 對(duì)task環(huán)境的抽象;
  • 描述一系列信息炼绘;
  • 任務(wù)運(yùn)行資源的集合(cpu嗅战、內(nèi)存、io等)俺亮;
  • 任務(wù)運(yùn)行環(huán)境

三驮捍、YARN 應(yīng)用提交過程

Application在Yarn中的執(zhí)行過程,整個(gè)執(zhí)行過程可以總結(jié)為三步:

  1. 應(yīng)用程序提交
  2. 啟動(dòng)應(yīng)用的ApplicationMaster實(shí)例
  3. ApplicationMaster 實(shí)例管理應(yīng)用程序的執(zhí)行
image

具體提交過程為:

  1. 客戶端程序向 ResourceManager 提交應(yīng)用并請(qǐng)求一個(gè) ApplicationMaster 實(shí)例脚曾;
  2. ResourceManager 找到一個(gè)可以運(yùn)行一個(gè) Container 的 NodeManager东且,并在這個(gè) Container 中啟動(dòng) ApplicationMaster 實(shí)例;
  3. ApplicationMaster 向 ResourceManager 進(jìn)行注冊(cè)本讥,注冊(cè)之后客戶端就可以查詢 ResourceManager 獲得自己 ApplicationMaster 的詳細(xì)信息珊泳,以后就可以和自己的 ApplicationMaster 直接交互了(這個(gè)時(shí)候鲁冯,客戶端主動(dòng)和 ApplicationMaster 交流,應(yīng)用先向 ApplicationMaster 發(fā)送一個(gè)滿足自己需求的資源請(qǐng)求)色查;
  4. 在平常的操作過程中薯演,ApplicationMaster 根據(jù) resource-request協(xié)議 向 ResourceManager 發(fā)送 resource-request請(qǐng)求
  5. 當(dāng) Container 被成功分配后秧了,ApplicationMaster 通過向 NodeManager 發(fā)送 container-launch-specification信息 來(lái)啟動(dòng)Container跨扮,container-launch-specification信息包含了能夠讓Container 和 ApplicationMaster 交流所需要的資料;
  6. 應(yīng)用程序的代碼以 task 形式在啟動(dòng)的 Container 中運(yùn)行验毡,并把運(yùn)行的進(jìn)度好港、狀態(tài)等信息通過 application-specific協(xié)議 發(fā)送給ApplicationMaster;
  7. 在應(yīng)用程序運(yùn)行期間米罚,提交應(yīng)用的客戶端主動(dòng)和 ApplicationMaster 交流獲得應(yīng)用的運(yùn)行狀態(tài)钧汹、進(jìn)度更新等信息,交流協(xié)議也是 application-specific協(xié)議录择;
  8. 一旦應(yīng)用程序執(zhí)行完成并且所有相關(guān)工作也已經(jīng)完成拔莱,ApplicationMaster 向 ResourceManager 取消注冊(cè)然后關(guān)閉,用到所有的 Container 也歸還給系統(tǒng)隘竭。

精簡(jiǎn)版的:

image
  • 步驟1:用戶將應(yīng)用程序提交到 ResourceManager 上塘秦;
  • 步驟2:ResourceManager 為應(yīng)用程序 ApplicationMaster 申請(qǐng)資源,并與某個(gè) NodeManager 通信啟動(dòng)第一個(gè) Container动看,以啟動(dòng)ApplicationMaster尊剔;
  • 步驟3:ApplicationMaster 與 ResourceManager 注冊(cè)進(jìn)行通信,為內(nèi)部要執(zhí)行的任務(wù)申請(qǐng)資源菱皆,一旦得到資源后须误,將于 NodeManager 通信,以啟動(dòng)對(duì)應(yīng)的 Task仇轻;
  • 步驟4:所有任務(wù)運(yùn)行完成后京痢,ApplicationMaster 向 ResourceManager 注銷,整個(gè)應(yīng)用程序運(yùn)行結(jié)束篷店。

四祭椰、Resource Request 及 Container

Yarn的設(shè)計(jì)目標(biāo)就是允許我們的各種應(yīng)用以共享、安全疲陕、多租戶的形式使用整個(gè)集群府蛇。并且拍霜,為了保證集群資源調(diào)度和數(shù)據(jù)訪問的高效性航瞭,Yarn還必須能夠感知整個(gè)集群拓?fù)浣Y(jié)構(gòu)袋倔。

為了實(shí)現(xiàn)這些目標(biāo),ResourceManager的調(diào)度器Scheduler為應(yīng)用程序的資源請(qǐng)求定義了一些靈活的協(xié)議窃爷,通過它就可以對(duì)運(yùn)行在集群中的各個(gè)應(yīng)用做更好的調(diào)度邑蒋,因此姓蜂,這就誕生了Resource RequestContainer

一個(gè)應(yīng)用先向ApplicationMaster發(fā)送一個(gè)滿足自己需求的資源請(qǐng)求医吊,然后ApplicationMaster把這個(gè)資源請(qǐng)求以resource-request的形式發(fā)送給ResourceManager的Scheduler钱慢,Scheduler再在這個(gè)原始的resource-request中返回分配到的資源描述Container。

每個(gè)ResourceRequest可看做一個(gè)可序列化Java對(duì)象卿堂,包含的字段信息如下:

<resource-name, priority, resource-requirement, number-of-containers>
- resource-name:資源名稱束莫,現(xiàn)階段指的是資源所在的host和rack,后期可能還會(huì)支持虛擬機(jī)或者更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)
- priority:資源的優(yōu)先級(jí)
- resource-requirement:資源的具體需求草描,現(xiàn)階段指內(nèi)存和cpu需求的數(shù)量
- number-of-containers:滿足需求的Container的集合

ApplicationMaster在得到這些Containers后览绿,還需要與分配Container所在機(jī)器上的NodeManager交互來(lái)啟動(dòng)Container并運(yùn)行相關(guān)任務(wù)。當(dāng)然Container的分配是需要認(rèn)證的穗慕,以防止ApplicationMaster自己去請(qǐng)求集群資源饿敲。

五、YARN 配置

a). 修改文件 YARN 配置文件

etc/hadoop/mapred-site.xml:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

etc/hadoop/yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

b). 啟動(dòng) ResourceManager 和 NodeManager sbin/start-yarn.sh逛绵,停止 RM 和 NM sbin/stop-yarn.sh

c). 驗(yàn)證:可通過 JPS 命令來(lái)檢查是否啟動(dòng) YARN

[圖片上傳失敗...(image-b8ee9a-1538235762717)]

當(dāng)顯示上圖時(shí)怀各,就表示 YARN 成功啟動(dòng)了

d). 向 YARN 以 jar 包的方式提交作業(yè),假設(shè) jar 包為 example.jar 格式為:

hadoop jar jar包名 應(yīng)用名 輸入路徑 輸出路徑

例如:

hadoop jar example.jar wordccount /input/hello.txt /output/helloCount.txt

參考

[1] https://blog.csdn.net/Mr_HHH/article/details/81127373

[2] http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html

[3] https://www.ibm.com/developerworks/library/bd-yarn-intro/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末术浪,一起剝皮案震驚了整個(gè)濱河市瓢对,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胰苏,老刑警劉巖硕蛹,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硕并,居然都是意外死亡法焰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門鲤孵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)壶栋,“玉大人,你說(shuō)我怎么就攤上這事普监。” “怎么了琉兜?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵凯正,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我豌蟋,道長(zhǎng)廊散,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任梧疲,我火速辦了婚禮允睹,結(jié)果婚禮上运准,老公的妹妹穿的比我還像新娘。我一直安慰自己缭受,他們只是感情好胁澳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著米者,像睡著了一般韭畸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔓搞,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天胰丁,我揣著相機(jī)與錄音,去河邊找鬼喂分。 笑死锦庸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒲祈。 我是一名探鬼主播酸员,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讳嘱!你這毒婦竟也來(lái)了幔嗦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沥潭,失蹤者是張志新(化名)和其女友劉穎邀泉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钝鸽,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汇恤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拔恰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片因谎。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颜懊,靈堂內(nèi)的尸體忽然破棺而出财岔,到底是詐尸還是另有隱情,我是刑警寧澤河爹,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布匠璧,位于F島的核電站,受9級(jí)特大地震影響咸这,放射性物質(zhì)發(fā)生泄漏夷恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一媳维、第九天 我趴在偏房一處隱蔽的房頂上張望酿雪。 院中可真熱鬧遏暴,春花似錦、人聲如沸指黎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袋励。三九已至侥啤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茬故,已是汗流浹背盖灸。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磺芭,地道東北人赁炎。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像钾腺,于是被迫代替她去往敵國(guó)和親徙垫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344