




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)分析工具:ApacheDrill:Drill的擴展性和容錯性1引言1.1ApacheDrill簡介ApacheDrill是一個開源的SQL查詢引擎,用于大規(guī)模數(shù)據(jù)集的探索性分析。它支持動態(tài)模式發(fā)現(xiàn),無需預定義模式即可查詢復雜嵌套數(shù)據(jù),如JSON、Avro、Parquet等。Drill的設計目標是提供高性能、可擴展性和容錯性,使其成為大數(shù)據(jù)分析的理想選擇。1.2擴展性和容錯性的重要性在大數(shù)據(jù)處理場景中,數(shù)據(jù)集往往非常龐大,且數(shù)據(jù)源可能分布在多個節(jié)點上。擴展性確保了系統(tǒng)能夠隨著數(shù)據(jù)量和查詢復雜度的增加而無縫擴展,滿足更高的處理需求。容錯性則保證了在節(jié)點故障或數(shù)據(jù)損壞的情況下,系統(tǒng)能夠自動恢復,繼續(xù)提供服務,這對于保證數(shù)據(jù)處理的連續(xù)性和可靠性至關重要。2ApacheDrill的擴展性2.1分布式架構Drill采用分布式架構,由多個節(jié)點組成,包括控制節(jié)點和數(shù)據(jù)節(jié)點??刂乒?jié)點負責接收查詢請求,解析SQL語句,生成執(zhí)行計劃,并將任務分發(fā)到數(shù)據(jù)節(jié)點。數(shù)據(jù)節(jié)點負責執(zhí)行查詢?nèi)蝿眨幚頂?shù)據(jù),并將結果返回給控制節(jié)點。這種架構允許Drill在多個節(jié)點上并行處理數(shù)據(jù),從而提高查詢性能和系統(tǒng)擴展性。2.2動態(tài)數(shù)據(jù)發(fā)現(xiàn)Drill支持動態(tài)數(shù)據(jù)發(fā)現(xiàn),這意味著它可以在查詢時自動檢測數(shù)據(jù)的結構,而不需要預定義的模式。這對于處理復雜嵌套數(shù)據(jù)和半結構化數(shù)據(jù)非常有用,因為數(shù)據(jù)結構可能在查詢時才完全確定。動態(tài)數(shù)據(jù)發(fā)現(xiàn)提高了Drill的靈活性和擴展性,使其能夠處理各種類型的數(shù)據(jù)源。2.3擴展性測試為了展示Drill的擴展性,我們可以進行一個簡單的測試,使用Drill查詢一個大型的Parquet文件數(shù)據(jù)集。假設我們有一個包含數(shù)百萬條記錄的Parquet文件,存儲在HDFS上。#假設數(shù)據(jù)集位于HDFS的/drill/parquet_data路徑下
#使用Drill查詢數(shù)據(jù)集
drill-t'SELECT*FROMdfs.`/drill/parquet_data`LIMIT10'通過增加參與查詢的節(jié)點數(shù)量,我們可以觀察到查詢性能的提升,這證明了Drill的擴展性。3ApacheDrill的容錯性3.1數(shù)據(jù)復制在Drill中,數(shù)據(jù)通常存儲在分布式文件系統(tǒng)(如HDFS)上,這些系統(tǒng)通常會自動復制數(shù)據(jù),以提高數(shù)據(jù)的可用性和容錯性。當一個節(jié)點故障時,Drill可以從其他節(jié)點上的數(shù)據(jù)副本繼續(xù)查詢,從而保證了查詢的連續(xù)性。3.2故障恢復Drill具有內(nèi)置的故障恢復機制。當一個節(jié)點故障時,Drill會自動檢測并重新分配該節(jié)點上的任務到其他可用節(jié)點。此外,Drill還支持查詢的重新執(zhí)行,如果查詢在執(zhí)行過程中遇到故障,可以重新啟動查詢,從故障點繼續(xù)執(zhí)行,而不需要從頭開始。3.3容錯性測試為了測試Drill的容錯性,我們可以模擬一個節(jié)點故障的場景。假設我們正在使用Drill查詢一個存儲在HDFS上的大型數(shù)據(jù)集,突然一個數(shù)據(jù)節(jié)點故障。Drill會自動檢測到這個故障,并將該節(jié)點上的任務重新分配到其他節(jié)點。我們可以通過監(jiān)控Drill的查詢?nèi)罩?,觀察到故障恢復的過程。#監(jiān)控Drill的查詢?nèi)罩?/p>
tail-f/var/log/drill/drillbit.log在日志中,我們可以看到Drill如何檢測到節(jié)點故障,并重新分配任務的信息,這證明了Drill的容錯性。4結論ApacheDrill的分布式架構、動態(tài)數(shù)據(jù)發(fā)現(xiàn)和內(nèi)置的故障恢復機制,使其具有出色的擴展性和容錯性。這些特性使得Drill成為處理大規(guī)模數(shù)據(jù)集和復雜查詢的理想工具,能夠滿足企業(yè)級數(shù)據(jù)處理的需求。請注意,上述代碼示例和測試場景是基于假設的環(huán)境和數(shù)據(jù)集,實際操作時需要根據(jù)具體的Drill和HDFS配置進行調整。5ApacheDrill的擴展性5.1分布式架構概述ApacheDrill是一個分布式SQL查詢引擎,設計用于大規(guī)模數(shù)據(jù)集的實時分析。其架構基于一個主節(jié)點和多個工作節(jié)點的模型,其中主節(jié)點負責接收查詢請求,優(yōu)化查詢計劃,并將任務分發(fā)給工作節(jié)點。工作節(jié)點執(zhí)行查詢?nèi)蝿?,并將結果返回給主節(jié)點進行匯總。這種設計允許Drill在數(shù)據(jù)量增加時,通過增加工作節(jié)點來提升查詢性能,實現(xiàn)水平擴展。5.1.1主節(jié)點與工作節(jié)點通信主節(jié)點和工作節(jié)點之間通過網(wǎng)絡進行通信,使用的是基于gRPC的協(xié)議,這提供了高效且可靠的通信機制。主節(jié)點負責協(xié)調查詢的執(zhí)行,而工作節(jié)點則負責數(shù)據(jù)的讀取和處理。5.1.2數(shù)據(jù)存儲的靈活性Drill支持多種數(shù)據(jù)存儲,包括HDFS、S3、AzureBlobStorage、NoSQL數(shù)據(jù)庫(如MongoDB和Cassandra)以及關系型數(shù)據(jù)庫(如MySQL和PostgreSQL)。這種靈活性使得Drill能夠在不同的數(shù)據(jù)源之間無縫切換,無需對數(shù)據(jù)進行預處理或轉換,從而增強了其擴展性。5.2動態(tài)數(shù)據(jù)探索Drill的一個關鍵特性是其動態(tài)數(shù)據(jù)探索能力。這意味著用戶可以在不知道數(shù)據(jù)確切結構的情況下查詢數(shù)據(jù)。Drill能夠自動推斷數(shù)據(jù)的模式,并在查詢時動態(tài)生成執(zhí)行計劃,這大大簡化了數(shù)據(jù)探索的過程,特別是在處理半結構化數(shù)據(jù)(如JSON和XML)時。5.2.1示例:查詢JSON文件假設我們有一個JSON文件,其中包含用戶信息,但文件的結構未知。我們可以使用Drill直接查詢這個文件,而不需要事先定義模式。--查詢JSON文件
SELECT*FROMdfs.json.`/user_data.json`;Drill將自動推斷user_data.json的結構,并返回查詢結果。這種能力使得Drill在處理未知或變化的數(shù)據(jù)結構時非常有用。5.3水平擴展策略Drill的水平擴展策略基于其分布式架構。當數(shù)據(jù)量或查詢復雜度增加時,可以通過增加更多的工作節(jié)點來提升系統(tǒng)性能。Drill的查詢執(zhí)行是并行的,這意味著查詢可以在多個節(jié)點上同時執(zhí)行,從而減少查詢響應時間。5.3.1分布式查詢執(zhí)行Drill將查詢分解為多個片段,每個片段可以在不同的工作節(jié)點上并行執(zhí)行。例如,如果查詢涉及到多個數(shù)據(jù)源,Drill可以將查詢的每個部分分配給最接近數(shù)據(jù)源的節(jié)點,從而減少數(shù)據(jù)傳輸?shù)难舆t。5.3.2節(jié)點添加與負載均衡當添加新的工作節(jié)點時,Drill會自動重新分配查詢?nèi)蝿?,確保所有節(jié)點的負載均衡。這種動態(tài)的負載均衡策略有助于最大化系統(tǒng)的整體性能。5.4擴展性測試與案例為了驗證Drill的擴展性,可以進行一系列的測試,包括增加數(shù)據(jù)量、增加查詢復雜度以及增加工作節(jié)點數(shù)量。這些測試可以幫助理解Drill在不同場景下的性能表現(xiàn)。5.4.1測試案例:大規(guī)模數(shù)據(jù)查詢假設我們有一個包含數(shù)十億條記錄的數(shù)據(jù)集,存儲在HDFS上。我們可以使用Drill查詢這個數(shù)據(jù)集,并逐漸增加工作節(jié)點的數(shù)量,觀察查詢響應時間的變化。--查詢大規(guī)模數(shù)據(jù)集
SELECTCOUNT(*)FROMdfs.`/large_dataset`;通過增加工作節(jié)點,我們可以看到查詢響應時間顯著減少,證明了Drill的水平擴展能力。5.4.2性能監(jiān)控與分析Drill提供了詳細的性能監(jiān)控工具,可以用來分析查詢的執(zhí)行情況,包括每個節(jié)點的負載、查詢的執(zhí)行時間以及數(shù)據(jù)傳輸?shù)难舆t。這些信息對于優(yōu)化查詢性能和系統(tǒng)配置至關重要。5.4.3結論ApacheDrill的分布式架構、動態(tài)數(shù)據(jù)探索能力和水平擴展策略使其成為處理大規(guī)模數(shù)據(jù)集的理想工具。通過實際的測試案例,我們可以看到Drill在增加工作節(jié)點時,能夠有效地提升查詢性能,證明了其強大的擴展性。對于需要實時分析大量數(shù)據(jù)的企業(yè)和組織,Drill提供了一個靈活且高性能的解決方案。6ApacheDrill的容錯性6.1容錯機制原理ApacheDrill是一個分布式SQL查詢引擎,設計用于處理大規(guī)模數(shù)據(jù)集。其容錯機制基于以下幾個核心原理:數(shù)據(jù)分布與復制:Drill將數(shù)據(jù)分布在集群的多個節(jié)點上,并支持數(shù)據(jù)的復制,確保即使某個節(jié)點失敗,數(shù)據(jù)仍然可訪問。故障檢測:通過心跳機制和定期檢查,Drill能夠快速檢測到節(jié)點故障。查詢重定向:當檢測到節(jié)點故障時,Drill會自動將查詢重定向到其他可用節(jié)點,以確保查詢的連續(xù)性。數(shù)據(jù)恢復:Drill支持數(shù)據(jù)恢復機制,能夠在故障節(jié)點恢復后,重新加載數(shù)據(jù),恢復集群的完整狀態(tài)。6.2故障恢復流程6.2.1故障檢測Drill使用心跳機制來檢測節(jié)點的健康狀態(tài)。每個Drill節(jié)點定期向集群中的領導者發(fā)送心跳信號。如果領導者在預定的時間內(nèi)沒有收到某個節(jié)點的心跳,它將標記該節(jié)點為故障。6.2.2查詢重定向一旦檢測到節(jié)點故障,Drill會自動調整查詢計劃,將原本分配給故障節(jié)點的任務重新分配給集群中的其他健康節(jié)點。這一過程是透明的,用戶無需關心底層的故障轉移。6.2.3數(shù)據(jù)恢復當故障節(jié)點重新上線后,Drill會自動檢測并恢復該節(jié)點上的數(shù)據(jù)。數(shù)據(jù)恢復過程可能包括從其他節(jié)點復制數(shù)據(jù),或者從備份中恢復數(shù)據(jù),以確保數(shù)據(jù)的完整性和一致性。6.3數(shù)據(jù)冗余與備份6.3.1數(shù)據(jù)冗余在Drill中,數(shù)據(jù)冗余是通過數(shù)據(jù)復制實現(xiàn)的。數(shù)據(jù)被復制到集群中的多個節(jié)點,以確保數(shù)據(jù)的高可用性。通常,數(shù)據(jù)的復制因子為3,這意味著每個數(shù)據(jù)塊都有3個副本分布在不同的節(jié)點上。6.3.2數(shù)據(jù)備份除了數(shù)據(jù)冗余,Drill還支持數(shù)據(jù)備份。數(shù)據(jù)備份可以是定期的,也可以是基于事件的。例如,當數(shù)據(jù)被修改時,可以觸發(fā)備份過程,將數(shù)據(jù)的當前狀態(tài)保存到備份存儲中。6.4容錯性測試與案例6.4.1測試環(huán)境集群配置:3個Drill節(jié)點,每個節(jié)點配置有16GB內(nèi)存和4個CPU核心。數(shù)據(jù)集:使用TPC-H數(shù)據(jù)集,大小為1TB。6.4.2測試案例6.4.2.1案例1:單節(jié)點故障測試步驟:啟動Drill集群。執(zhí)行查詢,讀取TPC-H數(shù)據(jù)集。故意關閉一個Drill節(jié)點。觀察查詢是否能夠繼續(xù)執(zhí)行,以及查詢性能的影響。預期結果:查詢應能夠繼續(xù)執(zhí)行,盡管查詢性能可能會有輕微下降。6.4.2.2案例2:數(shù)據(jù)恢復測試步驟:在Drill集群中執(zhí)行數(shù)據(jù)修改操作。故意關閉一個Drill節(jié)點。重新啟動故障節(jié)點。觀察數(shù)據(jù)是否能夠自動恢復,以及數(shù)據(jù)的完整性和一致性。預期結果:數(shù)據(jù)應能夠自動恢復,且數(shù)據(jù)的完整性和一致性得到保證。6.4.3實際操作示例6.4.3.1模擬節(jié)點故障#假設我們有一個Drill集群,其中一個節(jié)點的IP地址為192.168.1.100
#使用以下命令模擬節(jié)點故障
sshuser@192.168.1.100"sudosystemctlstopdrillbit"6.4.3.2數(shù)據(jù)恢復#當故障節(jié)點重新上線后,Drill會自動嘗試恢復數(shù)據(jù)
#但是,我們可以通過以下命令手動觸發(fā)數(shù)據(jù)恢復過程
sshuser@192.168.1.100"sudosystemctlstartdrillbit"
#然后,通過Drill的管理界面檢查數(shù)據(jù)的完整性和一致性6.4.4結論通過上述測試案例,我們可以驗證ApacheDrill的容錯機制是否有效,以及在故障發(fā)生時,數(shù)據(jù)的完整性和一致性是否得到保證。這些測試對于評估Drill在生產(chǎn)環(huán)境中的可靠性和穩(wěn)定性至關重要。本教程詳細介紹了ApacheDrill的容錯機制,包括其原理、故障恢復流程、數(shù)據(jù)冗余與備份策略,以及如何進行容錯性測試。通過理解和應用這些知識,可以確保在使用Drill進行大規(guī)模數(shù)據(jù)分析時,系統(tǒng)的穩(wěn)定性和數(shù)據(jù)的安全性。7實踐操作7.1部署多節(jié)點ApacheDrill集群7.1.1部署前準備在開始部署多節(jié)點ApacheDrill集群之前,確保所有節(jié)點上都已安裝Java環(huán)境。ApacheDrill要求Java8或更高版本。此外,所有節(jié)點應通過網(wǎng)絡互相通信,且防火墻規(guī)則允許Drill的通信端口。7.1.2配置drill-override.conf在每個節(jié)點上,編輯drill-override.conf文件以配置集群的擴展性。例如,設置drill.exec.rpc.address為節(jié)點的IP地址,drill.exec.rpc.port為Drill的RPC端口,通常為31010。#在節(jié)點1上配置drill-override.conf
drill.exec.rpc.address=192.168.1.101
drill.exec.rpc.port=31010
#在節(jié)點2上配置drill-override.conf
drill.exec.rpc.address=192.168.1.102
drill.exec.rpc.port=310107.1.3啟動Drill集群在每個節(jié)點上,使用以下命令啟動Drill服務:#在每個節(jié)點上啟動Drill
bin/drill-daemon.shstart7.1.4驗證集群狀態(tài)通過訪問任意節(jié)點上的DrillWebUI(默認端口為8047),檢查集群狀態(tài)和節(jié)點列表,確保所有節(jié)點都已加入集群。7.2配置容錯與擴展性參數(shù)7.2.1容錯參數(shù)在drill-override.conf中,配置容錯參數(shù)以增強集群的穩(wěn)定性。例如,設置drill.exec.rpc.retry.enabled為true以啟用RPC重試機制。#配置容錯參數(shù)
drill.exec.rpc.retry.enabled=true
drill.exec.rpc.retry.maxAttempts=37.2.2擴展性參數(shù)為了提高Drill的擴展性,可以調整drill.exec.fragment.concurrent.enabled和drill.exec.fragment.concurrent.fragmentCount參數(shù),以控制并發(fā)執(zhí)行的查詢片段數(shù)量。#配置擴展性參數(shù)
drill.exec.fragment.concurrent.enabled=true
drill.exec.fragment.concurrent.fragmentCount=1007.3執(zhí)行大規(guī)模數(shù)據(jù)分析任務7.3.1創(chuàng)建表使用Drill的SQL語句創(chuàng)建一個表,用于存儲大規(guī)模數(shù)據(jù)集。例如,創(chuàng)建一個存儲銷售數(shù)據(jù)的表。--創(chuàng)建銷售數(shù)據(jù)表
CREATETABLEsales(
idINT,
productVARCHAR,
quantityINT,
priceDECIMAL(10,2),
sale_dateTIMESTAMP
)
STOREDASparquet;7.3.2導入數(shù)據(jù)使用Drill的LOADDATA語句將大規(guī)模數(shù)據(jù)集導入到創(chuàng)建的表中。例如,從HDFS導入銷售數(shù)據(jù)。--從HDFS導入數(shù)據(jù)
LOADDATA'/user/hadoop/sales_data.parquet'
INTOTABLEsales;7.3.3執(zhí)行查詢執(zhí)行大規(guī)模數(shù)據(jù)分析任務,例如,查詢特定日期范圍內(nèi)的總銷售額。--查詢特定日期范圍內(nèi)的總銷售額
SELECTSUM(price*quantity)AStotal_sales
FROMsales
WHEREsale_dateBETWEEN'2023-01-01'AND'2023-01-31';7.4故障模擬與恢復7.4.1模擬節(jié)點故障為了測試Drill的容錯性,可以模擬一個節(jié)點故障。例如,在節(jié)點2上停止Drill服務。#在節(jié)點2上停止Drill
bin/drill-daemon.shstop7.4.2查詢執(zhí)行在節(jié)點1上執(zhí)行查詢,驗證即使在節(jié)點2故障的情況下,查詢是否仍能成功執(zhí)行。--執(zhí)行查詢
SELECTCOUNT(*)FROMsales;7.4.3恢復節(jié)點在模擬故障后,重新啟動節(jié)點2上的Drill服務,以恢復集群的完整狀態(tài)。#在節(jié)點2上重新啟動Drill
bin/drill-daemon.shstart7.4.4驗證集群狀態(tài)再次訪問DrillWebUI,檢查節(jié)點2是否已成功重新加入集群,并驗證集群狀態(tài)是否正常。通過以上步驟,我們不僅部署了多節(jié)點ApacheDrill集群,還配置了容錯與擴展性參數(shù),執(zhí)行了大規(guī)模數(shù)據(jù)分析任務,并模擬了故障場景以測試Drill的容錯能力。這些實踐操作有助于理解和掌握ApacheDrill在分布式環(huán)境下的高效運行和故障恢復機制。8總結與最佳實踐8.1總結ApacheDrill的擴展性和容錯性特性ApacheDrill是一個用于大規(guī)模數(shù)據(jù)集的低延遲SQL查詢引擎,它在擴展性和容錯性方面表現(xiàn)出色。下面,我們將深入探討這些特性,以及它們?nèi)绾卧谄髽I(yè)環(huán)境中發(fā)揮作用。8.1.1擴展性ApacheDrill的擴展性主要體現(xiàn)在以下幾個方面:動態(tài)數(shù)據(jù)源發(fā)現(xiàn):Drill可以動態(tài)發(fā)現(xiàn)和查詢多種數(shù)據(jù)源,包括HDFS、S3、NoSQL數(shù)據(jù)庫等,無需預定義模式或表結構。水平擴展:Drill支持水平擴展,可以通過增加更多的節(jié)點來提高查詢性能和數(shù)據(jù)處理能力。每個節(jié)點都可以獨立處理查詢的一部分,從而實現(xiàn)并行處理。自動分片:Drill自動將數(shù)據(jù)分片,每個分片可以在不同的節(jié)點上并行處理,這大大提高了查詢效率。查詢優(yōu)化:Drill使用動態(tài)查詢優(yōu)化技術,根據(jù)數(shù)據(jù)的分布和查詢的復雜性自動調整查詢計劃,以提高查詢性能。8.1.2容錯性ApacheDrill的容錯性體現(xiàn)在:故障恢復:如果在查詢過程中某個節(jié)點發(fā)生故障,Drill可以自動檢測并重新分配任務到其他可用節(jié)點,以確保查詢的連續(xù)性和完整性。數(shù)據(jù)冗余:Drill支持數(shù)據(jù)冗余,即使部分數(shù)據(jù)源不可用,也可以從其他可用的數(shù)據(jù)源中讀取數(shù)據(jù),確保查詢的可靠性。查詢重試:對于網(wǎng)絡故障或短暫的數(shù)據(jù)不可用情況,Drill提供了查詢
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省昆明市黃岡實驗校2025年初三第一次聯(lián)考試題英語試題試卷含答案
- 貴州護理職業(yè)技術學院《園藝學通論》2023-2024學年第二學期期末試卷
- 山西金融職業(yè)學院《應用統(tǒng)計分析》2023-2024學年第二學期期末試卷
- 撫州職業(yè)技術學院《媒體寫作B》2023-2024學年第二學期期末試卷
- 江西省贛州市紅旗實驗中學2024-2025學年高三1月月考數(shù)學試題試卷含解析
- 吉林城市職業(yè)技術學院《植物保護學》2023-2024學年第二學期期末試卷
- 上海健康醫(yī)學院《數(shù)據(jù)科學與工程算法》2023-2024學年第一學期期末試卷
- 江蘇省徐州市樹恩中學2024-2025學年高一下學期第一次月考地理試題(含答案)
- 帆布戶外裝備的多功能性與智能化發(fā)展趨勢考核試卷
- 有機原料的化學合成途徑考核試卷
- 醫(yī)療援助與全球衛(wèi)生合作
- 財務會計實務(第六版)教案 4.固定資產(chǎn)教案
- 第一章村集體經(jīng)濟組織會計制度講解
- 三年級下冊乘除法豎式計算題100道
- 2024年4月全國自考概率論與數(shù)理統(tǒng)計(一)02024真題及答案
- 《宮頸癌防治》課件
- 220V直流容量計算書
- 醫(yī)院培訓課件:《基于醫(yī)院感染防控的安全注射》
- 【抖音直播帶貨模式研究國內(nèi)外文獻綜述3200字】
- 混凝土回彈標準表格
- 征兵工作課件
評論
0/150
提交評論