溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HBase性能測試工具YCSB怎么安裝

發(fā)布時間:2021-11-10 10:16:47 來源:億速云 閱讀:140 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)HBase性能測試工具YCSB怎么安裝的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

YCSB

一、背景概念

英文全稱:Yahoo!CloudServing Benchmark(YCSB)。是Yahoo公司的一個用來對云服務(wù)進行基礎(chǔ)測試的工具。目標是促進新一代云數(shù)據(jù)服務(wù)系統(tǒng)的性能比較。為四個廣泛使用的系統(tǒng):Cassandra、HBase、PNUTS和一個簡單的片式MySQL執(zhí)行,訂了套核心基礎(chǔ)測試和結(jié)果報告。

二、資源獲取

首先在官網(wǎng)上下載源碼編譯或者直接下載軟件包

https://github.com/brianfrankcooper/YCSB/releases/tag/0.10.0

HBase性能測試工具YCSB怎么安裝

編譯的話需要maven工程和其他資源包的依賴比較麻煩,建議直接下載軟件包。

補充一點編譯的內(nèi)容:

下載好最新源碼

HBase性能測試工具YCSB怎么安裝

解壓到本地并進入源碼根目錄YCSB-0.10.0

如果想編譯出完整版的話直接輸入

mvn clean package

編譯成功的話,在YCSB-0.10.0/distribution目錄下會有對應(yīng)的ycsb的壓縮包,拷貝解壓即可使用

這種方法編譯出的完整版ycsb適用于多種數(shù)據(jù)庫所以依賴的庫太多,目標文件太大,耗費時間太長,不建議用這種方式編譯。

建議單獨編一個只用于測試某個數(shù)據(jù)庫(例如hbase)的ycsb可輸入

mvn -pl com.yahoo.ycsb:hbase10-binding -am clean package  #我就是用這種方法編的

編譯結(jié)果節(jié)選:

…..

[INFO] Building tar: /opt/YCSB-0.10.0/hbase10/target/ycsb-hbase10-binding-0.10.0.tar.gz

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Summary:

[INFO]

[INFO] YCSB Root ......................................... SUCCESS [1.903s]

[INFO] Core YCSB ......................................... SUCCESS [8.384s]

[INFO] Per Datastore Binding descriptor .................. SUCCESS [0.497s]

[INFO] YCSB Datastore Binding Parent ..................... SUCCESS [0.582s]

[INFO] HBase 1.0 DB Binding .............................. SUCCESS [51.209s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 1:03.143s

[INFO] Finished at: Sat Jul 09 11:30:05 PHT 2016

[INFO] Final Memory: 52M/1694M

[INFO] ------------------------------------------------------------------------

 

這種方法編譯成功的話,在YCSB-0.10.0/hbase10/target 目錄下會有

ycsb-hbase10-binding-0.10.0.tar.gz 壓縮包即我們的目標文件,解壓之后即可使用

環(huán)境中的mvn倉庫使用的是172.7.1.216上的資源,在實際編譯的過程中會遇到依賴包不匹配或者依賴包不存在的問題,可以手動的在search.maven.org上去搜索下載相應(yīng)的資源放在本地的~/.m2/repository/ 的對應(yīng)目錄下即可

我們這里測的是hbase所以就是直接下載了ycsb-hbase10-binding-0.10.0.tar.gz(注意這個只是對hbase10即hbase1.0的適用,官網(wǎng)上有一個對所有數(shù)據(jù)庫全適用的軟件包,300M太大了網(wǎng)絡(luò)不好沒有必要去下)使用。

三、配置與使用

這里首先要去檢查下hbase-site.xml中的配置是否正確,不然在運行ycsb時會報錯

 HBase性能測試工具YCSB怎么安裝

<property>

  <name>hbase.regionserver.global.memstore.size</name>

  <value>0.4</value>

</property>

.

.

.

<property>

      <name>hfile.block.cache.size</name>

      <value>0.2</value>

    </property>

 

將下載好的ycsb-hbase10-binding-0.10.0.tar.gz解壓使用

目錄結(jié)構(gòu):

[root@node1 ycsb-hbase10-binding-0.10.0]# ll

total 24

drwxr-xr-x 2 root root   46 Jul  8 15:12 bin

drwxr-xr-x 2 root root 4096 Jul  8 15:12 lib

-rw-r--r-- 1 root root 8082 Jul  7 20:45 LICENSE.txt

-rw-r--r-- 1 root root  615 Jul  7 20:45 NOTICE.txt

-rw-r--r-- 1 root root 5484 Jul  7 20:45 README.md

drwxrwxr-x 2 root root  126 Jul  7 20:45 workloads

 

這里額外介紹一下一個完全版本的ycsb的目錄結(jié)構(gòu)

[root@node1 ycsb-0.1.4]# ll

total 20

drwxrwxrwx 2  501 games   31 Feb 24  2012 bin

drwxr-xr-x 3 root root    16 Jul  8 11:49 cassandra-binding

-rw-r--r-- 1  501 games 2291 Feb 24  2012 CHANGELOG

drwxr-xr-x 3 root root    16 Jul  8 11:49 core

drwxr-xr-x 4 root root    27 Jul  8 11:49 gemfire-binding

drwxr-xr-x 4 root root    27 Jul  8 11:49 hbase-binding

drwxr-xr-x 4 root root    27 Jul  8 11:49 infinispan-binding

drwxr-xr-x 4 root root    27 Jul  8 11:49 jdbc-binding

-rw-r--r-- 1  501 games 8082 Feb 19  2012 LICENSE.txt

drwxr-xr-x 3 root root    29 Jul  8 11:49 mapkeeper-binding

drwxr-xr-x 3 root root    16 Jul  8 11:49 mongodb-binding

drwxr-xr-x 4 root root    40 Jul  8 11:49 nosqldb-binding

-rw-r--r-- 1  501 games  479 Feb 19  2012 NOTICE.txt

-rw-r--r-- 1  501 games  952 Feb 24  2012 README

drwxr-xr-x 3 root root    16 Jul  8 11:49 redis-binding

drwxr-xr-x 2 root root    27 Jul  8 14:38 results

drwxr-xr-x 4 root root    27 Jul  8 11:49 voldemort-binding

drwxrwxrwx 2  501 games  102 Feb 22  2012 workloads

 

完整版需要手動去拷貝相關(guān)hbase庫到hbase-binding的lib目錄下,并將hbase-site.xml拷貝至hbase-binding的conf目錄下。

而我們ycsb-hbase10-binding-0.10.0針對性更強更加精簡,在lib目錄下面有所需的各種庫文件,無需手動從hbase的lib目錄下去cp過來了,也沒有conf目錄,我們只需直接使用bin下面的ycsb即可。

下面介紹下具體的使用方法:

1、  hbase上建表,YCSB需要在HBase中創(chuàng)建一張叫usertable的表,表中包含一個Cloumn Family,CF的名稱可以自定義。先后執(zhí)行以下兩個命令:

hbase(main):011:0* n_splits=120

=> 120

 

hbase(main):015:0> create 'usertable','family',{SPLITS => (1...n_splits).map{|i| "user#{1000+i*(9999-1000)/n_splits}"}}

0 row(s) in 18.3610 seconds

 

=> Hbase::Table - usertable

 

命令含義:pre-splittingstrategy預分區(qū)和建表

  使用HBase shell建表的同時建立一些預分區(qū),這樣可以防止初次插入數(shù)據(jù)時的熱點問題

2、使用以下命令進行測試

首先初始化數(shù)據(jù)

-cp指定了hbase的配置文件所在的路徑/usr/hdp/2.4.2.0-258/hbase/conf/(前面提到過精簡版的ycsb沒有conf目錄)

用戶首先需要用load初始化數(shù)據(jù)庫,然后用run運行負載。dbname指定了目標數(shù)據(jù)庫。

目前YCSB自帶了6種負載(workloads/目錄下),其中五種如下表。用戶可以自定義操作(read、update、insert和scan)的比例,以及選擇操作目標記錄的分布:Uniform(等概率隨機選擇記錄)、Zipfian(隨機選擇記錄,存在熱紀錄)和Latest(近期寫入的記錄是熱記錄)。

HBase性能測試工具YCSB怎么安裝

-P指定負載文件的位置。

-p用來設(shè)置一些參數(shù),比如數(shù)據(jù)庫的 ip和port。當然,在運行YCSB之前,目標數(shù)據(jù)庫必須是開啟的。測試完成后,YCSB會打印平均/最小/最大延遲等信息。后面可以帶參數(shù)threads recordcount 等等

-s 輸出運行狀態(tài),在運行時間較長時比較有用

[root@node1 ycsb-hbase10-binding-0.10.0]#bin/ycsb load hbase10 -P workloads/workloada -cp/usr/hdp/2.4.2.0-258/hbase/conf/ -p table=usertable -p columnfamily=family -s -threads10 -p recordcount=100

#這里加載的是workloada負載,read和update操作各占一半

2016-07-08 16:19:37,129 WARN  [Thread-2] util.DynamicClassLoader: Failed to identify the fs of dir hdfs://node1.dcom:8020/apps/hbase/data/lib, ignored

java.io.IOException: No FileSystem for scheme: hdfs   該錯誤可以忽略?。?!

         at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2579)

         at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2586)

         at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89)

         at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2625)

         at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2607)

         at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:368)

         at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)

         at org.apache.hadoop.hbase.util.DynamicClassLoader.<init>(DynamicClassLoader.java:104)

         at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:232)

         at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64)

         at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75)

         at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)

         at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:833)

         at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:623)

         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

         at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

         at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)

         at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)

         at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)

         at com.yahoo.ycsb.db.HBaseClient10.init(HBaseClient10.java:149)

         at com.yahoo.ycsb.DBWrapper.init(DBWrapper.java:99)

         at com.yahoo.ycsb.ClientThread.run(Client.java:418)

         at java.lang.Thread.run(Thread.java:745)

 

Ycsb運行完之后的結(jié)果打印和分析:

[OVERALL], RunTime(ms), 2787.0         數(shù)據(jù)加載所用時間:2.787秒

[OVERALL], Throughput(ops/sec), 35.88087549336204       加載操作的吞吐量,平均并發(fā)量每秒35.88條

[TOTAL_GCS_PS_Scavenge], Count, 1.0

[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 20.0

[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.7176175098672408

[TOTAL_GCS_PS_MarkSweep], Count, 0.0

[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0

[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0

[TOTAL_GCs], Count, 1.0

[TOTAL_GC_TIME], Time(ms), 20.0

[TOTAL_GC_TIME_%], Time(%), 0.7176175098672408

[CLEANUP], Operations, 2.0                    執(zhí)行cleanup的操作總數(shù),2

[CLEANUP], AverageLatency(us), 63575.0             平均響應(yīng)時間63.575ms

[CLEANUP], MinLatency(us), 14.0                                     最小響應(yīng)時間0.014ms

[CLEANUP], MaxLatency(us), 127167.0                  最大響應(yīng)時間127.167ms

[CLEANUP], 95thPercentileLatency(us), 127167.0        95%的cleanup操作延時在127.167ms以內(nèi)

[CLEANUP], 99thPercentileLatency(us), 127167.0        99%的cleanup操作延時在127.167ms以內(nèi)

[INSERT], Operations, 100.0          執(zhí)行insert操作的總數(shù),100

[INSERT], AverageLatency(us), 13681.54     每次insert操作的平均時延,13.68154ms

[INSERT], MinLatency(us), 5556.0         所有insert操作最小延時,5.556ms

[INSERT], MaxLatency(us), 201343.0   所有insert操作最大延時,201.343ms

[INSERT], 95thPercentileLatency(us), 30063.0     95%的insert操作延時在30.063ms以內(nèi)

[INSERT], 99thPercentileLatency(us), 53183.0     99%的insert操作延時在53.183ms以內(nèi)

[INSERT], Return=OK, 1000  成功返回數(shù),1000

 

然后執(zhí)行run程序

[root@node1ycsb-hbase10-binding-0.10.0]# bin/ycsb run hbase10 -Pworkloads/workloada -cp /usr/hdp/2.4.2.0-258/hbase/conf/ -p table=usertable -pcolumnfamily=family -s –threads 10 -p recordcount=100

Ycsb運行完成結(jié)果打印與分析:

[OVERALL], RunTime(ms), 6921.0                                              數(shù)據(jù)加載所用時間:6.921秒

[OVERALL], Throughput(ops/sec), 144.48779078167894    加載操作的吞吐量,平均并發(fā)量每秒144.48條

[TOTAL_GCS_PS_Scavenge], Count, 1.0

[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 20.0

[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.2889755815633579

[TOTAL_GCS_PS_MarkSweep], Count, 0.0

[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0

[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0

[TOTAL_GCs], Count, 1.0

[TOTAL_GC_TIME], Time(ms), 20.0

[TOTAL_GC_TIME_%], Time(%), 0.2889755815633579

[CLEANUP], Operations, 2.0                                                         執(zhí)行cleanup的操作總數(shù),2

[CLEANUP], AverageLatency(us), 71591.5                               平均響應(yīng)時間71.5915ms

[CLEANUP], MinLatency(us), 15.0                                              最小響應(yīng)時間0.015ms

[CLEANUP], MaxLatency(us), 143231.0                                    最大響應(yīng)時間143.231ms

[CLEANUP], 95thPercentileLatency(us), 143231.0                 95%的insert操作延時在143.231ms以內(nèi)

[CLEANUP], 99thPercentileLatency(us), 143231.0                 99%的insert操作延時在143.231ms以內(nèi)

[READ], Operations, 480.0                                                執(zhí)行read的操作總數(shù),480

[READ], AverageLatency(us), 5027.9625                               平均響應(yīng)時間5.027ms

[READ], MinLatency(us), 2254.0                                               最小響應(yīng)時間2.254ms

[READ], MaxLatency(us), 158847.0                                              最大響應(yīng)時間158.847ms

[READ], 95thPercentileLatency(us), 10767.0                          95%的read操作延時在10.767ms以內(nèi)

[READ], 99thPercentileLatency(us), 14599.0                          99%的read操作延時在14.599ms以內(nèi)

[READ], Return=OK, 480                                                               成功返回數(shù),480

[UPDATE], Operations, 520.0                                                       執(zhí)行read的操作總數(shù),520

[UPDATE], AverageLatency(us), 5812.123076923077          平均響應(yīng)時間5.812ms

[UPDATE], MinLatency(us), 3302.0                                            最小響應(yīng)時間3.302ms

[UPDATE], MaxLatency(us), 86207.0                                         最大響應(yīng)時間86.207ms

[UPDATE], 95thPercentileLatency(us), 9991.0                        95%的read操作延時在9.991ms以內(nèi)

[UPDATE], 99thPercentileLatency(us), 11839.0                      99%的insert操作延時在11.839ms以內(nèi)

[UPDATE], Return=OK, 520                                                           成功返回數(shù),520

 

四、用例介紹

這里介紹下,我們在用ycsb進行hbase性能測試時的用例方法。

首先,測試使用了ycsb_load.sh和ycsb_run.sh這兩個腳本來直接進行,用戶只需自定義一個類似于workload類型的配置文件即可。

對應(yīng)目錄結(jié)構(gòu):

[root@node5 test]# pwd

/root/ycsb-hbase10-binding-0.10.0/workloads/test

 

[root@node5 test]# ll

total 4338592

-rw-r--r-- 1 root hadoop       1189 Aug 27 22:35 TR1003

-rw-r--r-- 1 root hadoop 4080039015 Aug 29 03:12 TR1003.report

-rw-r--r-- 1 root hadoop        800 Aug 30 16:20 TR1004

-rw-r--r-- 1 root hadoop  306542869 Aug 30 16:31 TR1004.report

-rw-r--r-- 1 root hadoop        751 Aug 30 10:06 TR1005

-rw-r--r-- 1 root hadoop   56106292 Aug 30 10:20 TR1005.report

-rw-r--r-- 1 root hadoop        631 Aug 23 19:07 workload_test_template

-rwxr-xr-x 1 root hadoop        590 Aug 23 17:52 ycsb_load.sh

-rwxr-xr-x 1 root hadoop        609 Aug 30 16:35 ycsb_run.sh

其中后綴名為report的文件是腳本運行和ycsb運行時的所有終端打印記錄(文件較大,測完之后取得關(guān)鍵數(shù)值后可以刪除)。

Ycsb_load.sh腳本內(nèi)容:

echo "******Loading test begin******"

 

# define the path of ycsb

YCSB="/root/ycsb-hbase10-binding-0.10.0"

 

# define the path of  hbase_site.xml

hbase=$YCSB"/bin"

 

# define test path

test=$YCSB"/workloads/test/"

 

# define the file path of workload

workload=$test$1

 

# define the log file name

report=$test$1".report"

 

# define ycbs runner

runner=$YCSB"/bin/ycsb"

 

# define measurement param

raw_file=$test$1".raw"

measurement_param="measurement.raw.output_file="$raw_file

 

# run test

$runner load hbase10 -cp $hbase -P $workload -s -jvm-args='-Xmx32g' 1>>$report 2>>$report

 

echo "******Loading test end******"

 

腳本內(nèi)容較為簡單,ycsb_run.sh腳本的內(nèi)容與上述內(nèi)容幾乎一樣(最后一句的ycsb運行命令中的load改為run),其中$1變量時用戶在運行時所指定的配置文件(workload、TR1003等)。

-jvm-args='-Xmx32g' 這個是用來配置ycsb運行時jvm虛擬機的內(nèi)存大小的,這里的意思是最多給ycsb clinet進程分配32G的內(nèi)存

具體用法:sh ycsb_load.sh TR1003

ycsb配置文件TR1003(作用跟workload文件相同)

# The thread count

threadcount=20

 

# The number of fields in a record

fieldcount=1

 

# The size of each field (in bytes)

fieldlength=9216

 

# Number of Records will be loaded

recordcount=1500000000

 

# Number of Operations will be handle in run parsh

operationcount=1500000000

readallfields=true

insertorder=hashed

insertstart=0

insertcount=500000000

 

# Control Porption of hbase operation type

readproportion=0

updateproportion=0

scanproportion=1

insertproportion=0

 

# The following param always be fixed

# The table name

table=usertable

 

# The colume family

columnfamily=cf

 

# The workload class

workload=com.yahoo.ycsb.workloads.CoreWorkload

 

# The measurement type

measurementtype=raw

 

clientbuffering=true

 

writebuffersize=25165824

 

#requestdistribution=zipfian

這個配置文件是單獨用來load階段加載數(shù)據(jù)庫時候用的,其中clientbuffer配置項是配置hbase client端的寫緩存,配置寫緩存有利用減少寫hbase操作時的rpc開銷,具體作用可以查看hbase測試調(diào)優(yōu)文檔,默認是不配的,該配置項默認的值是配置項writebuffersize=1024*1024*12(12M),requestdistribution是指操作需求分布采用的方式,。

Run階段配置文件TR1003:

# The thread count

threadcount=100

 

# The number of fields in a record

fieldcount=1

 

# The size of each field (in bytes)

fieldlength=9216

 

# Number of Records will be loaded

recordcount=1500000000

 

# Number of Operations will be handle in run parsh

operationcount=2000000

readallfields=true

#insertorder=hashed

#insertstart=0

#insertcount=500000000

 

# Control Porption of hbase operation type

readproportion=0

updateproportion=0

scanproportion=1

insertproportion=0

 

# The following param always be fixed

# The table name

table=usertable

 

# The colume family

columnfamily=cf

 

# The workload class

workload=com.yahoo.ycsb.workloads.CoreWorkload

 

# The measurement type

measurementtype=raw

 

maxscanlength=1000000

 

#hbase.usepagefilter=false

 

#scanlengthdistribution=zipfian

 

#requestdistribution=latest

 

這個配置文件用在run階段,與ycsb_run.sh配合使用,這里run階段主要就是讀hbase數(shù)據(jù)庫的數(shù)據(jù)。

scan:

Maxscanlength配置項用來指定scan的條數(shù)(在ycsb代碼中的實現(xiàn)方式是取1~Maxscanlength中的隨機值作為一次scan的條數(shù))

hbase.usepagefilter配置項是scan一次的結(jié)果是否采取分頁顯示,默認是開啟的

scanlengthdistribution配置項決定了以何種方式從1~Maxscanlength區(qū)間中取值,還是默認的uniform(等概率隨機分布)。

另外值得注意的是在執(zhí)行scan操作中,ycsb每秒操作數(shù)currentops/sec可能會很小:

2016-08-30 04:21:40:791 60 sec: 1 operations; 0.1 current ops/sec; est completion in 1388 days 21hours SCAN count: 1, average latency(us): 49083737.00

這個是由于ycsb計算方式的原因,它只計算每次具體的操作數(shù),而不是scan總數(shù),所以0.1可以理解為在10秒鐘的時間內(nèi)執(zhí)行了1次scan操作,所以這10秒的平均操作數(shù)是0.1 current ops/sec。

對于scan操作我們可以通過帶寬來計算一次操作到底掃描了多少條數(shù)據(jù)。

Read:

Read的話跟load階段輸出類似,每次查找一條讀取。

注意!?。。?/p>

     Load階段其實就是裝載數(shù)據(jù)即往hbase中插入數(shù)據(jù),workload文件中的recordcount就是將要插入的條數(shù),run階段就是對hbase進行各種操作,operationcount就是操作數(shù),因此load階段必須要正確執(zhí)行完成,否則在run階段會有類似于[READ-FAILED]之類的錯誤。

感謝各位的閱讀!關(guān)于“HBase性能測試工具YCSB怎么安裝”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI