大數(shù)據(jù)技術(shù)之a(chǎn)zkaban

一、azkaban介紹

Azkaban是由Linkedin開源的一個(gè)批處理工作流任務(wù)調(diào)度器。用于在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作和流程。Azkaban定義了一種KV文件格式來建立任務(wù)之間的依賴關(guān)系,并提供一個(gè)易于使用的web用戶界面維護(hù)和跟蹤你的工作流。它的功能主要有以下特點(diǎn):

1、web用戶界面

2、方便上傳工作流

3、方便設(shè)置任務(wù)之間的關(guān)系

4、調(diào)度工作流

5、認(rèn)證/授權(quán)(權(quán)限的工作)

6、能夠殺死并重新啟動(dòng)工作流

7、模塊化和可插拔的插件機(jī)制

8、項(xiàng)目工作區(qū)

9、工作流和任務(wù)的日志記錄和審計(jì)

二、azkaban安裝部署

2.1安裝前的準(zhǔn)備:

2.1.1、安裝需要的軟件我已經(jīng)上傳到github(https://github.com/QiGuaiJun625/Azkaban),有興趣的可以copy或者單獨(dú)下也可以(先下載前三個(gè)文件即可,后面兩個(gè)文件是出錯(cuò)時(shí)有可能需要的,2.5版本以后的版本自帶mysql連接jar包,最后一個(gè)文件應(yīng)該是用不到)。

2.1.2、目前azkaban只支持mysql,需要在服務(wù)器上安裝mysql,并建立用戶和密碼,我的賬號(hào)是root,密碼是123456。

2.2 安裝azkaban

2.2.1、在服務(wù)器中創(chuàng)建azkaban目錄

2.2.2、將安裝包上傳到azkaban目錄中,進(jìn)行解壓

tar -zxvf azkaban-sql-script-2.5.0.tar.gz

tar -zxvf?azkaban-executor-server-2.5.0.tar.gz

tar -zxvf?azkaban-web-server-2.5.0.tar.gz

2.2.3、為了后續(xù)操作簡(jiǎn)單,解壓后的文件重新命名

mv azkaban-web-2.5.0 server

mv azkaban-executor-2.5.0 executor

2.2.4、azkaban腳本導(dǎo)入

進(jìn)入mysql,創(chuàng)建azkaban數(shù)據(jù)庫,并將解壓的腳本導(dǎo)入到azkaban數(shù)據(jù)庫。

完成腳本導(dǎo)入后,會(huì)發(fā)現(xiàn)azkaban中導(dǎo)入如下數(shù)據(jù)表:

2.3 創(chuàng)建SSL配置

1、生成keystore的密碼及相應(yīng)信息

輸入keystore密碼:

再次輸入新密碼:

您的名字與姓氏是什么?

? [Unknown]:

您的組織單位名稱是什么?

? [Unknown]:

您的組織名稱是什么?

? [Unknown]:

您所在的城市或區(qū)域名稱是什么?

? [Unknown]:

您所在的州或省份名稱是什么?

? [Unknown]:

該單位的兩字母國家代碼是什么

? [Unknown]:CN

CN=Unknown,

OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN?正確嗎?

? [否]:y

輸入<jetty>的主密碼

????????(如果和?keystore?密碼相同,按回車):

再次輸入新密碼:

為了方便我把所有的密碼都設(shè)置成了123456

2、將keystore拷貝到azkaban web服務(wù)器根目錄中:

2.4 時(shí)間同步配置

先配置好服務(wù)器節(jié)點(diǎn)上的時(shí)區(qū)

1、如果在/uer/share/zoneinfo這個(gè)目錄下存在時(shí)區(qū)配置文件Asia/Shanghai,則不用配置時(shí)間同步,如果沒有,就要tzselect生成。

[root@master]$ tzselect

Please identify alocation so that time zone rules can be set correctly.

Please select acontinent or ocean.

?1) Africa

?2) Americas

?3) Antarctica

?4) Arctic Ocean

?5) Asia

?6) Atlantic Ocean

?7) Australia

?8) Europe

?9) Indian Ocean

10) Pacific Ocean

11) none - I wantto specify the time zone using the Posix TZ format.

#? 5

Please select acountry.

?1) Afghanistan?????????? ? 18) Israel????????? ??? 35) Palestine

?2) Armenia???????? ? 19) Japan???????? ??? 36) Philippines

?3) Azerbaijan???????????? ? 20) Jordan??????? ??? 37) Qatar

?4) Bahrain????????? ? 21) Kazakhstan ??? 38) Russia

?5) Bangladesh?????????? ? 22) Korea (North)??? ??? 39) Saudi Arabia

?6) Bhutan?????????? ? 23) Korea (South)??? ??? 40) Singapore

?7) Brunei???? ?????? ?24) Kuwait??????? ??? 41) Sri Lanka

?8) Cambodia???????????? ? 25) Kyrgyzstan ??? 42) Syria

?9) China???????????? ? 26) Laos?????????? ??? 43) Taiwan

10) Cyprus?????????? ?27) Lebanon??????????? ??? 44) Tajikistan

11) East Timor??????????? ?28) Macau??????? ??? 45) Thailand

12) Georgia???????? ?29) Malaysia??????????? ??? 46) Turkmenistan

13) Hong Kong?????????? ?30) Mongolia?????????? ??? 47) United Arab Emirates

14) India?????? ?31) Myanmar (Burma)??? ??? 48) Uzbekistan

15) Indonesia????????????? ?32) Nepal???????? ??? 49) Vietnam

16) Iran???????? ?33) Oman???????? ??? 50) Yemen

17) Iraq???????? ?34) Pakistan

#? 9

Please select oneof the following time zone regions.

1) Beijing Time

2) Xinjiang Time

#? 1

The followinginformation has been given:

?????? China

?????? Beijing Time

ThereforeTZ='Asia/Shanghai' will be used.

Local time is now: Wed Jun 14 09:16:46 CST 2017.

Universal Time isnow:?????? Wed Jun 14 01:16:46 UTC 2017.

Is the aboveinformation OK?

1) Yes

2) No

#?1

2、拷貝該時(shí)區(qū)文件,覆蓋系統(tǒng)本地時(shí)區(qū)配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3、集群時(shí)間同步

sudo date -s ‘2019-05-14 22:57:45’(舉例,按你當(dāng)時(shí)的時(shí)間來)

hwclock -w

2.5 配置文件

2.5.1 web服務(wù)器配置

1、進(jìn)入azkaban web服務(wù)器安裝目錄conf目錄,打開azkaban.properties文件

編輯文件

2、按照如下配置修改azkaban.properties文件


#Azkaban Personalization Settings

azkaban.name=Test? ? ? ? ? ? ? ? ? ? ? ? ? ? #服務(wù)器UI名稱,用于服務(wù)器上方顯示的名字(可以自己設(shè)置)

azkaban.label=My Local

Azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #描述

azkaban.color=#FF3601??????????????????????????????????????????#UI顏色

azkaban.default.servlet.path=/index????????????????????????#

web.resource.dir=web/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #默認(rèn)根web目錄

default.timezone.id=Asia/Shanghai?????????????????????????#默認(rèn)時(shí)區(qū),已改為亞洲/上海?默認(rèn)為美國

#Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager? #用戶權(quán)限管理默認(rèn)類

user.manager.xml.file=/root/azkaban/server/conf/azkaban-users.xml? ?#用戶配置(最好寫成絕對(duì)地址)

#Loader for projects

executor.global.properties=conf/global.properties? ?# global配置文件所在位置

azkaban.project.dir=projects???????????????????????????????????????????????#

database.type=mysql???????????????????????????????????????????????????????????#數(shù)據(jù)庫類型

mysql.port=3306??????????????????????????????????????????????????????????????????#端口號(hào)

mysql.host=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫連接IP

mysql.database=azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫實(shí)例名

mysql.user=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫用戶名

mysql.password=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫密碼

mysql.numconnections=100?????????????????????????????????????????????????#最大連接數(shù)

# Velocity dev mode

velocity.dev.mode=false? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

# Jetty服務(wù)器屬性.

jetty.maxThreads=25? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #最大線程數(shù)

jetty.ssl.port=8443? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #Jetty SSL端口

jetty.port=8081? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #Jetty端口

jetty.keystore=keystore????????????????????????????????????????????????????????#SSL文件名

jetty.password=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #SSL文件密碼

jetty.keypassword=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#Jetty主密碼?與?keystore文件相同

jetty.truststore=keystore???????????????????????????????????????????????????????#SSL文件名

jetty.trustpassword=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#SSL文件密碼

#?執(zhí)行服務(wù)器屬性

executor.port=12321? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #執(zhí)行服務(wù)器端口

#郵件設(shè)置

mail.sender=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#發(fā)送郵箱?

mail.host=smtp.163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#發(fā)送郵箱smtp地址

mail.user=xxxxxxxx? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #發(fā)送郵件時(shí)顯示的名稱

mail.password=**********????????????????????????????????????????????????#郵箱密碼

job.failure.email=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#任務(wù)失敗時(shí)發(fā)送郵件的地址

job.success.email=xxxxxxxx@163.com? ? ? ? ? ? ? ? ? ? ? ? ? ?#任務(wù)成功時(shí)發(fā)送郵件的地址

lockdown.create.projects=false??????????????????????????????????????????#

cache.directory=cache? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#緩存目錄


3、web服務(wù)器用戶配置

在azkaban web服務(wù)器安裝目錄conf目錄,按照如下配置修改azkaban-users.xml文件,增加管理員用戶。

<azkaban-users>

<user username="azkaban" password="azkaban" roles="admin" groups="azkaban"/>

<user username="metrics" password="metrics" roles="metrics"/>

<user username="admin" password="admin" roles="admin,metrics" />(自己添加)

<role name="admin"?permissions="ADMIN" />

<role name="metrics" permissions="METRICS"/>

</azkaban-users>

2.5.2 執(zhí)行服務(wù)器配置

1、進(jìn)入執(zhí)行服務(wù)器安裝目錄conf下,打開azkaban.properties

2、編輯azkaban.properties文件

#Azkaban

default.timezone.id=Asia/Shanghai? ? ? ? ? ? ? ? ? ? ? ? ? ?#時(shí)區(qū)

# Azkaban JobTypes?插件配置

azkaban.jobtype.plugin.dir=plugins/jobtypes?? ?#jobtype插件所在位置

#Loader for projects

executor.global.properties=conf/global.properties

azkaban.project.dir=projects

#數(shù)據(jù)庫設(shè)置

database.type=mysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫類型(目前只支持mysql)

mysql.port=3306? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫端口號(hào)

mysql.host=localhost? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫IP地址

mysql.database=azkaban? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫實(shí)例名

mysql.user=root? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#數(shù)據(jù)庫用戶名

mysql.password=123456? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #數(shù)據(jù)庫密碼

mysql.numconnections=100? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#最大連接數(shù)

#?執(zhí)行服務(wù)器配置

executor.maxThreads=50? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #最大線程數(shù)

executor.port=12321? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#端口號(hào)(如修改,請(qǐng)與web服務(wù)中一致)

executor.flow.threads=30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #線程數(shù)

2.6 啟動(dòng)web服務(wù)器

在azkaban web服務(wù)器目錄下執(zhí)行啟動(dòng)命令


2.7 啟動(dòng)執(zhí)行服務(wù)器

在執(zhí)行服務(wù)器目錄下執(zhí)行啟動(dòng)命令

啟動(dòng)完成后,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務(wù)器IP地址:8443,即可訪問azkaban服務(wù)了。在登錄中輸入剛才新的戶用名及密碼(默認(rèn)用戶名和密碼都是azkaban),點(diǎn)擊?login。

到這里我們的azkaban就安裝完成了,安裝的過程有可能會(huì)發(fā)現(xiàn)問題,我列出一些常見的問題,希望有幫助。

三、安裝過程有可能出現(xiàn)的問題

問題1、啟動(dòng)azkaban時(shí)出現(xiàn)user xml file conf/azkaban-users.xml doesn't exit

這個(gè)問題我們?cè)诎惭b的時(shí)候已經(jīng)提出來,就是在2.5.1步驟中配置/root/azkaban/server/conf目錄下的azkaban.properties文件,將azkaban-users.xml路徑改成絕對(duì)路徑

接著再重新啟動(dòng)一下試試。

問題2、啟動(dòng)azkaban出現(xiàn)錯(cuò)誤:Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40

這個(gè)問題是“NoClassDefFoundError”是啟動(dòng)azkaban時(shí)并沒有找到類;“Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40” 時(shí)azkaban的server和executor中缺少一個(gè)叫derby.jar的包,我在github上第四個(gè)文件就是下載的derby的一個(gè)jar包,解壓出來找到derby.jar,然后上傳到/root/azkaban/server/lib和/root/azkaban/executor/lib目錄中,然后重新啟動(dòng)試試。

問題3、啟動(dòng)時(shí)azkaban 提交 job報(bào)錯(cuò):Error submitting flow command. org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:12321 refused

導(dǎo)致的這個(gè)問題的原因可能是123321端口已經(jīng)開啟,產(chǎn)生了沖突

解決辦法:

排查 azkaban 執(zhí)行服務(wù)器有沒有啟動(dòng)。使用 jps 命令查看:

AzkabanExecutorServer

AzkabanWebServer

四、azkaban實(shí)戰(zhàn)

Azkaban內(nèi)置的任務(wù)類型支持command、java

1、command類型之單一job案例

a、創(chuàng)建job描述文件(文件類型一定是.job格式)

b、將job資源文件打包成zip文件


c、通過azkaban的web管理平臺(tái)創(chuàng)建project并上傳job壓縮包

首先創(chuàng)建project

d、啟動(dòng)執(zhí)行該job


綠色:執(zhí)行成功

藍(lán)色:正在執(zhí)行

紅色:執(zhí)行失敗

這里是綠色說明執(zhí)行成功。這里特別注意一下:command.job如果是windows系統(tǒng)下創(chuàng)建的可能會(huì)報(bào)錯(cuò),這時(shí)候盡量是在linux系統(tǒng)下(比如服務(wù)器)創(chuàng)建該文件然后編輯打包上傳。

2、command類型之多job工作流案例

2.1 創(chuàng)建有依賴關(guān)系的多個(gè)job描述

第一個(gè)job:master.job

第二個(gè)job:slave.job

2.2 將所有job資源文件打到一個(gè)zip包中

2.3 創(chuàng)建工程


2.4 在azkaban的web管理界面創(chuàng)建工程并上傳zip包


2.5 啟動(dòng)工作流并查看結(jié)果


3、HDFS操作任務(wù)

a、創(chuàng)建job描述文件

b、將job資源文件打包成zip文件

c、通過azkaban的web管理平臺(tái)創(chuàng)建project并上傳job壓縮包

d、啟動(dòng)執(zhí)行該job

e、查看結(jié)果

hadoop上已經(jīng)創(chuàng)建azkaban文件夾

4、MapReduce任務(wù)

在做這個(gè)任務(wù)之前我們進(jìn)行一些準(zhǔn)備工作

首先是在hadoop創(chuàng)建文件夾,在

編輯一個(gè)hello.txt,里面的內(nèi)容可以隨便寫,主要是用來測(cè)試

將編輯好的文本上傳到創(chuàng)建的文件夾下


a、創(chuàng)建job描述文件,及mr程序jar包(示例中直接使用hadoop自帶的example.jar)

b、將所有job資源文件打到一個(gè)zip包中

c、在azkaban的web管理界面創(chuàng)建工程并上傳zip包

d、啟動(dòng)job,并查看結(jié)果

5、HIVE腳本任務(wù)

5.1、創(chuàng)建job描述文件和hive腳本

a、hive腳本:test.sql

b、job描述文件 hive.job

c、我們?cè)赼.txt中創(chuàng)建一些數(shù)據(jù)

d、將所有資源文件打包到一個(gè)zip包中

e、在azkaban的web管理界面創(chuàng)建工程并上傳zip包

f、啟動(dòng)job并查看結(jié)果

說明數(shù)據(jù)庫寫入成功,到這里azkaban就講完了,有什么問題可以私信我。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評(píng)論 2 380

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