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