版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目錄摘要 [14]。圖STYLEREF1\s2SEQ圖\*ARABIC\s14Spark運行架構(gòu)Spark架構(gòu)以及相關(guān)組件SparkCore,作為Spark框架的基石,肩負著實現(xiàn)框架核心功能的重任,包括任務(wù)調(diào)度、內(nèi)存管理、錯誤恢復(fù)以及與存儲系統(tǒng)的協(xié)同工作。其核心組成部分之一是RDD(ResilientDistributedDataset,彈性分布式數(shù)據(jù)集)API,這一API為處理大規(guī)模數(shù)據(jù)提供了一種高效且靈活的抽象數(shù)據(jù)結(jié)構(gòu)。RDD代表了可以在多個計算節(jié)點上并行操作的元素集合,它使得數(shù)據(jù)能夠跨越多個節(jié)點進行分布式存儲和處理。通過數(shù)據(jù)分片(Partitioning),RDD能夠?qū)?shù)據(jù)分割成多個獨立的片段,每個片段在相應(yīng)的節(jié)點上獨立處理,從而實現(xiàn)數(shù)據(jù)的并行計算。此外,RDD還支持數(shù)據(jù)緩存機制,允許將頻繁訪問的數(shù)據(jù)存儲在內(nèi)存中,從而顯著提高處理速度。這些特性共同使得SparkCore在處理大規(guī)模數(shù)據(jù)時具有出色的性能和效率。在SparkCore的基礎(chǔ)上,Spark提供了多種組件,這些組件滿足了多種應(yīng)用需求,其分別為SparkSQL、SparkStreaming、SparkMLlib、SparkGraphX。如REF_Ref152681975\h圖25所示。圖STYLEREF1\s2SEQ圖\*ARABIC\s15Spark架構(gòu)圖本系統(tǒng)主要使用SparkStreaming組件,作為Spark生態(tài)系統(tǒng)的重要組件,賦予了Spark處理實時數(shù)據(jù)流的能力,從而實現(xiàn)了實時數(shù)據(jù)處理與分析的功能。SparkStreaming通過將連續(xù)的實時數(shù)據(jù)流切分成一系列小規(guī)模的批處理數(shù)據(jù),使得這些數(shù)據(jù)能夠在Spark集群上高效地執(zhí)行。SparkStreaming提供兩種靈活的數(shù)據(jù)流處理方式:基于時間窗口的處理和基于事件的處理:基于時間窗口的處理將一段時間內(nèi)的數(shù)據(jù)流處理為一個批,而基于事件的處理則是對單個事件進行處理。SparkStreaming可以使用Kafka、Flume、Kinesis等多種數(shù)據(jù)源,同時也可以使用文件和套接字等本地數(shù)據(jù)源。本章小結(jié)本章主要對相關(guān)的技術(shù)和基礎(chǔ)理論進行了全面的概述。首先,探討了Hadoop的兩大核心功能:HDFS的體系架構(gòu)和元數(shù)據(jù)管理機制。在了解了HDFS的基礎(chǔ)上,介紹了其他與大數(shù)據(jù)處理相關(guān)的重要組件。最后,重點闡述了本文所使用的大數(shù)據(jù)并行處理框架Spark的架構(gòu)及其核心原理機制,為后續(xù)的研究和應(yīng)用提供了堅實的理論基礎(chǔ)。電商用戶行為實時分析系統(tǒng)的需求分析本章節(jié)將對電商用戶行為實時分析體系的需求展開深入探討,聚焦于功能需求和非功能需求這兩個核心方面。我們將逐一闡述這些需求,為接下來系統(tǒng)的設(shè)計和實現(xiàn)提供清晰的方向和思路。功能需求分析本系統(tǒng)再基于用戶的自身屬性與行為數(shù)據(jù)的基礎(chǔ)上用戶活躍率分析:日活躍用戶數(shù)量(DAU)指的是在24小時內(nèi)訪問或使用應(yīng)用、小程序、網(wǎng)站等不同設(shè)備端的唯一用戶總數(shù)。在這個統(tǒng)計中,新注冊的用戶也被視為活躍用戶,無論他們在應(yīng)用中的具體使用情況如何。需要注意的是,即使同一臺設(shè)備在一天內(nèi)多次打開應(yīng)用,也只會被計為一個活躍用戶。這個指標是衡量一個平臺或應(yīng)用受歡迎程度和用戶粘性的重要指標之一。每天一臺設(shè)備打開多次應(yīng)用會被計為一個活躍用戶,同一天在不同設(shè)備端在打開應(yīng)用的同一用戶同樣被計為一個活躍用戶。可以通過不同的維度去分析日活用戶,可以從地區(qū)、年齡、設(shè)備端等維度單個或多個同時分析日活躍用戶的分布以及日活躍率。除了DAU,還有周活躍用戶數(shù)量(WAU)和月活躍用戶數(shù)量(MAU)等不同指標用來分析用戶。通過對日活躍用戶的數(shù)據(jù)分析,可以了解用戶的活躍度和忠誠度,從而優(yōu)化運營策略,提高用戶留存率和轉(zhuǎn)化率。具體業(yè)務(wù)如下:統(tǒng)計日活躍用戶數(shù)。統(tǒng)計活躍用戶留存率。統(tǒng)計日活躍用戶數(shù)每日增長率。按省市統(tǒng)計日活躍用戶數(shù),再以年齡段細分用戶群。統(tǒng)計各端日活躍用戶數(shù)。以分為單位統(tǒng)計出頁面訪問趨勢。轉(zhuǎn)化率分析:網(wǎng)站轉(zhuǎn)化率(ConversionRate)是一個衡量網(wǎng)站性能的關(guān)鍵指標,它反映了訪客在訪問網(wǎng)站后采取特定目標行動(如登錄、注冊、訂閱、下載或購買等)的比例。簡而言之,轉(zhuǎn)化率是將訪客轉(zhuǎn)化為網(wǎng)站常駐用戶的過程。具體業(yè)務(wù)如下:統(tǒng)計頁面單跳轉(zhuǎn)換率。訂單分析:企業(yè)在電商平臺中的操作和決策目的都是為了引導(dǎo)用戶最終下訂單、購買商品并完成交易。為了實現(xiàn)這一目標,企業(yè)需要對訂單數(shù)據(jù)進行分析,以深入了解用戶的購買行為、購買偏好以及購買決策過程。例如,訂單分析可以揭示哪些商品最受歡迎,哪些營銷活動最有效,哪些用戶最具有潛力成為忠實客戶。這些信息有助于企業(yè)制定更精準的商品策略、營銷策略和客戶服務(wù)策略,以提升用戶滿意度和忠誠度。這些信息有助于企業(yè)優(yōu)化商品布局、提升用戶體驗、改進營銷策略,從而提高轉(zhuǎn)化率和銷售額。基于以上分析結(jié)果,企業(yè)可以制定更加精準的營銷策略和優(yōu)化商品布局,從而提高電商平臺的優(yōu)越性和盈利性。同時,訂單分析還可以幫助企業(yè)及時發(fā)現(xiàn)潛在的問題和風(fēng)險,如庫存積壓、退貨率高等,從而采取相應(yīng)的措施加以解決。訂單分析是電商平臺運營中不可或缺的一環(huán)。它可以幫助企業(yè)更好地了解用戶需求和市場趨勢,從而制定更加科學(xué)合理的運營策略,提高電商平臺的競爭力和盈利能力。具體業(yè)務(wù)如下:以年齡、性別、地區(qū)為維度進行訂單分析。統(tǒng)計訂單取消原因分類。統(tǒng)計各地區(qū)訂單分布量。非功能需求分析性能需求本文所探討的系統(tǒng)的核心職責(zé)在于高效處理龐大的用戶行為數(shù)據(jù)。鑒于處理的數(shù)據(jù)量巨大,對系統(tǒng)的性能提出了極高的要求。在構(gòu)建該系統(tǒng)時,深入考慮了多個關(guān)鍵因素,包括系統(tǒng)架構(gòu)的合理性、業(yè)務(wù)需求的滿足度、算法設(shè)計的優(yōu)化以及數(shù)據(jù)庫設(shè)計的效率。我們的目標是開發(fā)一個既穩(wěn)定又高效的應(yīng)用系統(tǒng)。首先,它必須擁有極低的內(nèi)存占用率,以確保在處理大量數(shù)據(jù)時不會因資源不足而崩潰。其次,后臺系統(tǒng)應(yīng)具備強大的計算能力,能夠迅速響應(yīng)和分析數(shù)據(jù)流。安全性需求在進行數(shù)據(jù)存儲的過程中,為防數(shù)據(jù)丟失、損壞,要在不同的設(shè)備中進行多次數(shù)據(jù)備份。同時為保證數(shù)據(jù)安全,需通過加密算法保證在數(shù)據(jù)的存儲、傳輸、讀取過程中不被盜取和修改。做好賬號密碼的安全,使用高強度密碼,嚴格分配權(quán)限。易用性需求對于開發(fā)人員,編寫符合規(guī)范的代碼、添加詳盡的注釋以及提供友好的交互接口是至關(guān)重要的。通過編寫高質(zhì)量的代碼,我們能夠確保系統(tǒng)的穩(wěn)定性和可擴展性,為電商用戶行為分析系統(tǒng)的長期運行和持續(xù)發(fā)展奠定堅實的基礎(chǔ)。對于平臺使用者來說,簡潔直觀且易于使用的平臺功能是至關(guān)重要的。在發(fā)布各項任務(wù)時,應(yīng)有標記字樣以幫助使用者更好地利用平臺。在界面設(shè)計上,平臺應(yīng)充分考慮用戶的操作習(xí)慣和需求,以提供符合大眾期望的用戶體驗。這些措施將有助于提升平臺的易用性和用戶滿意度。本章小結(jié)本章節(jié)對設(shè)計的用戶行為實時分析系統(tǒng)進行了深入的需求分析。首先,從業(yè)務(wù)角度出發(fā),詳細探討了系統(tǒng)的需求背景和發(fā)展方向,明確了需要實現(xiàn)的業(yè)務(wù)功能及其流程。其次,從功能角度對系統(tǒng)進行了細致的分析,確定了整個業(yè)務(wù)流程中的關(guān)鍵功能點。最后,從系統(tǒng)性能、安全性和易用性三個方面進行了全面的闡述,以確保系統(tǒng)能夠滿足用戶的實時分析需求,并提供穩(wěn)定、安全、易用的操作體驗。項目體系架構(gòu)設(shè)計系統(tǒng)架構(gòu)設(shè)計本系統(tǒng)架構(gòu)采用分層架構(gòu)設(shè)計思想將其分為四層,從下至上依次為數(shù)據(jù)源層、數(shù)據(jù)處理層、數(shù)據(jù)存儲層、數(shù)據(jù)展示層,如REF_Ref154060398\h圖41所示。圖STYLEREF1\s4SEQ圖\*ARABIC\s11系統(tǒng)架構(gòu)流程圖數(shù)據(jù)源層:數(shù)據(jù)源層是數(shù)據(jù)處理流程的基礎(chǔ),其主要功能是為Spark集群提供處理所需的數(shù)據(jù)。輸送的數(shù)據(jù)包含兩種類型數(shù)據(jù),一種是頁面日志數(shù)據(jù),本文數(shù)據(jù)來源為模擬日志數(shù)據(jù),模擬用戶在網(wǎng)站上進行瀏覽、搜索、點擊等操作,這些操作日志會被記錄并直接發(fā)送到Kafka集群的主題中;另外一個業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)存儲在Mysql表結(jié)構(gòu)中,通過Maxwell工具進行抽取和轉(zhuǎn)換,然后發(fā)送到Kafka集群的主題中。這兩種數(shù)據(jù)類型的數(shù)據(jù)源在數(shù)據(jù)源層中相互補充,為后續(xù)的數(shù)據(jù)處理提供了豐富的數(shù)據(jù)來源。數(shù)據(jù)源層除了提供數(shù)據(jù)輸入,還負責(zé)數(shù)據(jù)的初始清洗和格式化。由于Spark集群需要實時處理數(shù)據(jù),因此數(shù)據(jù)源層需要保證數(shù)據(jù)的實時性,盡可能減少數(shù)據(jù)的延遲。同時,為了確保數(shù)據(jù)的可靠性,需要采取一些措施,如數(shù)據(jù)備份、數(shù)據(jù)校驗等。在設(shè)計和實現(xiàn)數(shù)據(jù)源層時,需要充分考慮各種因素,確保數(shù)據(jù)的準確性和可靠性。數(shù)據(jù)處理層:數(shù)據(jù)處理層是整個數(shù)據(jù)處理流程的核心,負責(zé)從數(shù)據(jù)源層接收數(shù)據(jù),進行一系列的數(shù)據(jù)處理和分析,并將處理后的數(shù)據(jù)結(jié)果輸出到數(shù)據(jù)存儲層。在Spark集群環(huán)境中,利用SparkStreaming組件來實時消費Kafka集群中的數(shù)據(jù)。SparkStreaming能夠高效地實時讀取Kafka中的數(shù)據(jù)流,并對其進行處理與分析。這種集成使得我們可以及時處理來自Kafka的實時數(shù)據(jù),并利用Spark的強大計算能力對數(shù)據(jù)進行快速分析和處理。使用開發(fā)工具編寫業(yè)務(wù)邏輯代碼,并將其打包成Jar包上傳到主機的相關(guān)目錄當(dāng)中,使用Spark集群啟動任務(wù),并通過Yarn資源調(diào)度來管理和資源分配。在數(shù)據(jù)處理過程中,需要根據(jù)業(yè)務(wù)需求對數(shù)據(jù)進行清洗、轉(zhuǎn)換、分析和挖掘等操作。例如,對于頁面日志數(shù)據(jù),可能需要提取用戶行為特征、分析用戶興趣等;對于業(yè)務(wù)數(shù)據(jù),可能需要進行數(shù)據(jù)整合、數(shù)據(jù)挖掘等操作。處理后的數(shù)據(jù)結(jié)果需要輸出到數(shù)據(jù)訪問層的ElasticSearch當(dāng)中,以便后續(xù)的數(shù)據(jù)查詢和分析。數(shù)據(jù)存儲層:該層主要由部署在Linux環(huán)境中的ElasticSearch集群構(gòu)成,負責(zé)存儲來自數(shù)據(jù)處理層輸出的結(jié)果數(shù)據(jù)。通過ElasticSearch集群,能夠高效地存儲、檢索和分析這些數(shù)據(jù),以便數(shù)據(jù)展示層能夠?qū)崟r調(diào)用所需數(shù)據(jù),為用戶提供準確、快速的數(shù)據(jù)展示服務(wù)。該層在系統(tǒng)框架中起到承上啟下的作用,對于數(shù)據(jù)處理層來說,此層是數(shù)據(jù)的輸出終點;對于數(shù)據(jù)展示層來講,此層是數(shù)據(jù)的輸入起點。數(shù)據(jù)展示層:數(shù)據(jù)展示層是整個數(shù)據(jù)處理流程的最后一環(huán),它負責(zé)將處理后的數(shù)據(jù)以可視化的形式展示給用戶,以便用戶能夠直觀地了解數(shù)據(jù)和分析結(jié)果。前端頁面使用Vue框架并結(jié)合Echars數(shù)據(jù)可視化工具進行編寫,以提供直觀、清晰的數(shù)據(jù)展示界面。然后,將前端頁面打包部署到Linux操作系統(tǒng)中的Nginx服務(wù)器上,以便用戶可以通過瀏覽器訪問。后端服務(wù)使用目前流行的SpringBoot框架搭建,它簡化了后端服務(wù)的搭建和開發(fā)過程。SpringBoot自身集成了SpringMVC框架,負責(zé)模型、視圖、控制器的分離,與前端頁面進行數(shù)據(jù)交互。通過JavaAPI操作ElasticSearch,讀取存儲在其中的數(shù)據(jù),并將數(shù)據(jù)寫入接口,以便前端調(diào)用。數(shù)據(jù)展示層需要充分考慮用戶的需求和體驗,提供直觀、清晰、易于理解的數(shù)據(jù)展示界面。同時,還需要保證后端服務(wù)的穩(wěn)定性和安全性,確保數(shù)據(jù)的準確性和可靠性。系統(tǒng)的功能模塊設(shè)計本系統(tǒng)按照第三章的業(yè)務(wù)需求將功能模塊進行了細分,如REF_Ref154065879\h圖42所示。圖STYLEREF1\s4SEQ圖\*ARABIC\s12系統(tǒng)功能模塊圖用戶日活躍分析:(1)統(tǒng)計日活躍用戶數(shù)收集用戶在平臺或應(yīng)用上的活動數(shù)據(jù)。這些數(shù)據(jù)包括用戶的登錄信息、訪問時間戳、進行的操作等。在統(tǒng)計日活躍用戶之前,需要明確什么是“活躍用戶”。一般來說,如果用戶在某一天內(nèi)訪問了你的平臺或應(yīng)用,就可以被定義為這一天的活躍用戶。例如,用戶可能需要完成某些特定的操作(如簽到、瀏覽頁面、提交表單等)才能被算作活躍用戶。在收集到用戶活動數(shù)據(jù)后,可能需要進行一些數(shù)據(jù)清洗和過濾工作,以去除重復(fù)數(shù)據(jù)、異常值或無效數(shù)據(jù)。根據(jù)日期對用戶活動數(shù)據(jù)進行分組,并對每組內(nèi)的用戶數(shù)量進行計數(shù),就可以得到每一天的活躍用戶數(shù)量。(2)獲取活躍用戶留存率留存率是衡量用戶粘性的重要指標,它反映了用戶在使用產(chǎn)品或服務(wù)后的持續(xù)活躍程度。在電商行業(yè)中,提高留存率對于企業(yè)的長遠發(fā)展至關(guān)重要。活躍用戶留存率作為一個關(guān)鍵的運營指標,用于評估網(wǎng)站、應(yīng)用或游戲的用戶粘性。這個指標通過計算在統(tǒng)計周期內(nèi),每日活躍用戶在之后的第N日仍然使用該App的用戶數(shù)占比的平均值來衡量。通常,N的取值包括2、4、8、15、31,分別對應(yīng)著次日留存率、三日留存率、周留存率、半月留存率和月留存率。應(yīng)用特定的計算公式4.1。RN=aN/a?100%(N≥2)(STYLEREF1\s4.SEQ公式\*ARABIC\s11)式中:RNaNa(3)統(tǒng)計日活躍用戶增長率先統(tǒng)計出今日的日活躍用戶數(shù),再與昨日的日活躍用戶數(shù)做對比,利用公式4.2得出增長率。R=an?an?1/an?1?100%(n≥2)(STYLEREF1\s式中:R——活躍用戶增長率anan?(4)按省市統(tǒng)計日活躍用戶數(shù),再以年齡段統(tǒng)計用戶群以省市為維度,統(tǒng)計日活躍用戶數(shù),再以五個年齡段(0-18,19-29,30-39,40-49,50以上)分組聚合統(tǒng)計日活躍用戶數(shù)。(5)獲取各端日活躍用戶數(shù)以訪問平臺的設(shè)備端為維度,統(tǒng)計日活躍用戶數(shù)。(6)統(tǒng)計每分鐘頁面訪問量確定要統(tǒng)計的時間范圍,例如一天、一周、一個月等。收集用戶在指定時間范圍內(nèi)的頁面瀏覽數(shù)據(jù)。對于每個時間范圍,將頁面瀏覽量除以該時間范圍內(nèi)的分鐘數(shù),即可得到每分鐘的頁面瀏覽量。轉(zhuǎn)化率分析:(1)統(tǒng)計頁面單跳轉(zhuǎn)換率在一次用戶會話(Session)中,如果用戶按順序訪問了頁面A、B、C、D,那么從頁面A跳轉(zhuǎn)到頁面B被視為一次單跳。具體計算方法是:首先統(tǒng)計符合條件的會話中頁面A訪問次數(shù)(PV)為Av,然后統(tǒng)計這些會話中既訪問了頁面A又緊接著訪問了頁面B的訪問次數(shù)為Bv。最終,單跳轉(zhuǎn)化率即為Bv訂單分析:以年齡、性別、地區(qū)為維度進行訂單分析統(tǒng)計平臺使用者設(shè)定的時間范圍內(nèi),每個用戶在此時間內(nèi)購買商品訂單,以性別為維度,統(tǒng)計不同地區(qū)所購買訂單數(shù)和訂單金額的性別差異。以年齡為維度進行分組:18歲以下、18-20歲以上,五個組別,統(tǒng)計不同地區(qū)所購買的訂單數(shù)和訂單金額年齡差異。統(tǒng)計訂單取消原因分類以餅圖和條形圖統(tǒng)計訂單取消原因。統(tǒng)計各地區(qū)訂單分布量以中國地圖為標準,以熱力圖形式統(tǒng)計每個地區(qū)的訂單數(shù)及訂單金額。數(shù)據(jù)庫設(shè)計Mysql數(shù)據(jù)庫設(shè)計用戶信息(user_info)表如REF_Ref160195869\h表4.1所示。表STYLEREF1\s4.SEQ表\*ARABIC\s11用戶信息(user_info)表字段數(shù)據(jù)類型注解idbigint編號login_namevarchar用戶名稱nick_namevarchar用戶昵稱passwdvarchar用戶密碼namevarchar用戶姓名phone_numvarchar手機號emailvarchar郵箱head_imgvarchar頭像user_levelvarchar用戶級別birthdaydate用戶生日gendervarchar性別M男,F女create_timedatetime創(chuàng)建時間operate_timedatetime修改時間statusvarchar狀態(tài)訂單信息(order_info)表如REF_Ref160196142\h表4.2所示。表STYLEREF1\s4.SEQ表\*ARABIC\s12訂單信息(order_info)表字段數(shù)據(jù)類型注解idbigint編號consigneevarchar收貨人consignee_telvarchar收件人電話total_amountdecimal總金額order_statusvarchar訂單狀態(tài)user_idbigint用戶idpayment_wayvarchar付款方式delivery_addressvarchar送貨地址order_commentvarchar訂單備注out_trade_novarchar訂單交易編號trade_bodyvarchar訂單描述(第三方支付用)create_timedatetime創(chuàng)建時間operate_timedatetime操作時間expire_timedatetime失效時間process_statusvarchar進度狀態(tài)tracking_novarchar物流單編號parent_order_idbigint父訂單編號img_urlvarchar圖片路徑province_idint地區(qū)activity_reduce_amountdecimal促銷金額coupon_reduce_amountdecimal優(yōu)惠券original_total_amountdecimal原價金額feight_feedecimal運費feight_fee_reducedecimal運費減免refundable_timedatetime可退款日期(簽收后30天)訂單詳細(order_detail)表如REF_Ref160369760\h表4.3所示。表STYLEREF1\s4.SEQ表\*ARABIC\s13訂單詳細(order_detail)表字段數(shù)據(jù)類型注解idbigint編號order_idbigint訂單編號sku_idbigintsku_idsku_namevarcharsku名稱(冗余)img_urlvarchar圖片名稱(冗余)order_pricedecimal購買價格(下單時sku價格)sku_numvarchar購買個數(shù)create_timedatetime創(chuàng)建時間source_typevarchar來源類型source_idbigint來源編號split_total_amountdecimal減免后金額split_activity_amountdecimal活動減免split_coupon_amountdecimal優(yōu)惠券減免購物車信息(cart_info)表如REF_Ref160369927\h表4.4所示。表STYLEREF1\s4.SEQ表\*ARABIC\s14購物車信息(cart_info)表字段數(shù)據(jù)類型注解idbigint編號user_idvarchar用戶idsku_idbigintskuidcart_pricedecimal放入購物車時價格sku_numint數(shù)量img_urlvarchar圖片文件sku_namevarcharsku名稱(冗余)is_checkedint是否選擇create_timedatetime創(chuàng)建時間operate_timedatetime修改時間is_orderedbigint是否已經(jīng)下單order_timedatetime下單時間source_typevarchar來源類型source_idbigint來源編號基礎(chǔ)字典(base_dic)表如REF_Ref160370064\h表4.5所示。表STYLEREF1\s4.SEQ表\*ARABIC\s15基礎(chǔ)字典(base_dic)表字段數(shù)據(jù)類型注解dic_codevarchar編號dic_namevarchar編碼名稱parent_codevarchar父編號create_timedatetime創(chuàng)建日期operate_timedatetime修改日期ElasticSearch數(shù)據(jù)庫設(shè)計日活用戶信息寬表:gmall_order_detail_wide_*。頁面啟動日志寬表:gmall_page_start_wide_*。頁面信息寬表:gmall_page_info_wide_*。訂單信息寬表:gmall_order_info_wide_*。訂單詳細詳細寬表:gmall_order_detail_wide_*。訂單退款信息寬表:gmall_order_refund_info_wide_*。本章小結(jié)本章節(jié)全面規(guī)劃了該系統(tǒng)的整體架構(gòu),并詳細闡述了各模塊的設(shè)計理念和原則?;谙到y(tǒng)的功能需求模塊,確保了系統(tǒng)的實用性和高效性。此外,還對系統(tǒng)在使用過程中所涉及的關(guān)系型Mysql數(shù)據(jù)庫和非關(guān)系型ElasticSearch數(shù)據(jù)庫進行了詳細的表結(jié)構(gòu)設(shè)計,以確保數(shù)據(jù)的存儲和檢索能夠滿足系統(tǒng)的各種需求。系統(tǒng)實現(xiàn)與展示本章節(jié)將基于Spark的電商用戶行為實時分析系統(tǒng)的具體實現(xiàn)。首先,搭建了系統(tǒng)的開發(fā)環(huán)境,并完成了運行時環(huán)境中各集群的部署工作。隨后,實現(xiàn)了數(shù)據(jù)預(yù)處理功能和數(shù)據(jù)可視化功能,以便更好地處理和分析電商用戶的行為數(shù)據(jù)。最后,詳細描述了系統(tǒng)所設(shè)計的各個功能模塊的實現(xiàn)過程,并展示了相應(yīng)的成果圖。開發(fā)環(huán)境及集群啟動開發(fā)環(huán)境硬件配置信息表如REF_Ref160371594\h表5.1所示,其中主機名為Hadoop101的計算機為主節(jié)點(Master),其余兩臺為從節(jié)點(Slave)。軟件配置信息如REF_Ref160371725\h表5.2所示。表STYLEREF1\s5.SEQ表\*ARABIC\s11硬件配置信息表主機名IP地址HDFSSparkZookeeperKafkaHadoop101192.168.32.101NN、DN、NMMaster、WorkerLeaderKafkaHadoop102192.168.32.102DN、RM、NMMaster、WorkerFollowerKafkaHadoop103192.168.32.103NN2、DN、NMWorkerFollowerKafka表STYLEREF1\s5.SEQ表\*ARABIC\s12軟件配置信息表軟件名稱軟件版本Javajdk1.8.0_301Scala2.12.10Hadoop3.3.1Mysql5.6.51ElasticSearch7.7.0Redis6.2.10Zookeeper3.6.3Kafka3.0.0Spark3.1.3SpringBoot2.7.15Nginx1.6.2集群啟動將本地代碼上傳到Hadoop101中,并啟動集群。集群啟動會使用很多命令,非常繁瑣,且有些工具必須先啟動才能后啟動,例如Kafka必須在Zookeeper啟動完全后才能啟動,所以編寫集群啟動腳本可以自動啟動和停止集群,方便管理集群。當(dāng)集群啟動完全時,三臺計算機進程如REF_Ref160374163\h圖51所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s11三臺計算機進程圖系統(tǒng)功能實現(xiàn)當(dāng)原始數(shù)據(jù)進入Kafka隊列當(dāng)中后,通過運行命令REF_Ref160630732\h代碼5.1,啟動分流代碼將不同事件、行為分流到不同的Kafka主題當(dāng)中,方便后續(xù)處理。其中ods.LogODS代碼是分流日志數(shù)據(jù),包含啟動日志數(shù)據(jù)、頁面訪問日志數(shù)據(jù)、頁面動作日志數(shù)據(jù)、頁面曝光日志數(shù)據(jù)和錯誤日志數(shù)據(jù);ods.DBODS代碼是分流業(yè)務(wù)數(shù)據(jù),啟動包含事實數(shù)據(jù)和維度數(shù)據(jù)。事實數(shù)據(jù)包括訂單數(shù)據(jù)、購物數(shù)據(jù)、收藏數(shù)據(jù)等,維度數(shù)據(jù)包括用戶信息、地理信息等。代碼STYLEREF1\s5.SEQ代碼\*ARABIC\s11日志數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)分流啟動命令nohupspark-submit--masterspark://hadoop101:7077,hadoop102:7077,hadoop103:7077–classods.LogODS/home/training/gmall/gmall-realtime-spark-1.0-SNAPSHOT.jar>/home/training/gmall/logs/gmall-realtime/ods.LogODS.log2>&1&nohupspark-submit--masterspark://hadoop101:7077,hadoop102:7077,hadoop103:7077–classods.DBODS/home/training/gmall/gmall-realtime-spark-1.0-SNAPSHOT.jar>/home/training/gmall/logs/gmall-realtime/ods.DBODS.log2>&1&Kafka消費問題實時計算任務(wù)進行計算,到數(shù)據(jù)結(jié)果存盤之前,進程崩潰,如果在進程崩潰前Kafka調(diào)整了偏移量,Kafka就會認為數(shù)據(jù)已經(jīng)被處理過,即使進程重啟,Kafka也會從新的偏移量開始,所以之前沒有保存的數(shù)據(jù)就被丟失掉了。為了解決這一問題,可以使用Redis來讀取和存儲Kafka偏移量。創(chuàng)建偏移量工具類如REF_Ref160375389\h代碼5.2所示。在driver運行開始時讀取該Kafka主題偏移量,在結(jié)束時保存該主題偏移量。代碼STYLEREF1\s5.SEQ代碼\*ARABIC\s12偏移量工具類defsaveOffset(topicName:String,groupId:String,offsetRanges:Array[OffsetRange]):Unit={//定義Java的map集合,用于向Redis中保存數(shù)據(jù)valoffsetMap:util.HashMap[String,String]=newutil.HashMap[String,String]()//對封裝的偏移量數(shù)組offsetRanges進行遍歷for(offset<-offsetRanges){//分區(qū)valpartition:Int=offset.partition//起始點valfromOffset:Long=offset.fromOffset//結(jié)束點valuntilOffset:Long=offset.untilOffset//封裝到Map集合中offsetMap.put(partition.toString,untilOffset.toString)//打印println("offset:"+topicName+":"+groupId+"保存分區(qū)偏移量:"+partition+":"+fromOffset+">"+untilOffset)}//拼接Redis中存儲偏移量的keyvaloffsetKey:String="offset:"+topicName+":"+groupId//如果需要保存的偏移量不為空執(zhí)行保存操作if(offsetMap!=null&&!offsetMap.isEmpty){//獲取Redis客戶端valjedis:Jedis=RedisUtil.getJedisClient//保存到Redis中jedis.hmset(offsetKey,offsetMap)//關(guān)閉客戶端jedis.close()}}}日志數(shù)據(jù)分流SparkStreaming設(shè)置每5秒統(tǒng)計一次。通過循環(huán)RDD,判斷日志類型,發(fā)送到相應(yīng)的主題當(dāng)中,以啟動日志風(fēng)流為例,啟動日志分流代碼如REF_Ref160376160\h代碼5.3所示。第13行和第25行通過獲取數(shù)據(jù)類型判斷日志類型,第13行到22行提取公共信息,包含用戶ID、設(shè)備ID、地區(qū)ID等信息。第27到31行代碼提取啟動日志專有信息,第33行代碼將公共信息和專有信息封裝到已建好的模型(StartLog)中,生產(chǎn)數(shù)據(jù)到主題(dwd_start_log)中。代碼STYLEREF1\s5.SEQ代碼\*ARABIC\s13日志數(shù)據(jù)分流代碼//TODO5.分流數(shù)據(jù)baseParseDStream.foreachRDD(rdd=>{rdd.foreach(baseParse=>{//錯誤日志valerr:String=baseParse.getString("err")if(err!=null){//發(fā)送到錯誤主題中KafkaUtil.send(dwd_error_info,baseParse.toJSONString())}else{//提取公共信息valcommonObj:JSONObject=baseParse.getJSONObject("common")valmid:String=commonObj.getString("mid")valuid:String=commonObj.getString("uid")valpi:Int=commonObj.getInteger("ar")valch:String=commonObj.getString("ch")valos:String=commonObj.getString("os")valmd:String=commonObj.getString("md")valvc:String=commonObj.getString("vc")valisNew:String=commonObj.getString("is_new")valts:Long=baseParse.getLong("ts")//啟動日志valstartObj:JSONObject=baseParse.getJSONObject("start")if(startObj!=null){valentry:String=startObj.getString("entry")valloadingTimeMs:Long=startObj.getLong("loading_time_ms")valopenAdId:String=startObj.getString("open_ad_id")valopenAdMs:Long=startObj.getLong("open_ad_ms")valopenAdSkipMs:Long=startObj.getLong("open_ad_skip_ms")//封裝BeanvalstartLog:StartLog=StartLog(mid,uid,pi,ch,isNew,md,os,vc,entry,openAdId,loadingTimeMs,openAdMs,openAdSkipMs,ts)//發(fā)送到啟動主題中KafkaUtil.send(dwd_start_log,JSON.toJSONString(startLog,JSONWriter.Feature.FieldBased))}}KafkaUtil.flush()})})業(yè)務(wù)數(shù)據(jù)分流首先在Redis緩存中建好事實表和維度表信息,如REF_Ref160377088\h圖52所示。業(yè)務(wù)數(shù)據(jù)存儲在Mysql數(shù)據(jù)庫當(dāng)中,當(dāng)表數(shù)據(jù)發(fā)生變化時,Maxwell工具將會抽取變化的數(shù)據(jù)發(fā)送到原始業(yè)務(wù)主題中。業(yè)務(wù)數(shù)據(jù)分流代碼如REF_Ref160376872\h代碼5.4所示。首先從Redis中讀取事實表和維度表(3-12行),如果變化數(shù)據(jù)為事實表,則進行分流,與日志數(shù)據(jù)分流程序相同。如果變化數(shù)據(jù)為維度數(shù)據(jù),則存儲在Redis緩存中,方便以后進行維度合并。圖STYLEREF1\s5SEQ圖\*ARABIC\s12事實表和維度表信息圖代碼STYLEREF1\s5.SEQ代碼\*ARABIC\s14業(yè)務(wù)數(shù)據(jù)分流代碼baseDBParseDStream.foreachRDD(rdd=>{valjedis:Jedis=RedisUtil.getJedisClientvalfactTableKey:String="FACT:TABLES"valdimTableKey:String="DIM:TABLES"http://從redis中讀取表清單valfactTables:util.Set[String]=jedis.smembers(factTableKey)valdimTables:util.Set[String]=jedis.smembers(dimTableKey)//做成廣播變量valfactTablesBC:Broadcast[util.Set[String]]=ssc.sparkContext.broadcast(factTables)valdimTablesBC:Broadcast[util.Set[String]]=ssc.sparkContext.broadcast(dimTables)jedis.close()維度合并以統(tǒng)計日活躍用戶維度合并為例,通過循環(huán)獲取單個pageLog。從Redis中讀取用戶維度信息和地區(qū)維度信息。并進行日期格式轉(zhuǎn)換。將合并好的數(shù)據(jù)存在日活用戶寬表(dailyActiveUserInfoWide)中。再通過“toIterator”函數(shù)將迭代器轉(zhuǎn)換為可迭代的集合。數(shù)據(jù)存儲處理好的寬表數(shù)據(jù)統(tǒng)一存儲在ElasticSearch數(shù)據(jù)庫中,方便后續(xù)可視化后端程序調(diào)用。以日活用戶數(shù)據(jù)存儲為例。數(shù)據(jù)存儲代碼如REF_Ref160377984\h代碼5.5所示。通過獲取每條數(shù)據(jù)中的時間字段數(shù)據(jù),作為文檔拼接后綴(11-14行),防止前一天數(shù)據(jù)存儲到后一天數(shù)據(jù)當(dāng)中。在存儲完全結(jié)束后保存當(dāng)前偏移量(20行)。代碼STYLEREF1\s5.SEQ代碼\*ARABIC\s15數(shù)據(jù)存儲代碼//TODO8.寫入ESdailyActiveUserInfoWideWithDimDStream.foreachRDD(rdd=>{rdd.foreachPartition(dailyActiveUserInfoWideIter=>{//轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),保證冪等寫入valdailyActiveUserInfoWides:List[(String,DailyActiveUserInfoWide)]=dailyActiveUserInfoWideIter.toList.map(dailyActiveUserInfoWide=>(dailyActiveUserInfoWide.mid,dailyActiveUserInfoWide))valstringToWides:Map[String,List[(String,DailyActiveUserInfoWide)]]=dailyActiveUserInfoWides.groupBy(_._2.dt)for(elem<-stringToWides){if(elem._2.nonEmpty){//從數(shù)據(jù)中獲取日期,拼接ES的索引名valsearchKeywordInfoWideT:(String,DailyActiveUserInfoWide)=elem._2.headvaldt:String=searchKeywordInfoWideT._2.dtESUtil.bulkSaveIdempotent(elem._2,s"gmall_daily_active_user_info_wide_$dt")}}})//TODO9.提交偏移量OffsetUtil.saveOffset(topic,groupId,offsetRanges)})系統(tǒng)功能展示通過SpringBoot編寫后端接口,從ElasticSearch中獲取不同文檔數(shù)據(jù),根據(jù)功能需求編寫功能代碼。前端使用Vue框架和Echarts插件進行可視化展示。用戶日活躍分析統(tǒng)計日活躍用戶數(shù)效果圖如REF_Ref160465986\h圖53所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s13日活躍用戶數(shù)圖獲取活躍用戶留存率效果圖如REF_Ref160466006\h圖54所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s14活躍用戶留存率統(tǒng)計圖統(tǒng)計日活躍用戶每日增長率效果圖如REF_Ref160466102\h圖55所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s15日活躍用戶每日增長率統(tǒng)計圖按省市統(tǒng)計日活躍用戶數(shù),再以年齡段統(tǒng)計用戶群效果圖如REF_Ref160466097\h圖56所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s16日活用戶地區(qū)與年齡分布圖獲取各端日活躍用戶數(shù)效果圖如REF_Ref160466092\h圖57所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s17各端日活躍用戶數(shù)及趨勢圖統(tǒng)計每分鐘頁面訪問量效果圖如REF_Ref160466088\h圖58所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s18每分鐘訪問量統(tǒng)計圖轉(zhuǎn)化率分析統(tǒng)計頁面單跳轉(zhuǎn)換率效果圖如REF_Ref160466083\h圖59所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s19頁面單跳轉(zhuǎn)換率統(tǒng)計圖訂單分析以年齡、性別、地區(qū)為維度進行訂單分析效果圖如REF_Ref160466077\h圖510所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s110性別、年齡比例圖統(tǒng)計訂單取消原因分類效果圖如REF_Ref160466073\h圖511所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s111訂單取消原因比例圖各品牌銷售趨勢效果圖如REF_Ref160466068\h圖512所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s112品牌銷售趨勢圖統(tǒng)計各地區(qū)訂單分布量效果圖如REF_Ref160466063\h圖513所示。圖STYLEREF1\s5SEQ圖\*ARABIC\s113地區(qū)訂單分布圖本章小結(jié)本章主要聚焦于系統(tǒng)關(guān)鍵技術(shù)的實現(xiàn)。首先,我們詳細介紹了系統(tǒng)開發(fā)所需的軟硬件環(huán)境,為后續(xù)的技術(shù)實現(xiàn)提供了基礎(chǔ)。隨后,我們闡述了系統(tǒng)功能實現(xiàn)的具體流程,并對關(guān)鍵代碼進行了深入解讀。最后,我們展示了數(shù)據(jù)處理完成后的可視化結(jié)果,以直觀地呈現(xiàn)系統(tǒng)的實際應(yīng)用效果??偨Y(jié)與展望此章節(jié)對系統(tǒng)的運行進行了全面回顧,概述了當(dāng)前部署狀況,并對未來發(fā)展進行了展望。在當(dāng)前企業(yè)用戶行為數(shù)據(jù)迅猛增長的背景下,本系統(tǒng)深入研究并實施了用戶行為分析策略。利用Hadoop進行海量數(shù)據(jù)的存儲,通過Spark實現(xiàn)數(shù)據(jù)的離線與實時處理,最終將處理結(jié)果可視化,助力企業(yè)解決運營難題,推動產(chǎn)品發(fā)展。工作重點及未來規(guī)劃主要包括:深入探討用戶行為分析系統(tǒng)及相關(guān)技術(shù),如分布式存儲和計算;分析企業(yè)數(shù)據(jù)增長趨勢,選擇合適的技術(shù)、進行需求分析和架構(gòu)設(shè)計;實現(xiàn)系統(tǒng)核心功能,如日活躍用戶分析、熱門商品統(tǒng)計、訂單來源分析、頁面轉(zhuǎn)化率統(tǒng)計;并關(guān)注性能優(yōu)化,特別是shuffle環(huán)節(jié)的性能提升,涉及序列化、磁盤IO和網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)汝P(guān)鍵操作。在實現(xiàn)系統(tǒng)的過程中,也遇到過許多障礙,當(dāng)程序運行時,會產(chǎn)生大量的緩存信息和消耗大量的內(nèi)存,以及當(dāng)程序異常停止時如何重新自啟動,目前解決方案是通過“crontab”命令設(shè)置定時任務(wù),每隔30分鐘自動清理緩存以及檢測程序和集群狀態(tài)。在系統(tǒng)開發(fā)中,運用了許多大數(shù)據(jù)知識和技術(shù),對大數(shù)據(jù)的理解和掌握也更進一步,日后,會繼續(xù)完善此系統(tǒng)的文檔和功能,使得處理數(shù)據(jù)更具有價值和參考能力。參考文獻我國網(wǎng)民規(guī)模已達10.79億人[J].信息系統(tǒng)工程,2023(9):封2.DOI:10.3969/j.issn.1001-2362.2023.09.002.盤和林,鄧思堯,韓至杰.5G大數(shù)據(jù)[M].北京:中國人民大學(xué)出版社,2020.RanaG,SaharA,DouglasG.D,etal.Aclassificationofhadoopjobschedulersbasedonperformanceoptimizationapproaches[J].ClusterComputing,2021:1-23.孫康.基于Spark的電商用戶行為分析系統(tǒng)的研究[D].遼寧:沈陽理工大學(xué),2022.黃東升,郭崇.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026青海海西州格爾木市省級公益性崗位及勞動保障協(xié)理員招聘24人考試備考試題及答案解析
- 2026年上半年黑龍江事業(yè)單位聯(lián)考省地震局招聘2人參考考試題庫及答案解析
- 2026科技部監(jiān)管中心招聘派遣制職工2人考試備考試題及答案解析
- 福建省大數(shù)據(jù)集團有限公司2026屆校園招聘34人備考考試題庫及答案解析
- 2026安徽省皖信幼兒園教師及生活老師外包招聘4人筆試備考試題及答案解析
- 2026廣東廣州花都區(qū)秀全街樂泉小學(xué)招聘臨聘教師2人備考考試題庫及答案解析
- 2026廣東江門市城建集團有限公司公路運營分公司招聘3人備考考試題庫及答案解析
- 2026年楚雄州武定縣公安局特巡警大隊招聘輔警(2人)備考考試題庫及答案解析
- 2026廣西南寧市江南區(qū)那洪中學(xué)春季學(xué)期招聘數(shù)學(xué)、英語、物理編外教師筆試參考題庫及答案解析
- 安全管理制度不落實整改(3篇)
- 農(nóng)藝工教學(xué)計劃
- TSZSA 015-2024 COB LED光源封裝產(chǎn)品技術(shù)規(guī)范
- 2024新外研社版英語七下單詞默寫表(開學(xué)版)
- 衛(wèi)生管理組織制度模版(2篇)
- 《游園》課件統(tǒng)編版高中語文必修下冊
- 質(zhì)量責(zé)任劃分制度
- JT∕T 1496-2024 公路隧道施工門禁系統(tǒng)技術(shù)要求
- 2024版美團商家合作協(xié)議合同范本
- 一年級上冊數(shù)學(xué)應(yīng)用題50道(重點)
- 嵌入式系統(tǒng)實現(xiàn)與創(chuàng)新應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年山東大學(xué)
- 線纜及線束組件檢驗標準
評論
0/150
提交評論