大数据基础知识

为了一场紧急考试,没有正经系统学习过大数据知识的我开始恶补概念

涉及Hadoop、Hbase、Spark、Flink、Flume、Kafka、Sqoop、HDFS、Hive、Mapreduce、Impala、Spark-Sql、Elasticsearch、Yarn、Hue、Cloudera Manager,这篇文章的目的就是作为小白要把这些相关的知识概念还有可能的考点整理出来。

大数据-概念

什么是大数据

大数据(Big data或Megadata):大数据,或称巨量数据、海量数据、大资料,指的是所涉及的数据量规模巨大到无法通过人工,在合理时间达到截取、管理、处理、并整理成为人类所能解读的形式的数据资产。

☆大数据的5个特征(5V)

Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)、Veracity -(真实性)

  • Volume:数据量大,包括采集、存储和计算的量都非常大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。
  • Variety:种类和来源多样化。包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
  • Value:数据价值密度相对较低,或者说是浪里淘沙却又弥足珍贵。随着互联网以及物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
  • Velocity:数据增长速度快,处理速度也快,时效性要求高。比如搜索引擎要求几分钟前的新闻能够被用户查询到,个性化推荐算法尽可能要求实时完成推荐。这是大数据区别于传统数据挖掘的显著特征。
  • Veracity:数据的准确性和可信赖度,即数据的质量。
大数据的数据单位

按顺序给出所有单位:bit(比特))、Byte(字节)、KB、MB、GB、TB、PB、EB、ZB、YB、NB、DB、CB。(进率2^10)
1Byte = 8 Bit
1 KB(Kilobyte) = 1,024 Bytes 
1 MB (Megabyte)= 1,024 KB = 1,048,576 Bytes 
1 GB(Gigabyte) = 1,024 MB = 1,048,576 KB = 1,073,741,824 Bytes
1 TB (Terabyte)= 1,024 GB = 1,048,576 MB = 1,073,741,824 KB = 1,099,511,627,776 Bytes
1 PB(Petabyte) = 1,024 TB = 1,048,576 GB =1,125,899,906,842,624 Bytes
1 EB(Exabyte) = 1,024 PB = 1,048,576 TB = 1,152,921,504,606,846,976 Bytes
1 ZB(Zettabyte) = 1,024 EB = 1,180,591,620,717,411,303,424 Bytes
1 YB(Yottabyte) = 1,024 ZB = 1,208,925,819,614,629,174,706,176 Bytes
1 NB(NonaByte) = 1,024 YB
1 DB(DoggaByte) = 1,024 NB
1 CB (Corydonbyte )= 1,024 DB

大数据的计算模式

批处理计算 ( MapReduce,Spark):最适合于完成大数据批处理的计算模式是MapReduce,首先,MapReduce对具有简单数据关系、易于划分的大规模数据采用“分而治之”的并行处理思想;然后将大量重复的数据记录处理过程总结成Map和Reduce两个抽象的操作;最后MapReduce提供了一个统一的并行计算框架,把并行计算所涉及到的诸多系统层细节都交给计算框架去完成,以此大大简化了程序员进行并行化程序设计的负担。

流式计算 (Scribe ,Flume,Storm,S4,SparkStreaming)流式计算是一种高实时性的计算模式,需要对一定时间窗口内应用系统产生的新数据完成实时的计算处理,避免造成数据堆积和丢失。

迭代计算( HaLoop ,iMapReduce,Twister,Spark)为了克服Hadoop MapReduce难以支持迭代计算的缺陷,工业界和学术界对Hadoop MapReduce进行了不少改进研究。HaLoop把迭代控制放到MapReduce作业执行的框架内部,并通过循环敏感的调度器保证前次迭代的Reduce输出和本次迭代的Map输入数据在同一台物理机上,以减少迭代间的数据传输开销;

交互式计算

图计算 (Pregel,PowerGrapg,GraphX)

内存计算(Dremel,Hana,redis)

大数据技术体系

image.png

大数据处理流程分为采集、存储、处理、可视化,其中需要安全、运维技术。

大数据的核心是Hadoop生态系统,Hadoop是目前应用最为广泛的分布式大数据处理框架,它包含大量的组件,从数据采集到数据存储、数据处理以及数据分析等一系列技术组件。


image.png

一、数据源说明

  • 结构化数据:关系库记录
  • 半结构化数据:日志、邮件等
  • 非结构化数据:文件、视频、音频、网络数据流等

二、数据仓库

1、什么是数据仓库?

在计算中,数据仓库(DW或DWH)也称为企业数据仓库(EDW),是用于报告和数据分析的系统,被视为商业智能的核心组件。他们将当前和历史数据存储在一个地方,用于为整个企业的工作人员创建分析报告。

2、数据仓库两种操作方式的特点

①在线分析处理(OLAP)的特点是交易量相对较低。查询往往非常复杂,涉及到聚合。对于OLAP系统,响应时间是一种有效性度量。数据挖掘技术广泛使用OLAP应用程序。OLAP数据库以多维模式(通常为星型模式)存储汇总的历史数据。与数据集市相比,OLAP系统通常具有数小时的数据延迟,而数据集市预计延迟将接近一天。OLAP方法用于分析来自多个来源和视角的多维数据。OLAP中的三个基本操作是:总结(合并),钻取和切片和切块。

②联机事务处理(OLTP)的特点是大量短暂的在线事务(INSERT,UPDATE,DELETE)。OLTP系统强调非常快速的查询处理并保持多访问环境中的数据完整性。对于OLTP系统,有效性以每秒交易次数来衡量。OLTP数据库包含详细和当前的数据。用于存储事务数据库的模式是实体模型(通常是3NF)。规范化是对在该系统中数据建模技术的规范。

三、ETL与DM的区别

ETL/Extraction-Transformation-Loading——用于完成DB到DW的数据转存,它将DB中的某一个时间点的状态,“抽取”出来,根据DW的存储模型要求,“转换”一下数据格式,然后再“加载”到DW的一个过程,这里需要强调的是,DB的模型是ER模型,遵从范式化设计原则,而DW的数据模型是雪花型结构或者星型结构,用的是面向主题,面向问题的设计思路,所以DB和DW的模型结构不同,需要进行转换。

DM/Data Mining/数据挖掘——这个挖掘,不是简单的统计了,他是根据概率论的或者其他的统计学原理,将DW中的大数据量进行分析,找出我们不能直观发现的规律。

Hadoop

一、Hadoop

1、什么是Hadoop?

Hadoop的定义是:一个用java语言编写的便于大型数据集合的分布式储存和计算的软件框架。Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

2、Hadoop特点是什么?

①高效率(Efficient):分布式云计算,采用标准x86架构服务器大规模集群实现,每个模块都是一个离散的处理单元,使用并行计算技术,及群内各计算节点负载均衡,当某节点负荷过高时,可智能的将负荷转移到其他节点,并支持节点线性平滑扩展;分布式云存储,采用x86服务器的本地硬盘实现,使用分布式文件系统,每份数据至少保存在3个节点,保证存储设计的性能和可靠性目标。

②可靠性(Reliable):能搞自身的维护数据的多个成本,并且在任务失败是自动的重新部署计算任务

③可扩容性(Scalable):能可靠的储存和处理PB级的数据

④成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。

数据采集工具

离线数据采集:sqoop
实时数据采集:ogg
日志数据采集:logstash\flume

sqoop

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。
用于收集日志数据、对数据进行简单处理,并写道数据接收方。
Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式,exec(命令执行)等数据源上收集数据的能力。

flume

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
可线性扩展,具有数据一致性。
Agent主要由:source,channel,sink三个组件组成.
Source:
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memory channel等.
sink:
sink将数据存储到集中存储器比如Hbase和HDFS,它从channels消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.

数据存储工具

hdfs:分布式文件存储系统,适合一次写、多次读的场景
kudu:分布式文件存储系统,可快速更新,支撑快速读写场景
hbase:分布式数据库
kafka:消息总线
hive:数据仓库

HDFS

hdfs:基于java的hadoop分布式文件存储系统,适合大文件分布式存储,一次写、多次读的场景,比如一个1T的文件,存储的时候,会存储在多台机器而不是单台机器。
特点:

  • 易于扩展的分布式存储系统
  • 对机器性能要求不高,运行在大量普通廉价机器
  • 数据保存3个副本,副本丢失可自动回复
  • 高扩展性,可任意增加、删除节点
    结构:
    分为主节点、从节点
    1、主节点 namenode
  • 接收用户操作请求
  • 维护文件系统的目录结构
  • 管理文件与数据块之间的关系,数据块与datanode之间关系
    2、从节点 datanode
  • 存储数据库
  • 文件分成数据库存储
  • 文件有多个副本

BLOCKSIZE:大文件会被切分成块,通常64或者128MB
每个数据库会被存储在不同的地方,通常是3个

HDFS命令:
1、列出文件和目录清单

//根目录下
hadoop fs -ls /
//当前目录下
hadoop fs -ls
//用户主目录
hadoop fs -ls /user/foo

2、hdfs目录操作

//建立目录
hadoop fs -mkdir /user/foo/newdir
//删除目录
hadoop fs -rmdir /user/foo/newdir

3、上传文件后目录

//上传文件
hadoop fs -put localfile /user/foo/newfile
//上传目录
hadoop fs -put localdir /user/foo/newdir
//追加上传
hadoop fs -apendToFile localfile /user/foo/oldfile

4、查看文件

//查看文件内容
hadoop fs -cat /user/foo/file
//查看文件末尾
hadoop fs -tail /user/foo/file

5、下载文件或目录

//下载文件
hadoop fs -get /user/foo/remotefile localfile

6、删除文件或目录

//删除文件
hadoop fs -rm /user/foo/remotefile

Hbase

Hbase是建立在HDFS之上的,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构存储集群。
HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

  • 高可靠:存储3份冗余,保障高可靠
  • 高性能、实时读写,海量数据处理能力,大数据并发数据的实时读写高性能
  • 面向列:列独立索引
  • 可扩展,可快速扩充集群
  • 强一致性、行事务:同一行数据读写是原子的


    image.png

hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive主要包括用户接口、元数据存储、解释器、编译器、优化器、执行器等组成部分。

  • 用户接口:有3个,cli、client、wui。client是hive客户端,用户连接到hive server,wui通过浏览器访问hive。
  • 元数据存储:hive把元数据存储在数据库,元数据包括表名、列、分区、属性、所在目录等。连接到数据库的模型分为三种:单用户模式、多用户模式、远程服务器模式
  • Diver(解释器、编译器、优化器、执行器):产生查询计划,存储在hdfs,随后由mapreduce调用执行。
    学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。
    最适合应用在基于大量不可变数据的批处理作业。
    用来做数据仓库数据加工的SQL引擎,将SQL转换成多个作业(JOB)
    构建于hadoop的hdfs和mapreduce之上,用于管理和查询结构化、非结构化的数据仓库。
    目的是让会使用SQL的工程师来进行数据加工。
    hive命令
    1、数据库操作
//建立数据库
create database db1
//删除数据库
drop database db1
//切换数据库
user db1

2、表操作

//显示库中所有表
show tables
//建表
create table table1(aaa string)
//删除表
drop table table1

spark-SQL

用来做数据仓库数据加工的工具,是spark生态的一个子系统,与hive一样把SQL处理成一个个job,由于是用内存计算,比mapreduce快,用于批量加工、交互式分析

impala

专注于数据仓库下的OLAP,一般用于前台交互式分析查询数据用,大数据处理性能较差

Elasticsearch

文档型数据查询,可用于多字段查询,适用于客户标签查询、客户资料查询等场景。

kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。是一个开源流处理平台,由scala和java编写。
是一个分布式队列系统。利用磁盘顺序读写实现持久化,完全分布式结构,基于zookeeper实现了消息生产者和消费者的负载均衡。支持多个消费者做为一个整体来消费消息,支持多主题的消息发布、订阅模式。
优点:

  • 高吞吐量、低延迟:每秒可以处理几十万条消息,它的延迟最低只有几毫秒
  • 可扩展性:kafka集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障)
  • 高并发:支持数千个客户端同时读写
    常用术语:
  • Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker
  • Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
  • Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition.
  • Producer:负责发布消息到Kafka broker
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

适用场景:

  • 日志收集:可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer
  • 消息系统:解耦生产者和消费者、缓存消息等
  • 用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动
  • 运营指标:kafka也经常用来记录运营监控数据
  • 流式处理:比如spark streaming和storm

数据处理工具

离线计算:mapreduce
DAG计算:tez
内存计算:spark
实时计算:spark streaming(微批处理)、flink

mapreduce

Mapreduce是一种分布式计算模型,主要用于搜索领域,处理海量数据的计算问题。由两个阶段组成,Map和reduce,用户主需要实现map和reduce两个函数,就可以实现分布式计算。
特点:

  • 高可靠性:处理数据的能力值得信赖。
  • 高扩展性:在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
  • 高效性:能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
  • 高容错性:能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
    MapReduce计算框架采用master/slave架构。一个Hadoop集群是有一个Jobtracker和—定数目的Tasktracker组成。
    MapReduce计算模型适用于批处理任务。
    MapReduce是一个线性可扩展模型,服务器越多,处理时间越短。

spark

spark基于内存计算的开源集群分布式计算系统,使用scala开发。
基于内存计算,效率高于hadoop.job中间输出和结果可以保存在内存中,从而不需要读写HDFS,节省了磁盘IO耗时,号称性能比hadoop块一百倍。
它拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是:Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark兼容Hadoop生态系统,可以运行在Yarn上,能读取HDFS,HBase, Cassandra以及任何Hadoop数据源
Spark可以用于以下场景:
√ Spark Shell/Spark Submit的批处理
√ Spark SQL的交互式查询
√ Spark Streaming的实时处理应用
√ MLlib/MLbase的机器学习
√ GraphX的图处理和SparkR数据挖掘

使用场景:

  • 复杂的批量处理,偏重处理海量数据
  • 基于历史数据的交互式查询,偏重于交互响应,时间在数十秒到数十分钟,使用spark-sql
  • 基于实时数据流的数据处理,低延迟的实时处理

flink

Flink是开源的分布式,高性能,高可用,准确的流处理框架,用于在无界和有界数据流上进行有状态计算,支持实时流处理和批处理。

开源软件,实时处理工具,可以同时处理批处理和流处理任务
快速可靠,用作通用数据处理,速度快
使用方便,采用java\scala编程语言
flink定位时数据处理引擎,flink可以批流结合
flink最大的优势是连续查询。

集群资源管理

YARN

YARN (Yet Another Resource Negotiator的缩写)是开源Hadoop 分布式处理框架中的资源管理和作业调度技术。作为Hadoop 的核心组件之一,YARN 负责将系统资源分配给在Hadoop集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。
组成:

  • ResourceManager: 拥有系统所有资源分配的决定权,负责集群中所有应用程序的资源分配,拥有集群资源主要、全局视图。因此为用户提供公平的,基于容量的,本地化资源调度。

  • NodeManager:主要负责与ResourceManager通信,负责启动和管理应用程序的container的生命周期,监控它们的资源使用情况(cpu和内存),跟踪节点的监控状态,管理日志等,并报告给RM。

  • ApplicationManager:主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。

数据可视化工具

hue:CDH自带的可视化工具,通过web界面查询hive、impala的可视化数据,任务执行比较慢,但是比较稳定,适用于大数据处理,性能较好,用户DPI日志离线分析、网络信令离线分析
zepplin:可视化工具
klbana:查询es数据

HUE

Hue是一个开源的Apache Hadoop UI系统,由Cloudera贡献给开源社区,它是基于Python Web框架Django实现的。通过使用Hue可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作Hive、Impala查询,运行MapReduce Job等等

数据安全运维

cloudera manager:CDH自带的工具,集群安装、部署、配置等

cloudera manager

cloudera manager覆盖了集群所有资源与服务的统一配置、管理、监控、诊断。
特点:

  • 零宕机滚动安装、升级
  • 配置组件高可用、手工、自动切换
  • 配置日志、回滚
  • 服务间动态资源调配
  • 容灾备份、恢复
  • LDAP、kerberos集成
  • 直接连接cloudera支持服务体系
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容