張浩 孫淑霞
(成都理工大學(xué)信息科學(xué)與技術(shù)學(xué)院, 四川 成都 610059)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)可提供的服務(wù)越來越多。視頻業(yè)務(wù)作為一種典型的網(wǎng)絡(luò)服務(wù),具有極大的發(fā)展?jié)摿褪袌鲆?guī)模。與其它業(yè)務(wù)比較而言,視頻業(yè)務(wù)有自身特點:視頻處理過程對計算能力要求高;視頻的編碼、解碼、實時視頻處理等技術(shù),涉及到大量的空域頻域的變換,在時效性較強的視頻業(yè)務(wù)中,對計算能力構(gòu)成很大挑戰(zhàn)。Hadoop是一個開源的云計算框架,它是一個適合處理海量數(shù)據(jù)的并行編程系統(tǒng),可以根據(jù)輸入數(shù)據(jù)分布等信息自動創(chuàng)建多個并行子任務(wù),并將子任務(wù)調(diào)度到合適的集群節(jié)點上并行執(zhí)行。所以此模型能夠很好地適用于多個視頻文件同時轉(zhuǎn)碼。MapReduce是Hadoop系統(tǒng)的一個核心模塊,它使得程序員不必關(guān)心節(jié)點失效、任務(wù)失效及任務(wù)之間的數(shù)據(jù)等問題,而只需按照MapReduce編程規(guī)范定義好map函數(shù)、reduce函數(shù)以及一些數(shù)據(jù)格式信息,即可完成分布式數(shù)據(jù)處理問題。
談到Hadoop不得不提到云計算,云計算是網(wǎng)格計算、分布式計算、并行計算、效應(yīng)計算、網(wǎng)絡(luò)存儲、虛擬化、負載均衡等傳統(tǒng)計算機技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。云計算的基本思想是通過構(gòu)建大規(guī)模的基于集群系統(tǒng)的數(shù)據(jù)中心,將集群中的資源以虛擬化的形式向用戶提供資源池??傊?,云計算是在分布式計算的技術(shù)基礎(chǔ)上的更高層次的“集中式”計算處理模式,Hadoop是由Apache開源組織的一個分布式計算框架,可以在大量廉價的硬件設(shè)備組成的集群上運行應(yīng)用程序,為應(yīng)用程序提供了一組穩(wěn)定可靠的接口,旨在構(gòu)建一個有高可靠性和良好擴展性的分布式系統(tǒng),它是現(xiàn)在實現(xiàn)云計算的主要可選方式之一。Hadoop主要包括Hadoop分布式文件系統(tǒng)和計算模型MapReduce兩個部分。
HDFS有著高容錯性(fault-tolerent)的特點,設(shè)計用來部署在低廉的(low-cost)硬件上。它提供高傳輸率(high throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS采用Master/Slave架構(gòu),一個HDFS集群由一個NameNode節(jié)點和一組DataNode節(jié)點組成;NameNode管理文件系統(tǒng)的元數(shù)據(jù),而DataNode存儲了實際的數(shù)據(jù)。
MapReduce是由Google提出的云計算核心計算模型,提供了比多線程編程更上一層的接口,屏蔽了許多細節(jié)性問題,降低了開發(fā)者的入門門檻,提高了開發(fā)分布式程序的效率。MapReduce是一個用于大數(shù)據(jù)量計算的編程模型,同時也是一種高效的任務(wù)調(diào)度模型。在MapReduce計算模型中,需要用戶提供兩個關(guān)鍵函數(shù),map函數(shù)和reduce函數(shù),即映射和規(guī)約兩個主要過程。MapReduce框架運行于HDFS文件系上面,這兩個函數(shù)對一組鍵值對(key/value)進行操作,得出另一組鍵值對:(input)
通過上面關(guān)于云計算和Hadoop相關(guān)知識的介紹,結(jié)合大批量、多用戶視頻轉(zhuǎn)碼對計算資源的需求,實現(xiàn)基于Hadoop云計算平臺的視頻轉(zhuǎn)碼。本項目視頻處理類的實現(xiàn)是基于音視頻轉(zhuǎn)換軟件ffmpeg,通過MapReduce中map函數(shù)封裝ffmpeg轉(zhuǎn)碼功能,當大量視頻轉(zhuǎn)碼任務(wù)提交到集群時,系統(tǒng)自動把任務(wù)隨機分配到集群節(jié)點上,利用集群系統(tǒng)計算能力和已有視頻轉(zhuǎn)碼開源軟件實現(xiàn)多視頻同時在線轉(zhuǎn)碼。關(guān)于視頻轉(zhuǎn)碼相關(guān)技術(shù)如碼率轉(zhuǎn)換、空間分辨率轉(zhuǎn)換、時間分辨率轉(zhuǎn)換、語法轉(zhuǎn)換、容錯視頻轉(zhuǎn)碼等都交給已有的轉(zhuǎn)碼軟件來實現(xiàn)。關(guān)于Hadoop集群的搭建可以通過網(wǎng)絡(luò)、書籍找到大量相關(guān)資料,關(guān)于具體map函數(shù)、reduce函數(shù)以及key、value對的劃分等細節(jié)問題這里也不做詳細解釋,只給出了視頻轉(zhuǎn)碼的開發(fā)框架。
在本設(shè)計中,使用Java提供的Runtime類進行本地轉(zhuǎn)碼功能代碼的調(diào)用。這樣做的好處是:不論本地視頻處理功能是由什么編程語言實現(xiàn)的,只要最終的形式是可執(zhí)行文件,都可以被MapReduce框架調(diào)用。Runtime類可以取得Java虛擬機的運行時環(huán)境,這個類有一個非常有用的方法exec(String cmdArray[])用于調(diào)用本地可執(zhí)行文件。此方法的參數(shù)是要被調(diào)用的可執(zhí)行文件的命令行字符串數(shù)組。該字符串數(shù)組的值取決于視頻處理功能的具體實現(xiàn)。
Hadoop系統(tǒng)包括分布式文件系統(tǒng)HDFS、并行計算框架MapReduce、作業(yè)隊列管理模塊。HDFS用于存儲本地上傳的視頻文件,MapReduce框架用于完成視頻轉(zhuǎn)碼功能,作業(yè)隊列管理模塊用于接收本地提交的任務(wù)信息,分析任務(wù),將任務(wù)分割給云節(jié)點的計算單元,最后將視頻轉(zhuǎn)碼后的信息寫入數(shù)據(jù)庫。
視頻轉(zhuǎn)碼框架如圖1所示:
圖1 視頻轉(zhuǎn)碼系統(tǒng)整體架構(gòu)
Hadoop系統(tǒng)中的視頻作業(yè)控制模塊主要由5個模塊組成。各個模塊的功能如下:
(1)子作業(yè)流創(chuàng)建模塊:一個視頻處理作業(yè)可以劃分為多個MapReduce子作業(yè),根據(jù)視頻開發(fā)用戶提供的信息生成一系列的MapReduce作業(yè)流,包括視頻作業(yè)子作業(yè)的個數(shù)和各個子作業(yè)之間的依賴關(guān)系。
(2)視頻作業(yè)信息模塊:此模塊用于維護一個視頻作業(yè)完成狀態(tài)信息和各個子作業(yè)的完成進度信息以及各個子作業(yè)的文件輸出位置等信息。子作業(yè)提交模塊根據(jù)此模塊和子作業(yè)創(chuàng)建模塊提供的信息決定哪個時間提交子作業(yè)流中的一個MapReduce子作業(yè)。
(3)子作業(yè)提交模塊:此模塊對視頻作業(yè)信息模塊中的子作業(yè)信息進行監(jiān)控,一旦滿足作業(yè)提交的要求,從子作業(yè)流創(chuàng)建模塊中取出一個子作業(yè),提交到Hadoop中執(zhí)行。
(4)子作業(yè)監(jiān)控模塊:此模塊負責(zé)向Hadoop系統(tǒng)獲取各個子作業(yè)完成的狀態(tài)信息,并負責(zé)更新視頻作業(yè)信息的完成狀態(tài)。
(5)作業(yè)清理模塊:此模塊用于一個視頻作業(yè)完成后,清理完成視頻作業(yè)的過程中HDFS上的臨時文件,并將視頻作業(yè)的完成狀態(tài)存入數(shù)據(jù)庫中。
圖2 視頻處理流程圖
視頻處理流程如圖2所示流程詳細過程如下:
(1)用戶將需要處理的視頻上傳到HDFS上;
(2)將視頻的處理信息和所要用到的處理函數(shù)傳遞到視頻處理框架中;
(3)子作業(yè)創(chuàng)建模塊創(chuàng)建一個子作業(yè)流和一個視頻作業(yè)信息模塊;
(4)子作業(yè)提交模塊根據(jù)各個子作業(yè)流的依賴關(guān)系和各個子作業(yè)的完成狀態(tài)向Hadoop系統(tǒng)提交MapReduce子作業(yè);
(5)Hadoop框架執(zhí)行MapReduce子作業(yè),將各個子作業(yè)的結(jié)果寫入到HDFS中;
(6)子作業(yè)監(jiān)控模塊從Hadoop系統(tǒng)中獲取各個子作業(yè)的完成狀態(tài)并更新視頻作業(yè)信息模塊;
(7)整個視頻作業(yè)完成后,作業(yè)清理模塊負責(zé)清理HDFS上中間子作業(yè)輸出的臨時文件并更新視頻作業(yè)信息模塊。
集群使用兩個節(jié)點作為轉(zhuǎn)碼工作節(jié)點,測試數(shù)據(jù)大小為700M,分布式文件系統(tǒng)塊大小為64M。測試結(jié)果如表1所示。
表1 集群轉(zhuǎn)碼性能
從表1可以看出:
(1)集群轉(zhuǎn)碼的時間平均時間約為單機轉(zhuǎn)碼所用時間的1/2,這個結(jié)果與期望的結(jié)果一致。這說明了將視頻轉(zhuǎn)碼移植到Hadoop平臺上可以提高轉(zhuǎn)碼效率。
(2)當視頻文件分片遠遠小于文件系統(tǒng)分片的大小的時候,集群的轉(zhuǎn)碼性能會惡化。這表明Hadoop系統(tǒng)適合處理大數(shù)據(jù)量的應(yīng)用。
本文主要論述了在Hadoop平臺上視頻轉(zhuǎn)碼的設(shè)計與實現(xiàn)。隨著視頻數(shù)據(jù)量的急劇增長,傳統(tǒng)的集中式視頻轉(zhuǎn)碼系統(tǒng)存在存儲能力和數(shù)據(jù)處理能力不足、存儲能力和處理能力不可擴展的缺點。Hadoop系統(tǒng)的并行任務(wù)分配、任務(wù)本地化、可擴展性和高容錯性使得Hadoop系統(tǒng)在數(shù)據(jù)密集型任務(wù)處理方面有著優(yōu)秀的表現(xiàn)。視頻處理任務(wù)是一種數(shù)據(jù)密集型任務(wù),將視頻轉(zhuǎn)碼任務(wù)移植到Hadoop系統(tǒng)中可以充分利用現(xiàn)有的計算資源,使得視頻轉(zhuǎn)碼效率得到提高。
[1]Chuck Lan.Hadoop INACTION[M],Manning Publications,2011.
[2]Hadoop 官 方 文 檔 .http://Hadoop.apache.org/common/docs/toturial.htm[EB/OL].
[3]K.Breitman,M.Endler,R.Pereira,M.Azambuja.."When TV Dies,Will It Go to the Cloud?".IEEEComputer Society,2010:81~83.
[4]FFMpeg.http://ffmpeg.org[EB/OL],2011.
[5]Koetter R.Converting video formats with FFmpeg.Linux Journal archive,2006.