馬亞銘 陶利民 劉子琦
摘 要:為了提升電商大數(shù)據(jù)平臺(tái)復(fù)雜數(shù)據(jù)操作性能,通過(guò)分析電商業(yè)務(wù)特點(diǎn),從數(shù)據(jù)重新組織與平臺(tái)參數(shù)調(diào)優(yōu)兩個(gè)方面對(duì)數(shù)據(jù)平臺(tái)進(jìn)行優(yōu)化。在數(shù)據(jù)重新組織方面,使用ORC數(shù)據(jù)格式存儲(chǔ)數(shù)據(jù),并對(duì)數(shù)據(jù)表進(jìn)行合理的分區(qū)、分桶;在平臺(tái)參數(shù)調(diào)優(yōu)方面,對(duì)業(yè)務(wù)涉及到的主要組件參數(shù)進(jìn)行針對(duì)性調(diào)節(jié)。最后,通過(guò)搭建具有32個(gè)節(jié)點(diǎn)的Hadoop集群,并使用TPC-DS測(cè)試集進(jìn)行仿真實(shí)驗(yàn),驗(yàn)證調(diào)優(yōu)思路及方法的有效性。結(jié)果表明,調(diào)優(yōu)之后的平臺(tái)性能大約是未進(jìn)行任何優(yōu)化平臺(tái)的7.5倍,優(yōu)化效果顯著。
關(guān)鍵詞:大數(shù)據(jù)平臺(tái);電子商務(wù);Hadoop;性能調(diào)優(yōu)
DOI:10. 11907/rjdk. 192524 開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2020)005-0186-04
0 引言
電子商務(wù)的誕生及發(fā)展給人們生活帶來(lái)了巨大便利,隨著電商規(guī)模的進(jìn)一步擴(kuò)大,電商平臺(tái)每日會(huì)產(chǎn)生海量數(shù)據(jù)。如何對(duì)這些數(shù)據(jù)進(jìn)行快速、有效的存儲(chǔ)與處理,是保障電商業(yè)務(wù)順利開(kāi)展以及推動(dòng)其發(fā)展的必備條件。Hadoop作為一款優(yōu)秀的開(kāi)源大數(shù)據(jù)平臺(tái),被大多數(shù)電子商務(wù)企業(yè)所采用。為了獲得更好的數(shù)據(jù)處理性能,需要根據(jù)電子商務(wù)業(yè)務(wù)特點(diǎn),對(duì)該平臺(tái)進(jìn)行針對(duì)性的性能調(diào)優(yōu)。由于Hadoop的廣泛應(yīng)用,學(xué)者們對(duì)其調(diào)優(yōu)方法已進(jìn)行了較多研究。如王康等[1]闡述針對(duì)Hive數(shù)據(jù)倉(cāng)庫(kù)的通用調(diào)優(yōu)方法,即對(duì)Hive與MapReduce相關(guān)參數(shù)進(jìn)行調(diào)優(yōu);王勇等[2]總結(jié)了基于HBase健康大數(shù)據(jù)平臺(tái)的多種調(diào)優(yōu)方法等。綜合這些調(diào)優(yōu)方法,將其歸納為以下4個(gè)方面:①數(shù)據(jù)重新組織,如數(shù)據(jù)分區(qū)、分桶等;②調(diào)節(jié)Hadoop平臺(tái)自身參數(shù),如設(shè)置HDFS讀寫緩存大小等;③采用輔助技術(shù),如數(shù)據(jù)壓縮等;④Hadoop源碼調(diào)優(yōu),可以是改進(jìn)某種算法或策略等。
然而,針對(duì)性能調(diào)優(yōu)的已有研究多為一些通用的或其它場(chǎng)景下的調(diào)優(yōu),尚沒(méi)有針對(duì)電商平臺(tái)的調(diào)優(yōu)方法總結(jié)。本文根據(jù)對(duì)工程實(shí)踐的總結(jié),闡述針對(duì)電商大數(shù)據(jù)平臺(tái)的性能調(diào)優(yōu)方法。
1 Hadoop平臺(tái)基本框架
Hadoop是一款基于Java分布式大數(shù)據(jù)處理與分析的軟件框架。用戶可在不了解分布式底層細(xì)節(jié)的情況下開(kāi)發(fā)分布式程序,充分利用集群進(jìn)行高速運(yùn)算與存儲(chǔ),解決了大數(shù)據(jù)的可靠存儲(chǔ)與處理問(wèn)題[3]。Hadoop經(jīng)過(guò)多年發(fā)展已演化成一個(gè)生態(tài)系統(tǒng),其基本框架如圖1所示。
由組件的功能和層次結(jié)構(gòu)可知,對(duì)Hadoop的性能調(diào)優(yōu)涉及對(duì)各個(gè)組件的調(diào)優(yōu),從底層HDFS到上層Hive都需要進(jìn)行整體上的調(diào)優(yōu),任何組件都可能成為系統(tǒng)瓶頸。
2 電商大數(shù)據(jù)平臺(tái)調(diào)優(yōu)
電子商務(wù)平臺(tái)是用于支撐商品在互聯(lián)網(wǎng)上進(jìn)行交易的平臺(tái)。其涉及到的主要業(yè)務(wù)流程包括:①商品信息維護(hù);②訂單管理;③銷售記錄(sales)和退貨記錄(returns);④倉(cāng)庫(kù)(warehouse)庫(kù)存記錄(inventory)維護(hù);⑤CRM客戶關(guān)系管理(customer、customer_address)等。
在這些業(yè)務(wù)流程中會(huì)經(jīng)常對(duì)一些大表(如商品信息表),進(jìn)行大量的CRUD(增刪改查)操作。針對(duì)電商業(yè)務(wù)流程的數(shù)據(jù)處理特點(diǎn),一般從以下兩方面進(jìn)行性能調(diào)優(yōu),分別為數(shù)據(jù)重新組織與平臺(tái)參數(shù)調(diào)優(yōu)。
2.1 數(shù)據(jù)重新組織
對(duì)數(shù)據(jù)進(jìn)行針對(duì)性的重新組織可以提高數(shù)據(jù)輸入的有效性,對(duì)數(shù)據(jù)進(jìn)行更精準(zhǔn)的處理,從而提升系統(tǒng)性能。針對(duì)電商大數(shù)據(jù)平臺(tái),主要采取如下措施:
(1)使用ORC 格式。ORC文件格式是一種Hadoop生態(tài)圈中的列式存儲(chǔ)格式,有多種文件壓縮方式,并且有著很高的壓縮比。其提供row group index、bloom filter index等多種索引,而且文件是可切分(Split)的。因此,在Hive中使用ORC作為表的文件存儲(chǔ)格式,不僅可以節(jié)省HDFS存儲(chǔ)資源,查詢?nèi)蝿?wù)的輸入數(shù)據(jù)量也大幅減少[4]。同時(shí)ORC通過(guò)壓縮、分片并逐段記錄中間結(jié)果的方式提高數(shù)據(jù)塊管理能力,能有效提高數(shù)據(jù)讀取效率[4]。
在電商數(shù)據(jù)存儲(chǔ)中,如果繼續(xù)使用傳統(tǒng)行式存儲(chǔ)對(duì)諸如訂單表、商品表等這些龐大的數(shù)據(jù)表進(jìn)行管理,查詢效率會(huì)非常低。若依靠索引優(yōu)化查詢,由于數(shù)據(jù)量的龐大,建立與維護(hù)索引的代價(jià)都非常大。由于ORC格式具有的上述特性,將電商平臺(tái)的相關(guān)數(shù)據(jù)以O(shè)RC格式加以組織,可大大提升數(shù)據(jù)操作速度。
(2)數(shù)據(jù)表分區(qū)分桶。分區(qū)、分桶可以減少掃描成本,在一定程度上提高查詢效率。由電商業(yè)務(wù)模型及數(shù)據(jù)模型可知,隨著交易規(guī)模的擴(kuò)大,將會(huì)產(chǎn)生很多數(shù)據(jù)量龐大的大表(幾十個(gè)TB以上),而日常業(yè)務(wù)流程中又需要對(duì)這些大表進(jìn)行頻繁的查詢操作。因此,針對(duì)業(yè)務(wù)的數(shù)據(jù)操作特點(diǎn)進(jìn)行適當(dāng)?shù)姆謪^(qū)、分桶,可提高數(shù)據(jù)操作速度。
在確定分區(qū)、分桶字段時(shí),不僅要關(guān)注該字段是否常被用于查詢,還需要關(guān)注該字段值數(shù)量等綜合因素。例如,在電商業(yè)務(wù)流程中,經(jīng)常需要根據(jù)商品名稱進(jìn)行商品信息查詢,但若根據(jù)商品名稱這一字段進(jìn)行分桶,億級(jí)的商品數(shù)將會(huì)對(duì)應(yīng)億級(jí)數(shù)量的桶文件,顯然是不可行的。因此,根據(jù)商品分類或地區(qū)等信息進(jìn)行分桶,也可以有效提高查詢效率。
2.2 平臺(tái)參數(shù)調(diào)優(yōu)
電商平臺(tái)管理的數(shù)據(jù)類型主要是一些結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)操作大多是SQL型操作,因此調(diào)節(jié)參數(shù)主要涉及到的Hadoop平臺(tái)組件有Yarn、Hive和Spark。其中每一個(gè)組件都有大量系統(tǒng)參數(shù),本文只列舉一些重要的、對(duì)電商數(shù)據(jù)平臺(tái)性能有較大影響的參數(shù),并對(duì)這些參數(shù)進(jìn)行分析與調(diào)優(yōu)。
2.2.1 Yarn
(1)yarn.nodemanager.vmem-pmem-ratio:該參數(shù)是虛擬內(nèi)存與物理內(nèi)存的比率,默認(rèn)值為2.1。增大該參數(shù)可以起到增大虛擬內(nèi)存的作用,以避免Yarn的Container內(nèi)存不足。因此,在存儲(chǔ)空間足夠的情況下,可根據(jù)實(shí)際物理資源及任務(wù)特點(diǎn)適當(dāng)增大該參數(shù)的值,以保證yarn有足夠的內(nèi)存空間可以使用。
(2)yarn.nodemanager.resource.percentage-physical-cpu
-limit:該參數(shù)是對(duì)NodeManager管理下所有Container可使用CPU資源的限制。在電商數(shù)據(jù)平臺(tái)場(chǎng)景下,本文僅考慮怎樣達(dá)到最優(yōu)性能。一般允許yarn完全使用CPU資源,即該參數(shù)值為100%。
(3)yarn.nodemanager.resource.memory-mb:該參數(shù)用于指定yarn可以管理的最大內(nèi)存容量。在電商場(chǎng)景下,除預(yù)留給系統(tǒng)其它進(jìn)程的內(nèi)存外,應(yīng)盡量多地將內(nèi)存交給yarn進(jìn)行管理,使yarn可用內(nèi)存資源最大化。
2.2.2 Hive
(1)hive.exec.dynamic.partition.mode:該參數(shù)表示是否允許自動(dòng)分區(qū)。自動(dòng)分區(qū)會(huì)自動(dòng)根據(jù)分區(qū)字段所有值進(jìn)行分區(qū)。在電商場(chǎng)景下會(huì)對(duì)多個(gè)大表進(jìn)行分區(qū),并且隨著系統(tǒng)的使用,多數(shù)分區(qū)字段的值會(huì)增加或減少。如以商品表的類別字段進(jìn)行分區(qū),隨著業(yè)務(wù)的擴(kuò)展與變化,商品類別會(huì)增多或減少。采用手動(dòng)分區(qū)方法會(huì)非常低效,因此在電商場(chǎng)景下,該字段一般設(shè)為nonstrict,表示允許自動(dòng)分區(qū)。
(2)hive.exec.max.dynamic.partitions:該參數(shù)表示動(dòng)態(tài)分區(qū)的上限。雖然可以利用該參數(shù)解決在動(dòng)態(tài)分區(qū)時(shí)因分區(qū)過(guò)多造成系統(tǒng)奔潰的情況,但考慮到分區(qū)目的是為了加快數(shù)據(jù)讀寫,不應(yīng)該讓最大分區(qū)數(shù)限制實(shí)際需要進(jìn)行的分區(qū),因此一般設(shè)置一個(gè)足夠滿足分區(qū)要求的數(shù)量,并要求選擇合理的字段進(jìn)行分區(qū)。
(3)hive.exec.max.created.files:該參數(shù)表示一個(gè)MapReduce作業(yè)能創(chuàng)建的HDFS文件最大數(shù),一般不會(huì)讓其成為MR作業(yè)的限制,而是要讓作業(yè)本身在系統(tǒng)能力范圍內(nèi)。因此,會(huì)設(shè)置一個(gè)較大的值,默認(rèn)為100 000。
(4)hive.optimize.sort.dynamic.partition:該參數(shù)會(huì)對(duì)需要寫入的數(shù)據(jù)進(jìn)行排序,目的是使每次只對(duì)一個(gè)分區(qū)進(jìn)行寫入操作,寫入完畢后,再打開(kāi)下一個(gè)分區(qū)進(jìn)行集中寫入。
由于在電商業(yè)務(wù)場(chǎng)景中分區(qū)數(shù)較多,如果對(duì)某個(gè)表進(jìn)行寫入時(shí),同時(shí)打開(kāi)這些分區(qū),將占用過(guò)多內(nèi)存,因此該參數(shù)一般設(shè)為true。
2.2.3 Spark
(1)spark.serializer:spark在進(jìn)行內(nèi)存計(jì)算時(shí),需要對(duì)一些中間結(jié)果進(jìn)行序列化與反序列化,此時(shí)需要用到序列化框架。KryoSerializer具有速度快、序列化后體積小等優(yōu)點(diǎn),故序列化器一般配置為KryoSerializer。
(2)spark.memory.fraction:調(diào)整該參數(shù)可以控制spark的shuffle內(nèi)存和storage內(nèi)存總量占總內(nèi)存的比例。需要根據(jù)任務(wù)類型保證shuffle過(guò)程有足夠的內(nèi)存, 同時(shí)也要預(yù)留一些內(nèi)存給spark其它功能以及系統(tǒng)軟件使用。
(3)spark.memory.storageFraction:該參數(shù)調(diào)節(jié)storage內(nèi)存所占比例,與參數(shù)(2)一起確定shuffle和storage各占內(nèi)存的比例??梢愿鶕?jù)任務(wù)類型及表的多少,合理調(diào)整該值,增大shuffle內(nèi)存比例,縮小storage內(nèi)存比例。因?yàn)閟huffle過(guò)程直接影響計(jì)算任務(wù)完成速度,shuffle內(nèi)存應(yīng)盡量保證每個(gè)任務(wù)的使用??梢酝ㄟ^(guò)監(jiān)控日志及運(yùn)行結(jié)果發(fā)現(xiàn)shuffle過(guò)程所需內(nèi)存,從而對(duì)該參數(shù)進(jìn)行調(diào)節(jié)。
(4)spark.sql.shuffle.partitions:該參數(shù)用于確定shuffle過(guò)程的partition個(gè)數(shù)。適當(dāng)增加partition個(gè)數(shù)可以增大并行度,提高系統(tǒng)運(yùn)行效率。
3 實(shí)驗(yàn)驗(yàn)證
3.1 實(shí)驗(yàn)環(huán)境與方法
為了驗(yàn)證針對(duì)電商大數(shù)據(jù)平臺(tái)性能調(diào)優(yōu)的有效性,本文搭建了Hadoop集群。實(shí)驗(yàn)環(huán)境共有32個(gè)節(jié)點(diǎn),詳細(xì)配置如表2所示。
為了模擬電商日常業(yè)務(wù),本文采用TPC-DS相關(guān)數(shù)據(jù)集[5]。該數(shù)據(jù)集可模擬某在線零售商日常業(yè)務(wù)數(shù)據(jù),基本符合電商業(yè)務(wù)場(chǎng)景。數(shù)據(jù)集共包含24張表,這里只列舉主要的7張大表,如表4所示。
同時(shí)TPC-DS使用99個(gè)SQL語(yǔ)句,以模擬零售商日常各種業(yè)務(wù)流程,本文從中選取10個(gè)有代表性的SQL測(cè)試平臺(tái)性能。這10個(gè)SQL包含了復(fù)雜條件下的庫(kù)存查詢與銷售記錄查詢、銷售總額與平均銷售額統(tǒng)計(jì)計(jì)算等,基本涵蓋了電商主要業(yè)務(wù)流程。
3.2 實(shí)驗(yàn)過(guò)程及結(jié)果分析
首先在平臺(tái)中生成TPC-DS數(shù)據(jù)集中的數(shù)據(jù)(本次實(shí)驗(yàn)數(shù)據(jù)總量共30TB),在不進(jìn)行調(diào)優(yōu)的情況下(在系統(tǒng)默認(rèn)配置下)使用選擇的10個(gè)SQL進(jìn)行數(shù)據(jù)操作,接著對(duì)系統(tǒng)按上文方法進(jìn)行調(diào)優(yōu),即數(shù)據(jù)重新組織與平臺(tái)參數(shù)調(diào)節(jié)。
將數(shù)據(jù)格式重新組織成ORC格式,然后進(jìn)行分區(qū)、分桶。根據(jù)分析,主要針對(duì)幾個(gè)大表(store_sales、catalog_sales、web_sales、inventory)進(jìn)行數(shù)據(jù)組織的優(yōu)化,根據(jù)產(chǎn)品經(jīng)銷存的日常模型綜合評(píng)估可行性,最終分區(qū)分桶方案如表5所示。
從實(shí)驗(yàn)結(jié)果綜合來(lái)看,按照本文描述的針對(duì)電商大數(shù)據(jù)平臺(tái)的調(diào)優(yōu)思路與方法,大大減少了對(duì)海量數(shù)據(jù)的操作與分析時(shí)間,顯著提升了數(shù)據(jù)平臺(tái)性能。
4 結(jié)語(yǔ)
本文總結(jié)了針對(duì)基于Hadoop的電商大數(shù)據(jù)平臺(tái)的一般調(diào)優(yōu)思路與方法。系統(tǒng)調(diào)優(yōu)是對(duì)系統(tǒng)各方面進(jìn)行優(yōu)化的過(guò)程,本文僅總結(jié)了基礎(chǔ)的、有明顯提升效果的兩種調(diào)優(yōu)方法:數(shù)據(jù)重新組織和平臺(tái)參數(shù)調(diào)優(yōu),并通過(guò)搭建Hadoop集群,以及使用TPC-DS標(biāo)準(zhǔn)測(cè)試集進(jìn)行仿真實(shí)驗(yàn),結(jié)果驗(yàn)證了調(diào)優(yōu)的有效性,調(diào)優(yōu)后的平臺(tái)性能得到顯著提升。本文平臺(tái)參數(shù)主要是依據(jù)參數(shù)本身的作用,以及結(jié)合實(shí)踐經(jīng)驗(yàn),通過(guò)手動(dòng)調(diào)節(jié)及試驗(yàn)完成調(diào)優(yōu)的。尋求參數(shù)最優(yōu)化有很多算法可以實(shí)現(xiàn),如遺傳算法、粒子群算法(PSO)等,可幫助人們尋找參數(shù)最優(yōu)解,避免手動(dòng)調(diào)優(yōu)的盲目性。
參考文獻(xiàn):
[1] 王康,陳海光,李東靜. 基于Hive的性能優(yōu)化研究[J]. 上海師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2017(46):534.
[2] 王勇,尹鵬飛,李娟. 基于HBase的健康大數(shù)據(jù)平臺(tái)性能優(yōu)化及應(yīng)用[J]. 軟件導(dǎo)刊,2017(10):150-153,162.
[3] 許吳環(huán),顧瀟華. 大數(shù)據(jù)處理平臺(tái)比較研究[J]. 軟件導(dǎo)刊,2017(4):212-214.
[4] 曹英. 大數(shù)據(jù)環(huán)境下Hadoop性能優(yōu)化的研究[D]. 大連:大連海事大學(xué), 2013.
[5] YERUVA S,KUMAR P V,PADMANABHAM P. Distributed data warehouse-experimentation with TPC-DS[C].2015 IEEE International Conference on Computational Intelligence and Computing Research (ICCIC). IEEE, 2015.
[6] 姜春宇,魏凱. 大數(shù)據(jù)平臺(tái)的基礎(chǔ)能力和性能測(cè)試[J]. 大數(shù)據(jù), 2017(4):43-51.
[7] 詹劍鋒,高婉鈴,王磊,等. BigDataBench:開(kāi)源的大數(shù)據(jù)系統(tǒng)評(píng)測(cè)基準(zhǔn)[J]. 計(jì)算機(jī)學(xué)報(bào),2016(1):196-211.
[8] 倪寧. 大數(shù)據(jù)時(shí)代下電子商務(wù)平臺(tái)的探索和研究——以淘寶網(wǎng)為例[J]. 江蘇商論,2014(5):13-14.
[9] LIU B,MENG X,SHI Y. CloudBM: a benchmark for cloud data management systems[J]. Journal of Frontiers of Computer Science and Technology, 2012, 6(6): 504-512.
[10] 陳娜,張金娟,劉智瓊,等. 基于Hadoop平臺(tái)的電信大數(shù)據(jù)入庫(kù)及查詢性能優(yōu)化研究[J]. 移動(dòng)通信, 2014(7):58-63.
[11] 楊浩. Hadoop平臺(tái)性能優(yōu)化的研究與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2015.
[12] 張新玲, 顏秉珩. Hadoop平臺(tái)基準(zhǔn)性能測(cè)試研究[J]. 軟件導(dǎo)刊, 2015(1):30-32.
[13] SINGH S,GARG R,MISHRA P K. Performance optimization of MapReduce-based apriori algorithm on Hadoop cluster[J]. Computers & Electrical Engineering, 2017:S0045790617308534.
[14] 劉娟, 豆育升, 何晨, 等. 基于調(diào)度器的Hadoop性能優(yōu)化方法研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2013(1):198-202.
[15] 連加典,劉宏立, 謝海波,等. 基于預(yù)測(cè)機(jī)制的分級(jí)負(fù)載均衡算法[J]. 計(jì)算機(jī)工程與應(yīng)用,2015,51(11):67-71.
[16] 董新華,李瑞軒,周灣灣,等. Hadoop系統(tǒng)性能優(yōu)化與功能增強(qiáng)綜述[J]. 計(jì)算機(jī)研究與發(fā)展, 2013, 50(S2):1-15.
[17] 高莉莎, 劉正濤, 應(yīng)毅. 基于應(yīng)用程序的MapReduce性能優(yōu)化[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015(7):102-105,112.
[18] TOM W. Hadoop權(quán)威指南(中文版)[M].北京:清華大學(xué)出版社, 2010.
(責(zé)任編輯:黃 ?。?/p>