姚曉玲 陳帥帥
摘要:針對視頻存儲快速增長的需求,為中小型視頻網(wǎng)站設(shè)計(jì)了基于Hadoop的視頻存儲與管理系統(tǒng)。系統(tǒng)采用B/S模式,使用多層應(yīng)用架構(gòu),以IntelliJ IDEA為開發(fā)工具,以SSM作為體系結(jié)構(gòu)解決方案,頁面層使用Bootstrap前端框架,以JSP技術(shù)進(jìn)行開發(fā),使用MySQL進(jìn)行結(jié)構(gòu)化信息數(shù)據(jù)存儲,使用Hadoop對視頻進(jìn)行分布式存儲。系統(tǒng)對日益增多的視頻數(shù)據(jù)進(jìn)行有效的存儲和快速的檢索,具備大容量、高并發(fā)、高可靠、易擴(kuò)展、易整合、易管理等特性。
關(guān)鍵詞:Hadoop;hdfs;分布式存儲;在線視頻;SSM
中圖分類號:TP315? ? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)27-0071-03
Abstract: In view of the rapid growth of video storage, a video storage and management system based on Hadoop is designed for small and medium-sized video websites. The system adopts B/S mode multi-layer application architecture, uses IntelliJ IDEA as development tool, uses SSM as the architecture solution, and the page layer uses Bootstrap front-end framework to develop with JSP technology, using MySQL as the database. The management system uses the Hadoop distributed file storage system to store video. The system can store and retrieve more and more video data effectively. It has the characteristics of large capacity, high concurrency, high reliability, easy expansion, easy integration and easy management.
Key words: Hadoop; hdfs; distributed storage; Online Video; SSM
1 背景
隨著4G網(wǎng)絡(luò)迅速發(fā)展以及移動手機(jī)普及,近幾年來在線視頻行業(yè)發(fā)展迅猛,截至2018年12月,在線視頻行業(yè)滲透率達(dá)71.3%,12月行業(yè)DAU(daily active user)達(dá)2.06億[1]。面對急速增長的市場需求,單機(jī)的后臺視頻存儲服務(wù)器已經(jīng)不能滿足互聯(lián)網(wǎng)企業(yè)的要求。
針對以上問題,結(jié)合在線視頻行業(yè)現(xiàn)狀和視頻網(wǎng)站的實(shí)際情況,開發(fā)了基于Hadoop視頻存儲與管理的分布式系統(tǒng)。該系統(tǒng)運(yùn)用模塊化的思想,將業(yè)務(wù)功能分成了多個(gè)獨(dú)立的模塊,如:視頻存儲模塊,視頻管理模塊,用戶模塊,廣告模塊等。每個(gè)模塊分別部署在集群中,當(dāng)某個(gè)模塊需求較大時(shí),只需要增加相應(yīng)的子節(jié)點(diǎn)。分布式結(jié)構(gòu)極大降低了各模塊之間的耦合度,使其可以獨(dú)立開發(fā)、部署、測試,也可以更有針對性地對整個(gè)系統(tǒng)進(jìn)行擴(kuò)展[2]。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)
部署該系統(tǒng)的目的是讓網(wǎng)站能夠?yàn)橛脩籼峁┝己玫牟シ朋w驗(yàn),帶來極大的訪問量,實(shí)現(xiàn)收益的最大化,因此面向用戶的前臺有以下功能:用戶注冊、登錄、個(gè)人信息維護(hù)、視查詢、視頻播放、評論以及系統(tǒng)推薦,后臺管理員的權(quán)限和功能主要包括:服務(wù)器和系統(tǒng)管理、用戶管理、視頻管理、前臺模板管理、廣告的管理、數(shù)據(jù)采集管理。
系統(tǒng)功能結(jié)構(gòu)圖[3]能夠梳理視頻管理系統(tǒng)各個(gè)功能模塊在開發(fā)過程中業(yè)務(wù)邏輯,減少開發(fā)的工作量。系統(tǒng)前臺功能結(jié)構(gòu)圖如圖1,系統(tǒng)后臺功能結(jié)構(gòu)圖如圖2所示。
2.2 系統(tǒng)技術(shù)架構(gòu)設(shè)計(jì)
系統(tǒng)使用的是廉價(jià)的服務(wù)器主機(jī),安裝開源的Linux系統(tǒng)CentOS,搭建Hadoop集群環(huán)境,使用hdfs存儲視頻文件,安裝MySQL數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)。使用Mybatis作為持久化框架,實(shí)現(xiàn)對數(shù)據(jù)庫的增、刪、改、查功能;使用Spring管理所有Bean的生命周期,維護(hù)應(yīng)用中所有對象的創(chuàng)建、初始化、銷毀及關(guān)聯(lián)關(guān)系;使用SpringMVC作為View層的實(shí)現(xiàn)者,完成用戶的請求接收功能,SpringMVC的Controller作為整個(gè)應(yīng)用的控制器,完成用戶請求的轉(zhuǎn)發(fā)及對用戶的響應(yīng)[4]。使用Bootstrap框架開發(fā)前端用戶界面的響應(yīng)式布局,使用LayUI框架完成后臺管理員界面模塊化布局。
系統(tǒng)分層是一種很常見的架構(gòu)模式,是大多數(shù)Java EE應(yīng)用的實(shí)際標(biāo)準(zhǔn), 分層架構(gòu)模式里的組件被分成幾個(gè)平行的層次,每一層都代表了應(yīng)用的一個(gè)功能(展示邏輯或者業(yè)務(wù)邏輯)。本系統(tǒng)分為Action、Service、DAO、Model層,其中DAO層主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行訪問類都封裝在此;Service層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì);Model層存放應(yīng)用邏輯層的對象,頁面訪問時(shí):首先Action層引用對應(yīng)的Service層,Service層進(jìn)行業(yè)務(wù)處理和調(diào)用Dao層,Dao層對數(shù)據(jù)庫進(jìn)行操作并將數(shù)據(jù)封裝到Model層的實(shí)體類返回給Service層,Service層再返還給Action層,Action返回給前端。其他包如Util里面存放的是靜態(tài)工具類,Interceptor里面放的全局的攔截器,Exception里面存放的異常信息,Task里面存放的是一些定時(shí)任務(wù)。
3 視頻存儲在Hdfs中的技術(shù)實(shí)現(xiàn)
Hadoop作為一個(gè)大數(shù)據(jù)框架,可以實(shí)現(xiàn)對存儲到hdfs數(shù)據(jù)進(jìn)行分布式管理,因此如何將視頻數(shù)據(jù)存儲到hdfs以及從hdfs下傳數(shù)據(jù)實(shí)現(xiàn)網(wǎng)頁播放成為系統(tǒng)的技術(shù)關(guān)鍵點(diǎn)。
3.1 視頻存儲到hdfs視頻上傳首先使用Spring上傳文件的形式先將前端文件接收到后臺,然后調(diào)用Upload類,關(guān)鍵部分代碼如下所示:
設(shè)計(jì)操作Hadoop接口的類Upload,將從Controller傳過來的數(shù)據(jù)通過調(diào)用Hadoop的FileSystem接口中的copyFromLocalFile方法實(shí)現(xiàn)將視頻文件上傳到hdfs中。
其中的fs.defaultFS屬性需要與集群Master NameNode節(jié)點(diǎn)中配置的一致。該屬性配置一般在etc/hadoop/core-site.xml文件中進(jìn)行定義。
copyFromLocalFile方法參數(shù)說明:
第一個(gè)參數(shù):表示是否刪除本地的源文件,也就是上傳文件后是否保留原文件,這里為了避免后續(xù)文件越來越多,就直接采用上傳成功就刪除的方式。
第二個(gè)參數(shù):表示是否覆蓋已存在的文件,這里false表示不覆蓋,如果HDFS集群中已存在該文件,就提示上傳失敗。
第三個(gè)參數(shù):表示源文件路徑。
第四個(gè)參數(shù):上傳到HDFS指定的路徑。
3.2 網(wǎng)頁播放HDFS視頻的技術(shù)實(shí)現(xiàn)后臺接收前臺傳來的播放請求,將HDFS路徑和前臺文件路徑參數(shù)拼接形成完整的視頻源文件路徑。然后新建數(shù)據(jù)流,判斷是否是斷點(diǎn)續(xù)播,設(shè)置不同的頭文件參數(shù)及開始和結(jié)束的位置,最后調(diào)用Hadoop的IOUtils接口中的copyBytes方法實(shí)現(xiàn)文件流的傳輸。
4 結(jié)束語
本文結(jié)合當(dāng)下視頻網(wǎng)站的運(yùn)營模式對視頻系統(tǒng)功能需求進(jìn)行分析,確定系統(tǒng)使用需求,以IntelliJ IDEA為開發(fā)工具、Hadoop集群為測試環(huán)境下使用Java WEB結(jié)合MySQL數(shù)據(jù)庫,基于Spring、Spring MVC、MyBatis的Java EE企業(yè)級框架,設(shè)計(jì)與實(shí)現(xiàn)了視頻存儲與管理系統(tǒng)。
系統(tǒng)使用集群結(jié)構(gòu),實(shí)現(xiàn)了負(fù)載均衡,同時(shí)又具有高性價(jià)比、高可用性,可以通過廉價(jià)的符合工業(yè)標(biāo)準(zhǔn)的硬件構(gòu)造出高性能的系統(tǒng),解決中小網(wǎng)站前期硬件投資費(fèi)用高昂的痛點(diǎn)。
參考文獻(xiàn):
[1] 中國互聯(lián)網(wǎng)絡(luò)信息中心. 第41次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告[EB/OL]. http://www.cac.gov.cn/2018-01/31/c_1122347026.html.
[2] 李慶君. Hadoop架構(gòu)下海量空間數(shù)據(jù)存儲與管理[D]. 武漢: 武漢大學(xué), 2017.
[3] 朱三元. 軟件工程技術(shù)概論[M]. 北京: 科學(xué)出版社, 2002: 145-150.
[4] 張宇, 王映輝, 張翔南. 基于Spring的MVC框架設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程, 2010, 36(4): 59-62.
[5] 吳張順, 張珣. 基于FFmpeg的視頻編碼存儲研究與實(shí)現(xiàn)[J]. 杭州電子科技大學(xué)學(xué)報(bào), 2006, 26(3).
[6] 高煜紅, 陳清華, 方路平. ZFS在基于Hadoop的視頻存儲系統(tǒng)中的應(yīng)用[J]. 杭州電子科技大學(xué)學(xué)報(bào), 2013(5): 102-105.
[7] 王志力, 李瑩. 基于WEB的開放式架構(gòu)下視頻管理系統(tǒng)設(shè)計(jì)[J]. 現(xiàn)代電子技術(shù), 2017, 40(17): 15-18.
[8] 馮亞洲. 基于Hadoop的電力視頻大數(shù)據(jù)分布式檢索系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 南京: 南京郵電大學(xué), 2017.
[9] 范進(jìn)超. 基于SSH框架的網(wǎng)絡(luò)視頻管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 長沙: 湖南大學(xué), 2015.
【通聯(lián)編輯:謝媛媛】