欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 Hbase的簡單學(xué)習(xí)一

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 Hbase的簡單學(xué)習(xí)一

http://yzkb.51969.com/

一 Hbase的搭建與安裝

1.1 安裝

1.準(zhǔn)備好文件,上傳到Linux上

2.解壓文件??tar zxvf hbase-2.2.7-bin.tar.gz -C ../

../是解壓到的路徑

1.2 配置文件

1.配置環(huán)境變量 去etc/profile目錄下

export HBASE_HOME=/usr/local/soft/hbase-2.2.7 export PATH=$PATH:$HBASE_HOME/bin

2.修改hbase-site.xml文件

hbase.zookeeper.quorum

master,node1,node2

hbase.rootdir

hdfs://master:9000/hbase

hbase.cluster.distributed

true

hbase.unsafe.stream.capability.enforce

false

2.修改hbase-env.sh文件

export HBASE_MANAGES_ZK=false export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

3.修改regionservers文件

node1 node2

4.同步一份給子節(jié)點(diǎn)

scp -r hbase-2.2.7 node2:`pwd`

1.3啟動(dòng)

1.hbase啟動(dòng)順序: zk-->hadoop-->hbase

2.命令

a、啟動(dòng)zk 三臺(tái)機(jī)器都要輸入

zkServer.sh start

b、啟動(dòng)Hadoop集群

start-all.sh

c、啟動(dòng)Hbase

start-hbase.sh

1.4 進(jìn)入客戶端

hbase xhell

1.5 進(jìn)入網(wǎng)頁端

http://master:16010/

1.6?退出進(jìn)程的順序

1.先退hbase

stop-hbase.sh

這里注意 關(guān)閉這個(gè)的時(shí)候最好 flush一下 將操作客戶端的表都刷一下,最最好 每次操作一下表就flush ‘表名’ 一下

2. 再退Hadoop集群

stop-all.sh

3 關(guān)閉zk

三臺(tái)機(jī)器都要關(guān)閉

zkServer.sh stop

二 Hbase的相關(guān)概念

2.1 hbase的概述

1.HBase 是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),用于存儲(chǔ)海量的結(jié)構(gòu)化或者半結(jié)構(gòu)化,非結(jié)構(gòu)化的數(shù)據(jù)(底層是字節(jié)數(shù)組做存儲(chǔ)的)

2.HBase是Hadoop的生態(tài)系統(tǒng)之一,是建立在Hadoop文件系統(tǒng)(HDFS)之上的分布式、面向列的數(shù)據(jù)庫,通過利用Hadoop的文件系統(tǒng)提供容錯(cuò)能力。如果需要進(jìn)行實(shí)時(shí)讀寫或者隨機(jī)訪問大規(guī)模的數(shù)據(jù)集的時(shí)候,會(huì)考慮使用HBase。

2.2 HBase處理數(shù)據(jù)

1.雖然Hadoop是一個(gè)高容錯(cuò)、高延時(shí)的分布式文件系統(tǒng)和高并發(fā)的批處理系統(tǒng),但是它不適用于提供實(shí)時(shí)計(jì)算;

HBase是可以提供實(shí)時(shí)計(jì)算的分布式數(shù)據(jù)庫,數(shù)據(jù)被保存在HDFS分布式文件系統(tǒng)上,由HDFS保證期高容錯(cuò)性;

但是再生產(chǎn)環(huán)境中,HBase是如何基于hadoop提供實(shí)時(shí)性呢?

HBase上的數(shù)據(jù)是以StoreFile(HFile)二進(jìn)制流的形式存儲(chǔ)在HDFS上block塊兒中;

但是HDFS并不知道的HBase用于存儲(chǔ)什么,它只把存儲(chǔ)文件認(rèn)為是二進(jìn)制文件,也就是說,HBase的存儲(chǔ)數(shù)據(jù)對于HDFS文件系統(tǒng)是透明的。

2.3 hbase與hadoop

2.4 數(shù)據(jù)模型

1.列簇:一個(gè)HBase表被分組成許多“列族”的集合,它是基本的訪問控制單元。

2.行:每個(gè)表由若干行組成,每個(gè)行有一個(gè)行鍵作為這一行的唯一標(biāo)識。訪問表中的行只有三種方式:通過單個(gè)行鍵進(jìn)行查詢、通過一個(gè)行鍵的區(qū)間來訪問、全表掃描。

3.列修飾符(列限定符):列族里的數(shù)據(jù)通過列限定符(或列)來定位

4.單元格:在HBase表中,通過行、列族和列限定符確定一個(gè)“單元格”(cell),單元格中存儲(chǔ)的數(shù)據(jù)沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]

5.時(shí)間戳:每個(gè)單元格都保存著同一份數(shù)據(jù)的多個(gè)版本,這些版本采用時(shí)間戳進(jìn)行索引

2.5 數(shù)據(jù)坐標(biāo)

2.6 區(qū)域

1.HBase自動(dòng)把表水平劃分為區(qū)域(Region),每個(gè)區(qū)域都是有若干連續(xù)行構(gòu)成的,一個(gè)區(qū)域由所屬的表、起始行、終止行(不包括這行)三個(gè)要素來表示。

2.一開始,一個(gè)表只有一個(gè)區(qū)域,但是隨著數(shù)據(jù)的增加,區(qū)域逐漸變大,等到它超出設(shè)定的閾值(128M)大小,就會(huì)在某行的邊界上進(jìn)行拆分,分成兩個(gè)大小基本相同的區(qū)域。然后隨著數(shù)據(jù)的再增加,區(qū)域就不斷的增加,如果超出了單臺(tái)服務(wù)器的容量,就可以把一些區(qū)域放到其他節(jié)點(diǎn)上去,構(gòu)成一個(gè)集群。也就是說:集群中的每個(gè)節(jié)點(diǎn)(Region Server)管理整個(gè)表的若干個(gè)區(qū)域。所以,我們說:區(qū)域是HBase集群上分布數(shù)據(jù)的最小單位

三 Hbase的架構(gòu)

3.1 組件

1.HBase由三種類型的服務(wù)器以主從模式構(gòu)成:

Region Server:負(fù)責(zé)數(shù)據(jù)的讀寫服務(wù),用戶通過與Region server交互來實(shí)現(xiàn)對數(shù)據(jù)的訪問。 HBase HMaster:負(fù)責(zé)Region的分配及數(shù)據(jù)庫的創(chuàng)建和刪除等操作。 ZooKeeper:負(fù)責(zé)維護(hù)集群的狀態(tài)(某臺(tái)服務(wù)器是否在線,服務(wù)器之間數(shù)據(jù)的同步操作及master的選舉等)。

HDFS的DataNode負(fù)責(zé)存儲(chǔ)所有Region Server所管理的數(shù)據(jù),即HBase中的所有數(shù)據(jù)都是以HDFS文件的形式存儲(chǔ)的。出于使Region server所管理的數(shù)據(jù)更加本地化的考慮,Region server是根據(jù)DataNode分布的。HBase的數(shù)據(jù)在寫入的時(shí)候都存儲(chǔ)在本地。但當(dāng)某一個(gè)region被移除或被重新分配的時(shí)候,就可能產(chǎn)生數(shù)據(jù)不在本地的情況。這種情況只有在所謂的compaction之后才能解決。

2.Zookeeper

保證任何時(shí)候,集群中只有一個(gè)master

存貯所有Region的尋址入口。

實(shí)時(shí)監(jiān)控Region server的上線和下線信息。并實(shí)時(shí)通知Master

存儲(chǔ)HBase的schema和table元數(shù)據(jù)的meta信息

3.Master

為Region server分配region

負(fù)責(zé)Region server的負(fù)載均衡

發(fā)現(xiàn)失效的Region server并重新分配其上的region

管理用戶對table的增刪改操作

4.RegionServer

Region server維護(hù)region,處理對這些region的IO請求

Region server負(fù)責(zé)切分在運(yùn)行過程中變得過大的region 

5.HLog(WAL log):

HLog文件就是一個(gè)普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數(shù)據(jù)的歸屬信息,除了table和 region名字外,同時(shí)還包括sequence number和timestamp,timestamp是” 寫入時(shí)間”,sequence number的起始值為0,或者是最近一次存入文件系 統(tǒng)sequence number。

HLog SequeceFile的Value是HBase的KeyValue對象,即對應(yīng)HFile中的 KeyValue

?6.Region

HBase自動(dòng)把表水平劃分成多個(gè)區(qū)域(region),每個(gè)region會(huì)保存一個(gè)表里面某段連續(xù)的數(shù)據(jù);每個(gè)表一開始只有一個(gè)region,隨著數(shù)據(jù)不斷插 入表,region不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,region就會(huì)等分會(huì)兩個(gè)新的region(裂變);

當(dāng)table中的行不斷增多,就會(huì)有越來越多的region。這樣一張完整的表被保存在多個(gè)Regionserver上。

?7.Memstore 與 storefile

一個(gè)region由多個(gè)store組成,一個(gè)store對應(yīng)一個(gè)CF(列簇) store包括位于內(nèi)存中的memstore和位于磁盤的storefile寫操作先寫入 memstore,當(dāng)memstore中的數(shù)據(jù)達(dá)到某個(gè)閾值,hregionserver會(huì)啟動(dòng) flashcache進(jìn)程寫入storefile,每次寫入形成單獨(dú)的一個(gè)storefile 當(dāng)storefile文件的數(shù)量增長到一定閾值后,系統(tǒng)會(huì)進(jìn)行合并(minor、 major compaction),在合并過程中會(huì)進(jìn)行版本合并和刪除工作 (majar),形成更大的storefile。 當(dāng)一個(gè)region所有storefile的大小和超過一定閾值后,會(huì)把當(dāng)前的region 分割為兩個(gè),并由hmaster分配到相應(yīng)的regionserver服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。 客戶端檢索數(shù)據(jù),先在memstore找,找不到再找storefile HRegion是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元。最小單元就表 示不同的HRegion可以分布在不同的HRegion server上。 HRegion由一個(gè)或者多個(gè)Store組成,每個(gè)store保存一個(gè)columns family。 每個(gè)Strore又由一個(gè)memStore和0至多個(gè)StoreFile組成。

如圖:StoreFile 以HFile格式保存在HDFS上。

?3.2 理解

  1、flush刷新在HDFS上呈現(xiàn)究竟是怎么刷新的呢??     我們目前剛剛學(xué)習(xí)的時(shí)候,添加數(shù)據(jù),都是一條一條的put進(jìn)去,而我們在put的數(shù)據(jù)比較少(小于128M)的時(shí)候,我們put完去HDFS上并未查看到我們put的文件,這是因?yàn)閿?shù)據(jù)還在內(nèi)存中,也就是還在memStore中,所以要想在HDFS中查看到,我們必須手動(dòng)刷新到磁盤中,這是將memStore的數(shù)據(jù)刷新到StoreFile中去,這樣我們在HDFS中就可以查看到了?! ?/p>

  2、為什么Hbase不可以使用像Mysql那樣進(jìn)行查詢??     首先,我們應(yīng)該可以感受到,我們在插入的時(shí)候,每行數(shù)據(jù),有多少列,列名叫什么完全是我們自己定義的,之所以不支持像MySql那樣對列進(jìn)行查詢和操作,因?yàn)椴淮_定列的個(gè)數(shù)和名稱。

  3、數(shù)據(jù)最后存在HDFS上的,HDFS不支持刪改,為什么Hbase就可以呢??     這里有個(gè)思想誤區(qū),的確,數(shù)據(jù)是以HFile形式存在HDFS上的,而且HDFS的確是不支持刪改的,但是為什么Hbase就支持呢?首先,這里的刪除并不是真正意義上的對數(shù)據(jù)進(jìn)行刪除,而是對數(shù)據(jù)進(jìn)行打上標(biāo)記,我們再去查的時(shí),就不會(huì)查到這個(gè)打過標(biāo)記的數(shù)據(jù),這個(gè)數(shù)據(jù)Hmaster會(huì)每隔1小時(shí)清理。修改是put兩次,Hbase會(huì)取最新的數(shù)據(jù),過期數(shù)據(jù)也是這個(gè)方式被清理。

?四 hbase shell

4.1 help

1.可以通過 help '命名名稱'來查看命令行的具體使用,包括命令的作用和用法。 通過help ‘hbase’ 命名來查看hbase shell 支持的所有命令,hbase將命令進(jìn)行分組,其中ddl、dml使用較多。

4.2 general 類

4.2.1?顯示集群狀態(tài)status

4.2.2?查詢數(shù)據(jù)庫版本version

4.2.3 顯示當(dāng)前用戶與組 whoami

?4.2.4?查看操作表的命令table_help

?4.2.5??退出HBase Shell exit

4.3 DDL

4.3.1. 創(chuàng)建表create

1.創(chuàng)建表時(shí)只需要指定列族名稱,不需要指定列名。

2.語法

create '表名', {NAME => '列族名1'}, {NAME => '列族名2'}, {NAME => '列族名3'} # 此種方式是上上面的簡寫方式,使用上面方式可以為列族指定更多的屬性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等屬性 create '表名', '列族名1', '列族名2', '列族名3'

create '表名', {NAME => '列族名1', VERSIONS => 版本號, TTL => 過期時(shí)間, BLOCKCACHE => true}

3.示例

create 'tbl_user', 'info', 'detail' create 't1', {NAME => 'cf1', VERSIONS => 2}

4.3.2 修改(添加、刪除)表結(jié)構(gòu)Schema alter

1 添加一個(gè)列簇

語法?alter '表名', '列族名'

?2.刪除一個(gè)列簇

語法:alter '表名', {NAME=> '列族名', METHOD=> 'delete'}

示例:alter 't1',{NAME => 'cf2', METHOD => 'delete'}

3. 修改列簇屬性

可以修改列族的VERSIONS、IN_MEMORY

alter 't1', NAME => 'f1', VERSIONS => 5

4.3.3 獲取表的描述describe

1.語法

describe '表名'

4.3.4 列舉所有表list

1.查看的是所有命名空間的表

4.3.5 表是否存在exists

語法:exists '表名'

4.3.6 啟用表enable和禁用表disable

1.通過enable和disable來啟用/禁用這個(gè)表,相應(yīng)的可以通過is_enabled和is_disabled來檢查表是否被禁用。

2.語法:

enable '表名' is_enabled '表名'

disable '表名' is_disabled '表名'

4.3.7 啟用 禁用滿足正則表達(dá)式的所有表enable_all

1.相關(guān)概念

.匹配除“\n”和"\r"之外的任何單個(gè)字符 *匹配前面的子表達(dá)式任意次

2.語法

# 匹配以t開頭的表名 disable_all 't.*' # 匹配指定命名空間ns下的以t開頭的所有表 disable_all 'ns:t.*' # 匹配ns命名空間下的所有表 disable_all 'ns:.*'

4.3.8刪除表drop

1.需要先禁用表,然后再刪除表,啟用的表是不允許刪除的

2.語法:

disable '表名' drop '表名'

4.3.9 獲取某個(gè)表賦值給一個(gè)變量 get_table

1.通過 var = get_table ‘表名’ 賦值給一個(gè)變量對象,然后對象.來調(diào)用,就像面向?qū)ο缶幊桃粯?,通過對象.方法來調(diào)用,這種方式在操作某個(gè)表時(shí)就不必每次列舉表名了。

4.3.10 獲取rowKey所在的區(qū) locate_region

4.3.11 顯示hbase所支持的所有過濾器show_filters

1.過濾器用于get和scan命令中作為篩選數(shù)據(jù)的條件,類型關(guān)系型數(shù)據(jù)庫中的where的作用

4.4 namespace

hbase中沒有數(shù)據(jù)庫的概念 , 可以使用namespace來達(dá)到數(shù)據(jù)庫分類別管理表的作用

4.4.1 列舉命名空間 list_namespace

4.4.2 獲取命名空間描述 describe_namespace

1.語法?describe_namespace '命名空間'

??

4.4.3 查看命名空間下的所有表 list_namespace_tables

4.4.4 創(chuàng)建命名空間create_namespace

4.4.5 刪除命名空間drop_namespace

4.5 DML

4.5.1 插入或者修改數(shù)據(jù)put

1.語法:

當(dāng)列族中只有一個(gè)列時(shí)'列族名:列名'使用'列族名' put '表名', '行鍵', '列族名', '列值' put '表名', '行鍵', '列族名:列名', '列值'

2.他寫入是一行寫入的

?

# 第一行數(shù)據(jù)

put 'users', 'rk1001', 'info:id', '1'

put 'users', 'rk1001', 'info:name', '張三'

put 'users', 'rk1001', 'info:age', '28'

put 'users', 'rk1001', 'detail:birthday', '1990-06-26'

put 'users', 'rk1001', 'detail:email', 'abc@163.com'

put 'users', 'rk1001', 'detail:create_time', '2019-03-04 14:26:10'

put 'users', 'rk1001', 'address', '上海市'

# 第二行數(shù)據(jù)

put 'users', 'rk1002', 'info:id', '2'

put 'users', 'rk1002', 'info:name', '李四'

put 'users', 'rk1002', 'info:age', '27'

put 'users', 'rk1002', 'detail:birthday', '1990-06-27'

put 'users', 'rk1002', 'detail:email', 'xxx@gmail.com'

put 'users', 'rk1002', 'detail:create_time', '2019-03-05 14:26:10'

put 'users', 'rk1002', 'address', '北京市'

# 第三行數(shù)據(jù)

put 'users', 'rk1003', 'info:id', '3'

put 'users', 'rk1003', 'info:name', '王五'

put 'users', 'rk1003', 'info:age', '26'

put 'users', 'rk1003', 'detail:birthday', '1990-06-28'

put 'users', 'rk1003', 'detail:email', 'xyz@qq.com'

put 'users', 'rk1003', 'detail:create_time', '2019-03-06 14:26:10'

put 'users', 'rk1003', 'address', '杭州市'

4.5.2 全表掃描scan

1.語法

scan '表名'

?2.掃描整個(gè)列簇

# 語法 scan '表名', {COLUMN=>'列族名'}

# 示例 scan 'users', {COLUMN=>'info'}

3.掃描整個(gè)列簇的某個(gè)列

# 語法 scan '表名', {COLUMN=>'列族名:列名'}

# 示例 scan 'users', {COLUMN=>'info:age'}

4.限制查幾行

語法

scan '表名',{LIMIT=>1}

意思是查一行

4.5.3 獲取數(shù)據(jù)get

1.可以獲取某一行,也可以獲取應(yīng)該單元格

# 語法 get '表名', '行鍵'

# 示例 get 'users', 'xiaoming'

2.建表的時(shí)候確定了幾個(gè)版本的值,那么獲取的時(shí)候頁可以獲取幾個(gè)版本的值

例如?create 'test1', {NAME => 'cf1', VERSIONS => 4} 建表語句

get '表名','行名',{COLUMN=>'列簇',VERSIONS=>4}

4.5.4 刪除某個(gè)列族中的某個(gè)列delete

1.語法 delete '表名', '行鍵', '列族名:列名'

2.刪除的是最新的那一列

4.5.5 刪除某行數(shù)據(jù)deleteall

1.語法?deleteall '表名', '行鍵'

?

4.5.6 清空整個(gè)表的數(shù)據(jù)truncate

1.語法?truncate '表名'

4.5.7 自增incr

1.語法 incr '表名', '行鍵', '列族:列名', 步長值

2. # 示例? # 注意:incr 可以對不存的行鍵操作,如果行鍵已經(jīng)存在會(huì)報(bào)錯(cuò),如果使用put修改了incr的值再使用incr也會(huì)報(bào)錯(cuò) # ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide incr 'tbl_user', 'xiaohong', 'info:age', 1

?

4.5.8 計(jì)數(shù)器get_counter

create 'counters', 'daily', 'weekly', 'monthly' incr 'counters', '20240415', 'daily:hits', 1 get_counter 'counters', '20240415', 'daily:hits'? 獲取計(jì)數(shù)器的值

4.5.9 修飾詞

1.修飾詞

# 語法 scan '表名', {COLUMNS => [ '列族名1:列名1', '列族名1:列名2', ...]}

# 示例 scan 'tbl_user', {COLUMNS => [ 'info:id', 'info:age']}

2.TIMESTAMP 指定時(shí)間戳

scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}

# 示例 scan 'tbl_user',{TIMERANGE=>[1551938004321, 1551938036450]}

區(qū)間是左閉右開的

3.VERSIONS

默認(rèn)情況下一個(gè)列只能存儲(chǔ)一個(gè)數(shù)據(jù),后面如果修改數(shù)據(jù)就會(huì)將原來的覆蓋掉,可以通過指定VERSIONS時(shí)HBase一列能存儲(chǔ)多個(gè)值。

create 'tbl_test', 'columnFamily1'

describe 'tbl_test'

# 修改列族版本號

alter 'tbl_test', { NAME=>'columnFamily1', VERSIONS=>3 }

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'

put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'

# 默認(rèn)返回最新的一條數(shù)據(jù)

get 'tbl_test','rowKey1','columnFamily1:column1'

# 返回3個(gè)

get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}

# 返回2個(gè)

get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}

4、STARTROW

ROWKEY起始行。會(huì)先根據(jù)這個(gè)key定位到region,再向后掃描

?

scan '表名', { STARTROW => '行鍵名'}

# 示例 scan 'users', { STARTROW => 'rk1002'}

5、STOPROW :截止到STOPROW行,STOPROW行之前的數(shù)據(jù),不包括STOPROW這行數(shù)據(jù)

# 語法 scan '表名', { STOPROW => '行鍵名'}

5.ENDROW :截止到ENDROW 行,ENDROW 行之前的數(shù)據(jù),不包括ENDROW 這行數(shù)據(jù)

scan '表名', {ENDROW => '行鍵名'}

?

6、LIMIT 返回的行數(shù)

# 語法 scan '表名', { LIMIT => 行數(shù)}

# 示例 scan 'tbl_user', { LIMIT => 2 }

4.5.10 FILTER條件過濾器

過濾器之間可以使用AND、OR連接多個(gè)過濾器。

1、ValueFilter 值過濾器

# 語法:binary 等于某個(gè)值 scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"

scan 'users',FILTER=>"ValueFilter(=,'binary:張三')"

取出張三的所有信息

# 語法 substring:包含某個(gè)值 scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"

scan 'users',FILTER=>"ValueFilter(=,'substring:2019')"

取里面包含2019的所有列

?

2、ColumnPrefixFilter 列名前綴過濾器

# 語法 substring:包含某個(gè)值 scan '表名', FILTER=>"ColumnPrefixFilter('列名前綴')"

scan 'users', FILTER=>"ColumnPrefixFilter('a')"

取出所有包含a的列的所有信息

?

3、rowKey字典排序

Table中的所有行都是按照row key的字典排序的

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 Hbase的簡單學(xué)習(xí)一

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18798529.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄