Docker( for Windows) 搭建hadoop集群

參考:
基于 Docker 搭建 Hadoop 平臺(tái)_不思故亡的博客-CSDN博客_docker搭建hadoop
使用docker部署hadoop集群 - upupfeng - 博客園 (cnblogs.com)
hadoop 啟動(dòng)dfs失敗- Q1Zhen - 博客園 (cnblogs.com)
基于docker的hadoop集群搭建小何又沐風(fēng)的博客-CSDN博客基于docker搭建hadoop
Hadoop集群添加、刪除節(jié)點(diǎn)_oToyix的博客-CSDN博客_hadoop集群添加節(jié)點(diǎn)

一飘庄、集群規(guī)劃

主機(jī)名 IP 用戶 HDFS YARN
hadoop0 待定 root NameNode振坚、DataNode ResourceManager 、NodeManager
hadoop1 待定 root SecondaryNameNode蔬将、DataNode NodeManager
hadoop2 待定 root DataNode NodeManager
集群規(guī)劃

二爷速、環(huán)境準(zhǔn)備

1、Docker( for Windows)環(huán)境(docker也可以裝在wsl2里面)霞怀,請(qǐng)自行搭建
2惫东、jdk-8u333-linux-x64.tar.gz - JDK 官方下載頁(yè)面
3、hadoop-3.3.3.tar.gz - hadoop 3.3.3官方下載

三毙石、構(gòu)建centos-hadoop鏡像

1廉沮、創(chuàng)建Dockerfile文件,并將其和下載的壓縮包放一起


image.png

2徐矩、編寫(xiě)Dockerfile滞时,內(nèi)容如下

FROM centos:centos7.9.2009
# 使用centos7版本就好,不要使用centos8
MAINTAINER sksum@qq.com

# 安裝openssh-server和sudo軟件包滤灯,并且將sshd的UsePAM參數(shù)設(shè)置成no
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#安裝openssh-clients
RUN yum  install -y openssh-clients

# 添加測(cè)試用戶root漂洋,密碼root,并且將此用戶添加到sudoers里  
RUN echo "root:root" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 啟動(dòng)sshd服務(wù)并且暴露22端口  
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

# 將JDK包添加到鏡像之中力喷,并配置環(huán)境變量 
ADD jdk-8u333-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_333 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

# 將hadoop包添加到鏡像之中刽漂,并配置環(huán)境變量
ADD hadoop-3.3.3.tar.gz /usr/local
RUN mv /usr/local/hadoop-3.3.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
ENV PATH $HADOOP_HOME/sbin:$PATH

# 配置集群的角色,不然啟動(dòng)集群時(shí)會(huì)報(bào)錯(cuò)
ENV HDFS_NAMENODE_USER="root" 
ENV HDFS_DATANODE_USER="root" 
ENV HDFS_SECONDARYNAMENODE_USER="root" 
ENV YARN_RESOURCEMANAGER_USER="root" 
ENV YARN_NODEMANAGER_USER="root"

# 創(chuàng)建文件目錄弟孟,用于后面存放HDFS數(shù)據(jù)
RUN mkdir /home/hadoop
RUN mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data

# 定義時(shí)區(qū)參數(shù)
ENV TZ=Asia/Shanghai
#設(shè)置時(shí)區(qū)
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

# 中文支持
RUN yum -y install kde-l10n-Chinese
RUN yum -y install glibc-common
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 設(shè)置編碼
ENV LC_ALL zh_CN.UTF-8

3贝咙、打包鏡像,起名為 centos-hadoop
docker build -t centos-hadoop ./

打包成功后可以使用命令docker images檢查鏡像是否生成

image.png

四拂募、創(chuàng)建hadoop容器

1庭猩、 搭建子網(wǎng)絡(luò),以便子容器(集群)能相互通訊
docker network create --subnet=192.168.1.0/24 hadoopnet

2陈症、 創(chuàng)建hadoop容器蔼水,并分配網(wǎng)絡(luò)

# 主服務(wù)器hadoop0端口映射到宿主機(jī),映射8088端口录肯、9870端口趴腋、9864端口
docker run -itd --name hadoop0 --hostname hadoop0 --net hadoopnet --ip 192.168.1.2 -p 8088:8088 -p 9870:9870 -p 9864:9864 centos-hadoop
docker run -itd --name hadoop1 --hostname hadoop1 --net hadoopnet --ip 192.168.1.3 centos-hadoop
docker run -itd --name hadoop2 --hostname hadoop2 --net hadoopnet --ip 192.168.1.4 centos-hadoop

3、使用docker ps命令查看創(chuàng)建的3個(gè)容器

image.png

五、配置ssh免密登錄

1优炬、進(jìn)入主服務(wù)器(主節(jié)點(diǎn))颁井,以下操作在主要服務(wù)器操作即可

docker exec -it hadoop0 /bin/bash 

2、配置ssh免密登錄

ssh-keygen
#剩下的一路回車(chē)即可

# 以下3條都不能省蠢护,請(qǐng)根據(jù)提示輸入yes以及主機(jī)密碼雅宾,開(kāi)頭我們?cè)O(shè)置的是root/root
ssh-copy-id hadoop0
ssh-copy-id hadoop1
ssh-copy-id hadoop2

六、配置hadoop集群

1葵硕、進(jìn)入hadoop的文件配置目錄(也是在主節(jié)點(diǎn)服務(wù)器中操作)眉抬,主要修改以下配置文件:

cd $HADOOP_HOME/etc/hadoop
配置文件名 配置內(nèi)容 配置對(duì)象
core-site.xml 集群全局參數(shù) 用于定義系統(tǒng)級(jí)別的參數(shù),
如HDFS URL懈凹、Hadoop的臨時(shí)目錄等
hdfs-site.xml HDFS參數(shù) 如名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的存放位置蜀变、
文件副本的個(gè)數(shù)、文件讀取權(quán)限等
mapred-site.xml Mapreduce參數(shù) 包括JobHistory Server和應(yīng)用程序參數(shù)蘸劈,
如reduce任務(wù)的默認(rèn)個(gè)數(shù)、
任務(wù)所能夠使用內(nèi)存的默認(rèn)上下限等
yarn-site.xml 集群資源管理系統(tǒng)參數(shù) 配置 ResourceManager尊沸,
NodeManager 的通信端口威沫,
web監(jiān)控端口等
workers 集群 DataNode節(jié)點(diǎn)的主機(jī)名或IP 集群 DataNode節(jié)點(diǎn)的主機(jī)名或IP,
以便于start-all.sh啟動(dòng)集群的節(jié)點(diǎn)

1洼专、vi hadoop-env.sh棒掠,添加如下配置(此步驟可忽略,其在打包鏡像時(shí)已配置環(huán)境變量)

export JAVA_HOME=/usr/local/jdk1.8

2屁商、 vi core-site.xml

<configuration>
    <!-- 定義主服務(wù)器的URI和端口-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop0:9000</value>
    </property>
    <!-- 設(shè)置hadoop本地?cái)?shù)據(jù)存儲(chǔ)路徑 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
    <!-- HDFS垃圾箱設(shè)置烟很,可以恢復(fù)誤刪除,分鐘數(shù)蜡镶,0為禁用雾袱,添加該項(xiàng)無(wú)需重啟hadoop -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>

2、vi hdfs-site.xml

<configuration>
    <!-- 保存FsImage鏡像的目錄官还,作用是存放hadoop的名稱節(jié)點(diǎn)namenode里的metadata -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hdfs_name</value>
    </property>
    <!-- 存放HDFS文件系統(tǒng)數(shù)據(jù)文件的目錄芹橡,作用是存放hadoop的數(shù)據(jù)節(jié)點(diǎn)datanode里的多個(gè)數(shù)據(jù)塊 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hdfs_data</value>
    </property>
    <!-- hdfs數(shù)據(jù)塊的復(fù)制份數(shù),默認(rèn)3望伦,理論上份數(shù)越多跑數(shù)速度越快林说,但是需要的存儲(chǔ)空間也更多。有錢(qián)人可以調(diào)5或者6 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- SNN進(jìn)程運(yùn)行機(jī)器位置信息-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9001</value>
    </property>
    <!-- 是否開(kāi)啟webhdfs -->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

3屯伞、vi mapred-site.xml

<configuration>
    <!-- 設(shè)置MR程序默認(rèn)運(yùn)行模式腿箩,YARN集群 local本地模式-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- MR程序歷史服務(wù)地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop0:10020</value>
    </property>
    <!-- MR程序歷史服務(wù)器web地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop0:19888</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

4、vi yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop0:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop0:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop0:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop0:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop0:8088</value>
    </property>
</configuration>

5劣摇、vi workers 配置的為 DataNode節(jié)點(diǎn)的主機(jī)名或IP(hadoop3.0以后slaves更名為workers)

hadoop0
hadoop1
hadoop2
# 刪掉 localhost 

6珠移、將主節(jié)點(diǎn)服務(wù)器的配置文件同步給另外兩臺(tái)從服務(wù)器(還是在$HADOOP_HOME/etc/hadoop目錄下執(zhí)行)

scp -r * hadoop1:$HADOOP_HOME/etc/hadoop
scp -r * hadoop2:$HADOOP_HOME/etc/hadoop

scp -r /home/hadoop hadoop1:/home/
scp -r /home/hadoop hadoop2:/home/

7、在主節(jié)點(diǎn)下(NameNode)格式化HDFS(首次使用,文件存儲(chǔ)系統(tǒng)要進(jìn)行格式化剑梳,在主服務(wù)器操作即可)
hdfs namenode -format

看到約倒數(shù)第十行提示信息唆貌,會(huì)提示初始化成功

INFO common.Storage: Storage directory /home/hadoop/hdfs_name has been successfully formatted.

補(bǔ)充:不要重復(fù)格式化HDFS,會(huì)導(dǎo)致DataNode無(wú)法啟動(dòng)垢乙。

8锨咙、使用命令 start-all.sh 啟動(dòng)HDFS 集群和YARN集群,此時(shí)日志如下:

[root@hadoop0 sbin]# start-all.sh
Starting namenodes on [hadoop0]
Last login: Mon May 30 06:43:27 UTC 2022 on pts/2
Starting datanodes
Last login: Mon May 30 06:51:35 UTC 2022 on pts/2
Starting secondary namenodes [hadoop1]
Last login: Mon May 30 06:51:37 UTC 2022 on pts/2
Starting resourcemanager
Last login: Mon May 30 06:51:40 UTC 2022 on pts/2
Starting nodemanagers
Last login: Mon May 30 06:51:45 UTC 2022 on pts/2

補(bǔ)充:HDFS 集群和YARN集群也可單獨(dú)啟動(dòng)追逮,啟動(dòng)命令都在$HADOOP_HOME/sbin中酪刀,至此,Hadoop集群部署結(jié)束钮孵。

七骂倘、驗(yàn)證hadoop集群是否正常啟動(dòng)

方法1、可檢查各個(gè)容器巴席,通過(guò)命令jps历涝,查看進(jìn)程是否正常啟動(dòng)

# 容器hadoop0(主節(jié)點(diǎn))
[root@hadoop0 sbin]# jps
4054 ResourceManager
3447 NameNode
3594 DataNode
4206 NodeManager
4815 Jps

# 容器hadoop1(從節(jié)點(diǎn))
[root@hadoop1 hdfs_data]# jps
709 DataNode
823 SecondaryNameNode
1129 Jps
909 NodeManager

# 容器hadoop2(從節(jié)點(diǎn))
[root@hadoop2 /]# jps
1730 Jps
1004 NodeManager
847 DataNode

如上所示,顯示已啟動(dòng)的進(jìn)程漾唉,與集群規(guī)劃中的一致荧库,各容器進(jìn)程啟動(dòng)正常。

2赵刑、測(cè)試hdfs是否可以正常上傳文件

# HDFS創(chuàng)建一個(gè)目錄
hdfs dfs -mkdir /test  

# 容器內(nèi)創(chuàng)建一個(gè)文件
echo "hello hdfs" >> local.txt

# 將文件上傳到HDFS
hdfs dfs -put local.txt  /test

# 查看HDFS 的test文件夾
hdfs dfs -ls /test
# Found 1 items
# -rw-r--r--   2 root supergroup         11 2022-05-30 07:51 /test/local.txt

# 查看文件內(nèi)容
hdfs dfs -cat /test/local.txt
# hello hdfs

3分衫、檢查web界面是否能夠正常打開(kāi)(前面創(chuàng)建容器時(shí),有將這端口映射到宿主機(jī)端口)
Yarn集群監(jiān)控界面:http://localhost:8088/
HDFS集群監(jiān)控界面: http://localhost:9870/

web頁(yè)面的HDFS管理系統(tǒng)般此,可以正常查看剛上傳的文件

4蚪战、mapReduce服務(wù)測(cè)試
4.1 進(jìn)入hadoop計(jì)算樣例目錄
cd $HADOOP_HOME/share/hadoop/mapreduce
4.2 運(yùn)行測(cè)試樣例 hadoop jar hadoop-mapreduce-examples-3.3.3.jar pi 3 100調(diào)用jar包計(jì)算pi的值,計(jì)算100次(根據(jù)自己的hadoop版本修改命令)
4.3通過(guò)瀏覽器查看铐懊,在瀏覽器中輸入localhost:8088邀桑,可以查看任務(wù)情況以及日志等

mapReduce測(cè)試

八、節(jié)點(diǎn)擴(kuò)容

1科乎、創(chuàng)建新的容器hadoop3

docker run -itd --name hadoop3 --hostname hadoop3 --net hadoopnet --ip 192.168.1.5 centos-hadoop

2概漱、進(jìn)入主節(jié)點(diǎn)容器

docker exec -it hadoop0 /bin/bash 

3、配置免密登錄

ssh-copy-id hadoop3

4喜喂、修改主節(jié)點(diǎn)容器中的 DataNode節(jié)點(diǎn)配置文件瓤摧,新增從節(jié)點(diǎn)的hostname名稱

cd $HADOOP_HOME/etc/hadoop
vi workers
新增 hadoop3

或者直接

echo "hadoop3" >> $HADOOP_HOME/etc/hadoop/workers

5、將hadoop配置文件同步到新節(jié)點(diǎn)容器hadoop3(主要是步驟六那幾個(gè)xml文件)

cd $HADOOP_HOME/etc/hadoop
scp -r * hadoop3:$HADOOP_HOME/etc/hadoop

6玉吁、(新開(kāi)窗口)切換到hadoop3節(jié)點(diǎn)服務(wù)器照弥,啟動(dòng)datanode 和nodemanager進(jìn)程

docker exec -it hadoop3 /bin/bash 
hdfs --daemon start datanode
yarn --daemon start nodemanager
# jps命令可以檢測(cè)進(jìn)程是否啟動(dòng)成功

7、切回主節(jié)點(diǎn)hadoop1服務(wù)器进副,動(dòng)態(tài)刷新集群節(jié)點(diǎn)这揣,并做資源重新分配悔常。

hdfs dfsadmin -refreshNodes
start-balancer.sh

8、通過(guò)網(wǎng)頁(yè)判斷節(jié)點(diǎn)是否新增成功
HDFS集群監(jiān)控界面:Namenode information

image.png

也可以在主節(jié)點(diǎn)服務(wù)器通過(guò)以下命令判斷節(jié)點(diǎn)是否新增成功

# 查看現(xiàn)有HDFS各節(jié)點(diǎn)狀態(tài)给赞,命令操作如下
hdfs dfsadmin -report
# 查看YARN各節(jié)點(diǎn)狀態(tài)机打,命令操作如下
yarn node -list

九、動(dòng)態(tài)刪除節(jié)點(diǎn)(未測(cè)試)

1片迅、 主節(jié)點(diǎn)配置hdfs-site.xml文件

# 進(jìn)入配置文件目錄
cd $HADOOP_HOME/etc/hadoop
# 編輯文件
vi hdfs-site.xml    

2残邀、加入下面代碼,指定要?jiǎng)h除的節(jié)點(diǎn)配置文件

<property>
    <name>dfs.hosts.exclude</name>
    <value>${HADOOP_HOME}/etc/hadoop/excludes</value>
</property>

3柑蛇、編輯上面步驟指定的配置文件芥挣,將要?jiǎng)h除的節(jié)點(diǎn)名稱添加到文件里面

echo hadoop3 >> ${HADOOP_HOME}/etc/hadoop/excludes

4、修改了hadoop的配置文件耻台,就得將配置文件同步給其他節(jié)點(diǎn)

scp -r * hadoop1:$HADOOP_HOME/etc/hadoop
scp -r * hadoop2:$HADOOP_HOME/etc/hadoop
scp -r * hadoop3:$HADOOP_HOME/etc/hadoop

5空免、刷新主節(jié)點(diǎn)

hdfs dfsadmin -refreshNodes
start-balancer.sh

6、查看HDFS各節(jié)點(diǎn)狀態(tài)

hdfs dfsadmin -report

十盆耽、補(bǔ)充說(shuō)明

上述教程 docker 是安裝在Windows系統(tǒng)蹋砚,雖然正常搭建起來(lái)了hadoop集群,也能正常使用摄杂。但是有一個(gè)問(wèn)題存在坝咐,那就是宿主機(jī)(Windows)無(wú)法訪問(wèn)docker容器的IP(只能通過(guò)端口映射到宿主機(jī)),這點(diǎn)讓我覺(jué)得很無(wú)法忍受(因?yàn)槲液竺孢€要擴(kuò)容容器安裝其他軟件)匙姜。因此我又在windows的linux子系統(tǒng)(Windows Subsystem for Linux, 簡(jiǎn)稱WSL)上安裝了docker畅厢,并按照上面教程重新成功的搭建了hadoop集群冯痢。下面補(bǔ)充docker安裝WSL2上的個(gè)別問(wèn)題氮昧。

1、window 訪問(wèn)linux系統(tǒng)上的docker容器IP方式浦楣。

# 在Windows系統(tǒng)的管理員終端袖肥,給路由列表中永久添加一條靜態(tài)路由
route -p add 192.168.1.0/24 mask 255.255.240.0 172.22.65.131

# 其中192.168.1.0/24是docker的容器使用bridge網(wǎng)絡(luò),詳見(jiàn)前面步驟四振劳、1椎组,
# 172.22.65.131 是linux網(wǎng)卡的ip,如下圖
# window添加完靜態(tài)路由后历恐,window就可以ping得通docker容器了,可測(cè)試如下
# ping 192.168.1.2
由于我電腦重啟了寸癌,這IP出現(xiàn)了變化

2、windows重啟后弱贼,WSL2的IP出現(xiàn)變化問(wèn)題蒸苇。

這問(wèn)題沒(méi)有直接的解決方式(其他方案不少)∷甭茫考慮到這個(gè)hadoop集群搭建的性質(zhì)只是用于學(xué)習(xí)溪烤,建議每次重啟WSL2后,在windows里面管理員終端重新添加下靜態(tài)路由

# WSL2下查詢linux ip
$(ifconfig eth0 | grep -w inet | awk '{print $2}')


# WSL2下關(guān)閉防火墻(坑,每次重啟后都需要關(guān)閉防火墻)
sudo ufw disable
# 開(kāi)啟防火墻
# sudo ufw enable
# 檢查防火墻狀態(tài)
# sudo ufw status
補(bǔ)充:有個(gè)很奇怪的問(wèn)題檬嘀,wsl2重啟前槽驶,明明已經(jīng)關(guān)閉了防火墻了,重啟后檢查防火墻狀態(tài)時(shí)提示的也是防火墻沒(méi)激活鸳兽。
      但是windows(宿主機(jī))卻ping不通docker容器的ip(僅可以ping通wsl2)掂铐,此時(shí)再關(guān)閉一次防火墻就好了。


# windows終端下刪除老的靜態(tài)路由
route delete 192.168.1.0

# 為當(dāng)前Windows系統(tǒng)路由列表中永久添加一條靜態(tài)路由
route -p add 192.168.1.0/24 mask 255.255.240.0 172.22.65.131
# 記得用前面查詢出來(lái)的 ip 贸铜,代替掉172.22.65.131

3堡纬、其他可能用得上的命令

# 檢查docker是否運(yùn)行
service docker status

# 運(yùn)行docker
sudo service docker start

# 啟動(dòng)容器hadoop0
docker start hadoop0

# 進(jìn)入容器hadoop0
docker exec -it hadoop0 /bin/bash

# 啟動(dòng)hadoop集群(記得要把另外幾個(gè)容器也啟動(dòng)起來(lái))
start-all.sh
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蒿秦,隨后出現(xiàn)的幾起案子烤镐,更是在濱河造成了極大的恐慌,老刑警劉巖棍鳖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炮叶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡渡处,警方通過(guò)查閱死者的電腦和手機(jī)镜悉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)医瘫,“玉大人侣肄,你說(shuō)我怎么就攤上這事〈挤荩” “怎么了稼锅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)僚纷。 經(jīng)常有香客問(wèn)我矩距,道長(zhǎng),這世上最難降的妖魔是什么怖竭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任锥债,我火速辦了婚禮,結(jié)果婚禮上痊臭,老公的妹妹穿的比我還像新娘哮肚。我一直安慰自己,他們只是感情好广匙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布允趟。 她就那樣靜靜地躺著,像睡著了一般艇潭。 火紅的嫁衣襯著肌膚如雪拼窥。 梳的紋絲不亂的頭發(fā)上戏蔑,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鲁纠,去河邊找鬼总棵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛改含,可吹牛的內(nèi)容都是我干的情龄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捍壤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骤视!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鹃觉,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤专酗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盗扇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祷肯,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年疗隶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佑笋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斑鼻,死狀恐怖蒋纬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坚弱,我是刑警寧澤蜀备,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站史汗,受9級(jí)特大地震影響琼掠,放射性物質(zhì)發(fā)生泄漏拒垃。R本人自食惡果不足惜停撞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悼瓮。 院中可真熱鬧戈毒,春花似錦、人聲如沸横堡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)命贴。三九已至道宅,卻和暖如春食听,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背污茵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工樱报, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泞当。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓迹蛤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親襟士。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盗飒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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