顧晉
摘要:伴隨著web2.0、云計(jì)算、物聯(lián)網(wǎng)等概念和技術(shù)的提出與快速發(fā)展,信息時(shí)代越來越體現(xiàn)出它的“大數(shù)據(jù)”特征。為了發(fā)揮大數(shù)據(jù)的價(jià)值,數(shù)據(jù)倉庫、數(shù)據(jù)挖掘技術(shù)在商業(yè)、軍事、經(jīng)濟(jì)、學(xué)術(shù)等眾多領(lǐng)域越來越收到重視,正發(fā)揮著越來越大的作用。與此同時(shí),龐大的數(shù)據(jù)規(guī)模也向傳統(tǒng)的數(shù)據(jù)挖掘工作提出了重大的挑戰(zhàn)。依靠云計(jì)算等分布式計(jì)算平臺(tái)所提供的強(qiáng)勁處理能力,將數(shù)據(jù)挖掘與云計(jì)算相結(jié)合正在成為行業(yè)的趨勢(shì),正不斷地顯現(xiàn)出其強(qiáng)大的優(yōu)勢(shì)和潛力。
1、Hadoop的來源
Hadoop源于2002年開始的Apache Lucene的子項(xiàng)目之一開源搜索引擎Apache Nutch。為了使Nutch搜索引擎可以適應(yīng)越來越龐大的數(shù)據(jù)增長(zhǎng),提高數(shù)據(jù)處理能力,保證搜索速度和精度,急需引入一種高效的分布式計(jì)算結(jié)構(gòu)。Hadoop在2008 年初就被Apache 公司列為了頂級(jí)項(xiàng)目,并成為了許多互聯(lián)網(wǎng)公司如雅虎、Facebook、Twitter等基礎(chǔ)計(jì)算平臺(tái)的一個(gè)基礎(chǔ)部分。目前的Hadoop系統(tǒng)已經(jīng)逐漸發(fā)展成為包含HDFS、MapReduce、Pig、HBase、Hive 等眾多子項(xiàng)目的集合,越來越多的被用于分布式計(jì)算。
Hadoop的核心技術(shù)是MapReduce并行編程模型和HDFS 分布式文件系統(tǒng),HDFS 采用分布式的方式存儲(chǔ)文件,其很高的容錯(cuò)性使其可以方便可靠的部署在低廉的計(jì)算機(jī)集群中,提高了文件的讀寫速度,同時(shí)擴(kuò)大了存儲(chǔ)用量。采用MapReduce來整合處理分布式文件系統(tǒng)上的數(shù)據(jù),使分布式開發(fā)變得系統(tǒng)化,也保證了執(zhí)行效率。
2.Hadoop平臺(tái)系統(tǒng)結(jié)構(gòu)
Hadoop所采用的分布式系統(tǒng)屬于一種被稱為“向外擴(kuò)展”的增強(qiáng)計(jì)算能力的方式。于此相對(duì)應(yīng)的方式被稱為“向上擴(kuò)展”,這種方式以大型單機(jī)服務(wù)器為代表。在過去的幾十年間,計(jì)算機(jī)的發(fā)展和計(jì)算能力的提高是遵守摩爾定律的。
隨著數(shù)據(jù)的不斷增加,人們發(fā)現(xiàn),解決大規(guī)模計(jì)算問題不能單純的依賴于制造越來越大型的服務(wù)器,需要另辟新徑,開始在向外擴(kuò)展的方向上考慮問題的解決辦法。Hadoop的向外擴(kuò)展,即把許多低端或商用機(jī)器組織自在一起,形成一個(gè)功能專一的分布式系統(tǒng)。
利用Hadoop的集群合作,得到的不僅是強(qiáng)大的計(jì)算能力,同時(shí)通過將數(shù)據(jù)集劃分為較小的塊(通常為64M),依靠Hadoop將其適度的復(fù)制并分布到集群的多臺(tái)機(jī)器上,使得集群可以并行的讀取數(shù)據(jù),進(jìn)而提供了很高的系統(tǒng)吞吐量,這對(duì)于目前網(wǎng)絡(luò)上的大數(shù)據(jù)環(huán)境(數(shù)據(jù)密集型作業(yè))而言,是必不可少的重要能力Hadoop主要處理的是數(shù)據(jù)密集型任務(wù),這類任務(wù)的數(shù)據(jù)規(guī)模很大,數(shù)據(jù)遷移就變得十分困難。因此,Hadoop強(qiáng)調(diào)的是把代碼向數(shù)據(jù)遷移,在一個(gè)提供計(jì)算服務(wù)的Hadoop集群內(nèi)部,既包含數(shù)據(jù)又包含計(jì)算環(huán)境??蛻舳藘H需向集群發(fā)送待執(zhí)行的MapReduce程序,讓這些可執(zhí)行移動(dòng)到數(shù)據(jù)所在的機(jī)器上去,而這些程序通常在規(guī)模上比數(shù)據(jù)小幾個(gè)數(shù)量級(jí),移動(dòng)程序比移動(dòng)數(shù)據(jù)容易很多。在計(jì)算的整個(gè)過程中,數(shù)據(jù)不動(dòng),總是存儲(chǔ)在進(jìn)群中的各個(gè)數(shù)據(jù)節(jié)點(diǎn)上的,不會(huì)發(fā)生客戶端和集群間的計(jì)算數(shù)據(jù)交互。更重要的是,在Hadoop集群的內(nèi)部,也體現(xiàn)了代碼向數(shù)據(jù)遷移的理念,數(shù)據(jù)被分塊后在集群中分布,Hadoop在執(zhí)行任務(wù)時(shí)會(huì)盡可能讓對(duì)一段數(shù)據(jù)的處理發(fā)生在儲(chǔ)存這段數(shù)據(jù)的一臺(tái)計(jì)算機(jī)上。這種設(shè)計(jì)理念服務(wù)于Hadoop面向數(shù)據(jù)密集型任務(wù)處理的設(shè)計(jì)目標(biāo),極大地減少了數(shù)據(jù)在網(wǎng)絡(luò)上傳遞所占用的帶寬,降低IO 壓力,避免了任務(wù)計(jì)算時(shí)的數(shù)據(jù)瓶頸。
3、基于Hadoop平臺(tái)數(shù)據(jù)遷移基本任務(wù)
數(shù)據(jù)挖掘的任務(wù)決定著數(shù)據(jù)挖掘工作的方向,指導(dǎo)著算法尋找什么樣的數(shù)據(jù)模式。數(shù)據(jù)挖掘的步驟會(huì)隨不同的挖掘任務(wù)和不同的應(yīng)用領(lǐng)域而有所變化,一般地,可以根據(jù)工作的特點(diǎn),將數(shù)據(jù)挖掘任務(wù)分為兩大類:描述性挖掘和和預(yù)測(cè)性挖掘。描述性挖掘任務(wù)著眼于發(fā)現(xiàn)數(shù)據(jù)的一般特性,對(duì)與數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)進(jìn)行刻畫,包括概括、總結(jié)數(shù)據(jù),尋找數(shù)據(jù)間關(guān)系、類型等。預(yù)測(cè)性挖掘主要根據(jù)當(dāng)前數(shù)據(jù)做出推斷,以對(duì)更多的或者新加入的數(shù)據(jù)進(jìn)行預(yù)測(cè)。根據(jù)數(shù)據(jù)挖掘的具體任務(wù)不同,挖掘結(jié)果中會(huì)得到不同的數(shù)據(jù)模式。數(shù)據(jù)挖掘系統(tǒng)要有挖掘多種類型數(shù)據(jù)模式的能力,以適應(yīng)不同的任務(wù)和用戶要求,并允許用戶參與數(shù)據(jù)挖掘過程,指導(dǎo)或聚焦其感興趣的數(shù)據(jù)模式的挖掘。
3.1數(shù)據(jù)遷移算法
1)數(shù)據(jù)描述和可視化
數(shù)據(jù)庫中存放的數(shù)據(jù)條目通常含有大量的細(xì)節(jié)數(shù)據(jù),這些細(xì)節(jié)數(shù)據(jù)可能含有某種整體趨勢(shì),但是由于其瑣細(xì)而且雜亂,直觀的發(fā)現(xiàn)某些規(guī)律或趨勢(shì)變得十分困難。因此,用戶通常希望找到一種更加直觀形式來描述數(shù)據(jù)集。用匯總的、簡(jiǎn)潔的、精確的方式描述數(shù)據(jù)庫中條目中包含的每個(gè)條目類型和概念是十分有用而且必要的。
這種描述數(shù)據(jù)的方法可以提供某一類數(shù)據(jù)的概貌,或者是將它與不同的某類數(shù)據(jù)進(jìn)行區(qū)別??梢允褂枚喾N可視化方式將數(shù)據(jù)描述特征的的結(jié)果進(jìn)行輸出,多種統(tǒng)計(jì)圖表是一種很方便直接的選擇,包括柱狀圖、曲線圖、餅圖、雷達(dá)圖等等。數(shù)據(jù)倉庫領(lǐng)域的多維數(shù)據(jù)方和包括交叉表在內(nèi)的多維數(shù)據(jù)表也是很好的選擇。圖表中也可以加入一些針對(duì)性的特殊數(shù)據(jù)標(biāo)注和度量,并允許用戶對(duì)可視化輸出進(jìn)行操作。挖掘結(jié)果也可以通過規(guī)則敘述的方式描述給用戶,或者通過總結(jié)其中的泛化關(guān)系,將二次的結(jié)果提煉呈現(xiàn)給用戶。
2)相關(guān)性分組或關(guān)聯(lián)分析
數(shù)據(jù)來源于真實(shí)世界,因此,現(xiàn)實(shí)世界中事物間存在的聯(lián)系也體現(xiàn)在數(shù)據(jù)庫中的數(shù)據(jù)之間。數(shù)據(jù)挖掘中,若兩個(gè)或多個(gè)變量的取值之間存在某種規(guī)律性,就稱為關(guān)聯(lián),比如在一次購買活動(dòng)中有兩種或多種商品總是被同時(shí)購買。但是,數(shù)據(jù)之間的關(guān)聯(lián)是復(fù)雜的、而且總是隱含的。根據(jù)數(shù)據(jù)關(guān)系呈現(xiàn)的方式不同,可以分為簡(jiǎn)單關(guān)聯(lián)、時(shí)序關(guān)聯(lián)、因果關(guān)聯(lián)和數(shù)量關(guān)聯(lián)等。這些關(guān)聯(lián)并不總是事先知道的,大多都需要通過對(duì)數(shù)據(jù)進(jìn)行關(guān)聯(lián)規(guī)則挖掘而主動(dòng)地去發(fā)現(xiàn),往往在這些關(guān)系蘊(yùn)含著在商業(yè)決策等方面的重要價(jià)值。
3.2Driver 和算法流程
完成了MapReduce過程的編寫以后,為了將k-means算法任務(wù)部署到Hadoop環(huán)境中去執(zhí)行,還要完成其任務(wù)聲明和參數(shù)配置。為此,我們要完成MapReduce框架的核心run 方法,該run 方法被稱為MapReduce的Driver。Driver 的任務(wù)是實(shí)例化、配置并傳遞一個(gè)作業(yè)配置對(duì)象JonConf命名的作業(yè),通過與JobTracker通信用在集群上啟動(dòng)MapReduce作業(yè)。該JobConf對(duì)象應(yīng)包含保持作業(yè)運(yùn)行所需要的全部配置參數(shù)。在Driver 中,我們要為MapReduce作業(yè)定制基本參數(shù),包括聚類數(shù)據(jù)集的輸入路徑、結(jié)果的輸出路徑、前面實(shí)現(xiàn)的Mapper 類和Reducer類。而且,還需要根據(jù)輸入數(shù)據(jù)和輸出數(shù)據(jù)的格式和程序要求,重置默認(rèn)的作業(yè)屬性,這里我們使用TextInputFormat作為輸入數(shù)據(jù)集的輸入方式。一旦JobConf對(duì)象被完成并傳遞給JobClient,他就被視為作業(yè)的總體規(guī)劃,成為了決定這個(gè)作業(yè)如何運(yùn)行的藍(lán)本
4、結(jié)論
使用多臺(tái)普通PC 主機(jī)搭建分布式集群,并在不同規(guī)模的人工生成數(shù)據(jù)集上進(jìn)行了聚類式數(shù)據(jù)挖掘的實(shí)驗(yàn)。通過對(duì)多次不同數(shù)據(jù)和計(jì)算機(jī)集群規(guī)模的對(duì)比試驗(yàn),證明了在Hadoop分布式計(jì)算環(huán)境上部署數(shù)據(jù)挖掘任務(wù)的可行性,并通過加速比,效率,數(shù)據(jù)伸縮性和集群的可擴(kuò)展性等方面的分析,驗(yàn)證了該方案的計(jì)算優(yōu)勢(shì)和發(fā)展?jié)摿Α?/p>
參考文獻(xiàn):
[1]Jeremy Chow, Redpoll: A machine learning library based on hadoop,CS Dept. Jinan University, Guangzhou,2010