陳虹君
摘要:Hadoop是大數(shù)據(jù)挖掘的主流平臺(tái),在該平臺(tái)上可以進(jìn)行大數(shù)據(jù)的挖掘。數(shù)據(jù)挖掘的規(guī)模和速度是我們需要考慮的問(wèn)題。Spark框架是一個(gè)優(yōu)秀的框架,它集機(jī)器學(xué)習(xí),圖計(jì)算和在線學(xué)習(xí)為一身,是簡(jiǎn)潔、強(qiáng)大、高效的。該文先討論了Spark的組成,接著討論Spark的任務(wù)調(diào)度方式,最后討論了Spark的環(huán)境及測(cè)試。
關(guān)鍵詞:大數(shù)據(jù);Hadoop;Spark;機(jī)器學(xué)習(xí);圖計(jì)算;實(shí)時(shí)處理
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)35-8407-02
Spark Framework Based on Hadoop Platform
CHEN Hong-jun
(ChengDu College of university of Electronic Science And Technology of China, Chengdu 611740, China)
Abstract: Hadoop is the main platform of big data mining on which you can mine big data.The scale and speed of data mining is an issue we need to consider. Spark framework is an excellent framework, which combines machine learning, graphs computing and online processing in one framework, which is a simple, powerful and efficient. This paper first discusses the Spark composition, followed by a discussion Spark task scheduling, and finally discuss the environment and test the Spark.
Key words: big data; Hadoop; Spark; machine learnin; graphs computing; online processing
云計(jì)算的研究與發(fā)展十分迅速,云計(jì)算的具體應(yīng)用大數(shù)據(jù)挖掘更是具有很高的實(shí)用價(jià)值和商業(yè)價(jià)值。如何對(duì)大數(shù)據(jù)進(jìn)行挖掘,并且如何對(duì)大數(shù)據(jù)進(jìn)行快速、高效的挖掘更是值得研究。
1 Spark—新一代大數(shù)據(jù)挖掘平臺(tái)
Spark稱為快數(shù)據(jù),比Hadoop的傳統(tǒng)處理方式MapReduce有著很大的差別,效率至少提高100倍以上。
Spark分為四大模塊:Spark SQL-RDD(數(shù)據(jù)執(zhí)行的基本單元),MLlib(機(jī)器學(xué)習(xí))、Graphx(圖計(jì)算),Spark Streaming(實(shí)時(shí)處理)。這四個(gè)部分的數(shù)據(jù)處理單元都是RDD。所以整個(gè)框架形成了大數(shù)據(jù)處理各種應(yīng)用場(chǎng)景編程的一致性。
同時(shí),Spark是基于內(nèi)存的編程模型,它可以把中間的迭代過(guò)程不放在磁盤中,直接數(shù)據(jù)不落地在內(nèi)存中執(zhí)行,極大地提高了它的執(zhí)行速度。下面來(lái)介紹它的各個(gè)模塊。
2 Spark SQL
Spark SQL允許在SQL和HiveQL中的相關(guān)查詢表達(dá)式在Spark中的執(zhí)行。這個(gè)組件的核心是一個(gè)新型的RDD,JavaSchemaRDD。JavaSchemaRDD是由Row對(duì)象和schema描述行中每一列的數(shù)據(jù)類型。JavaSchemaRDD類似一個(gè)關(guān)系型數(shù)據(jù)庫(kù)中的表。一個(gè)JavaSchemaRDD可以通過(guò)已存在的RDD,Parquet文件,一個(gè)JSON數(shù)據(jù)集或者存儲(chǔ)在Apache Hive通過(guò)HiveQL運(yùn)行的數(shù)據(jù)來(lái)創(chuàng)建。
Spark SQL程序都需要程序的入口:
public static void main(String[] args) throws Exception {
SparkConf sparkConf = new SparkConf().setAppName("JavaSparkSQL");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
//創(chuàng)建SQL查詢的入口點(diǎn),上下文??梢杂脕?lái)創(chuàng)建SchemaRDD來(lái)執(zhí)行SQL查詢。
JavaSQLContext sqlCtx = new JavaSQLContext(ctx);
…}
3 MLlib
MLlib是一些常用機(jī)器學(xué)習(xí)算法和工具中非常突出的,分類,回歸,聚類,協(xié)同過(guò)濾,降維,以及相關(guān)的優(yōu)化原語(yǔ)。
許多標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)方法可以歸結(jié)為一個(gè)凸優(yōu)化問(wèn)題,例如一項(xiàng)任務(wù),去找到一個(gè)凸面函數(shù)f的最小值,這個(gè)凸面函數(shù)依賴于可變的vector w 向量,這個(gè)向量在一個(gè)node 中叫做weights 權(quán)值,我們可以把這個(gè)在客觀函數(shù)里寫(xiě)成最優(yōu)化問(wèn)題,
[minw∈?d f(w)]
[f(w):=1ni=1nL(w;xi,yi)+λR(wi).]
這個(gè)[vectors xi∈?d]是訓(xùn)練數(shù)據(jù)例子, 1≤i≤n, and yi∈R 是他們對(duì)應(yīng)的標(biāo)簽,這也是我們想預(yù)測(cè)的標(biāo)簽。
MLlib 包括的評(píng)價(jià)指標(biāo)有:精確度,回收,F(xiàn)值,ROC,精密回收曲線,曲線下面積(AUC),AUC常用來(lái)比較模型,而精確度,回收,F(xiàn)值,ROC用來(lái)確定閥值。
4 Graphx
GraphX是新的(alpha)Spark用于圖表和圖形,并行計(jì)算的的API。 在一個(gè)高層次上, GraphX 延伸了Spark RDD 通過(guò)引入Resilient Distributed Property Graph (彈性分布式屬性圖): 一個(gè)有向多重圖與附加到每個(gè)頂點(diǎn)和邊的屬性。為了支持圖形計(jì)算, GraphX 公開(kāi)了一組基本的運(yùn)算符 (e.g., subgraph (子圖), joinVertices, and mapReduceTriplets) 以及一個(gè)最優(yōu)的轉(zhuǎn)變的Pregel API. 此外, GraphX 包含一個(gè)對(duì)圖形 algorithms (算法) and builders(構(gòu)建器) 不斷增長(zhǎng)的包集合,用以簡(jiǎn)化圖形分析任務(wù)。endprint
從社交網(wǎng)絡(luò)到語(yǔ)言建模,圖形數(shù)據(jù)的增長(zhǎng)規(guī)模和重要性,帶動(dòng)眾多新圖形并行系統(tǒng)(例如, Giraph and GraphLab)的發(fā)展。通過(guò)限制可以被表示計(jì)算的類型和引入新技術(shù)來(lái)劃分和分配圖形,這些系統(tǒng)能夠有效地執(zhí)行復(fù)雜的圖形算法命令并遠(yuǎn)快于大多數(shù)普通的數(shù)據(jù)并行系統(tǒng)。
5 Spark Streaming
如果要用一句話來(lái)概括Spark Streaming的處理思路的話,那就是" 將連續(xù)的數(shù)據(jù)持久化,離散化,然后進(jìn)行批量處理" 。
Spark Streaming 是Spark核心的擴(kuò)展API,允許使高通量、容錯(cuò)實(shí)時(shí)數(shù)據(jù)流的流處理。數(shù)據(jù)可以從許多來(lái)源攝取如Kafka,F(xiàn)lume,Twitter,ZeroMQ或普通TCP套接字和使用復(fù)雜的算法表達(dá)式處理的高級(jí)函數(shù)如:map, reduce, join 和window的數(shù)據(jù)。最后處理過(guò)的數(shù)據(jù)可以放到文件系統(tǒng),數(shù)據(jù)庫(kù)和可視化儀表板上。事實(shí)上,你可以引用內(nèi)置的Spark的機(jī)器學(xué)習(xí)算法,數(shù)據(jù)流圖處理算法。
6 Spark 的任務(wù)調(diào)度方式
Spark應(yīng)用程序在集群上是一個(gè)獨(dú)立運(yùn)行的過(guò)程,在你的主程序中有SparkContext對(duì)象協(xié)調(diào)(驅(qū)動(dòng)程序)。SparkContext可以連接多種類型的cluster managers(Sparks own standalone cluster manager or Mesos/YARN),跨應(yīng)用程序分配資源。一旦連接,Spark獲得集群中節(jié)點(diǎn)的executors(執(zhí)行權(quán)),應(yīng)用程序進(jìn)行計(jì)算和存儲(chǔ)數(shù)據(jù)是一個(gè)過(guò)程。接下來(lái),它將發(fā)送你的程序代碼(JAR或Python文件傳遞給SparkContext)到executors。最后,SparkContext發(fā)送tasks給executors執(zhí)行。
7 Spark 的環(huán)境搭建與測(cè)試
配置1臺(tái),克隆兩臺(tái),修改/etc/hostname即可。
創(chuàng)建hadoop用戶組和用戶。創(chuàng)建用戶組sudo addgroup hadoop;創(chuàng)建用戶
sudo adduser -ingroup hadoop hadoop;給hadoop用戶添加權(quán)限,打開(kāi)/etc/sudoers文件:sudo gedit /etc/sudoers;在root ALL=(ALL)ALL行下添加ALL=(ALL:ALL) ALL。如果不添加這行,hadoop將不能執(zhí)行sudo操作。
解壓jdk1.7.0_10配置好,采用橋接模式獲得靜態(tài)虛擬機(jī)ip,關(guān)閉防火墻重啟虛擬機(jī)生效。配置ssh可以實(shí)現(xiàn)遠(yuǎn)程登錄和管理
進(jìn)入etc下修改配置文件
cd /usr/local/hadoop/etc/hadoop
編輯hadoop-env.sh(修改JAVA_HOME的配置)
sudo gedit hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
編輯yarn-env.sh,在底部增加
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
測(cè)試:數(shù)據(jù)含義:共計(jì)一百萬(wàn)條數(shù)據(jù),每條數(shù)據(jù)左邊是名字,右邊是年齡。
8 總結(jié)
大數(shù)據(jù)的快速挖掘在Spark框架中是可以很方便地實(shí)現(xiàn)的,以廉價(jià)的內(nèi)存資源獲取高效的大數(shù)據(jù)處理速度是值得的。無(wú)可否認(rèn),Spark的應(yīng)用將會(huì)快速地繁榮起來(lái)。
參考文獻(xiàn):
[1] Spark編程指南[EB/OL].http://spark.apache.org/docs/latest/programming-guide.html,2013.
[2] 機(jī)器學(xué)習(xí)庫(kù)[EB/OL].http://blog.csdn.net/johnny_lee/article/details/25656343,2013.
[3] Graphx學(xué)習(xí)[EB/OL].http://spark.apache.org/docs/latest/graphx-programming-guide.html,2012.
[4] 云計(jì)算的分類[EB/OL].http://tech.qq.com/a/20101103/000074.htm,2010.
[5] 最近的spark文檔[EB/OL].http://spark.apache.org/docs/latest/,2014.endprint
從社交網(wǎng)絡(luò)到語(yǔ)言建模,圖形數(shù)據(jù)的增長(zhǎng)規(guī)模和重要性,帶動(dòng)眾多新圖形并行系統(tǒng)(例如, Giraph and GraphLab)的發(fā)展。通過(guò)限制可以被表示計(jì)算的類型和引入新技術(shù)來(lái)劃分和分配圖形,這些系統(tǒng)能夠有效地執(zhí)行復(fù)雜的圖形算法命令并遠(yuǎn)快于大多數(shù)普通的數(shù)據(jù)并行系統(tǒng)。
5 Spark Streaming
如果要用一句話來(lái)概括Spark Streaming的處理思路的話,那就是" 將連續(xù)的數(shù)據(jù)持久化,離散化,然后進(jìn)行批量處理" 。
Spark Streaming 是Spark核心的擴(kuò)展API,允許使高通量、容錯(cuò)實(shí)時(shí)數(shù)據(jù)流的流處理。數(shù)據(jù)可以從許多來(lái)源攝取如Kafka,F(xiàn)lume,Twitter,ZeroMQ或普通TCP套接字和使用復(fù)雜的算法表達(dá)式處理的高級(jí)函數(shù)如:map, reduce, join 和window的數(shù)據(jù)。最后處理過(guò)的數(shù)據(jù)可以放到文件系統(tǒng),數(shù)據(jù)庫(kù)和可視化儀表板上。事實(shí)上,你可以引用內(nèi)置的Spark的機(jī)器學(xué)習(xí)算法,數(shù)據(jù)流圖處理算法。
6 Spark 的任務(wù)調(diào)度方式
Spark應(yīng)用程序在集群上是一個(gè)獨(dú)立運(yùn)行的過(guò)程,在你的主程序中有SparkContext對(duì)象協(xié)調(diào)(驅(qū)動(dòng)程序)。SparkContext可以連接多種類型的cluster managers(Sparks own standalone cluster manager or Mesos/YARN),跨應(yīng)用程序分配資源。一旦連接,Spark獲得集群中節(jié)點(diǎn)的executors(執(zhí)行權(quán)),應(yīng)用程序進(jìn)行計(jì)算和存儲(chǔ)數(shù)據(jù)是一個(gè)過(guò)程。接下來(lái),它將發(fā)送你的程序代碼(JAR或Python文件傳遞給SparkContext)到executors。最后,SparkContext發(fā)送tasks給executors執(zhí)行。
7 Spark 的環(huán)境搭建與測(cè)試
配置1臺(tái),克隆兩臺(tái),修改/etc/hostname即可。
創(chuàng)建hadoop用戶組和用戶。創(chuàng)建用戶組sudo addgroup hadoop;創(chuàng)建用戶
sudo adduser -ingroup hadoop hadoop;給hadoop用戶添加權(quán)限,打開(kāi)/etc/sudoers文件:sudo gedit /etc/sudoers;在root ALL=(ALL)ALL行下添加ALL=(ALL:ALL) ALL。如果不添加這行,hadoop將不能執(zhí)行sudo操作。
解壓jdk1.7.0_10配置好,采用橋接模式獲得靜態(tài)虛擬機(jī)ip,關(guān)閉防火墻重啟虛擬機(jī)生效。配置ssh可以實(shí)現(xiàn)遠(yuǎn)程登錄和管理
進(jìn)入etc下修改配置文件
cd /usr/local/hadoop/etc/hadoop
編輯hadoop-env.sh(修改JAVA_HOME的配置)
sudo gedit hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
編輯yarn-env.sh,在底部增加
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
測(cè)試:數(shù)據(jù)含義:共計(jì)一百萬(wàn)條數(shù)據(jù),每條數(shù)據(jù)左邊是名字,右邊是年齡。
8 總結(jié)
大數(shù)據(jù)的快速挖掘在Spark框架中是可以很方便地實(shí)現(xiàn)的,以廉價(jià)的內(nèi)存資源獲取高效的大數(shù)據(jù)處理速度是值得的。無(wú)可否認(rèn),Spark的應(yīng)用將會(huì)快速地繁榮起來(lái)。
參考文獻(xiàn):
[1] Spark編程指南[EB/OL].http://spark.apache.org/docs/latest/programming-guide.html,2013.
[2] 機(jī)器學(xué)習(xí)庫(kù)[EB/OL].http://blog.csdn.net/johnny_lee/article/details/25656343,2013.
[3] Graphx學(xué)習(xí)[EB/OL].http://spark.apache.org/docs/latest/graphx-programming-guide.html,2012.
[4] 云計(jì)算的分類[EB/OL].http://tech.qq.com/a/20101103/000074.htm,2010.
[5] 最近的spark文檔[EB/OL].http://spark.apache.org/docs/latest/,2014.endprint
從社交網(wǎng)絡(luò)到語(yǔ)言建模,圖形數(shù)據(jù)的增長(zhǎng)規(guī)模和重要性,帶動(dòng)眾多新圖形并行系統(tǒng)(例如, Giraph and GraphLab)的發(fā)展。通過(guò)限制可以被表示計(jì)算的類型和引入新技術(shù)來(lái)劃分和分配圖形,這些系統(tǒng)能夠有效地執(zhí)行復(fù)雜的圖形算法命令并遠(yuǎn)快于大多數(shù)普通的數(shù)據(jù)并行系統(tǒng)。
5 Spark Streaming
如果要用一句話來(lái)概括Spark Streaming的處理思路的話,那就是" 將連續(xù)的數(shù)據(jù)持久化,離散化,然后進(jìn)行批量處理" 。
Spark Streaming 是Spark核心的擴(kuò)展API,允許使高通量、容錯(cuò)實(shí)時(shí)數(shù)據(jù)流的流處理。數(shù)據(jù)可以從許多來(lái)源攝取如Kafka,F(xiàn)lume,Twitter,ZeroMQ或普通TCP套接字和使用復(fù)雜的算法表達(dá)式處理的高級(jí)函數(shù)如:map, reduce, join 和window的數(shù)據(jù)。最后處理過(guò)的數(shù)據(jù)可以放到文件系統(tǒng),數(shù)據(jù)庫(kù)和可視化儀表板上。事實(shí)上,你可以引用內(nèi)置的Spark的機(jī)器學(xué)習(xí)算法,數(shù)據(jù)流圖處理算法。
6 Spark 的任務(wù)調(diào)度方式
Spark應(yīng)用程序在集群上是一個(gè)獨(dú)立運(yùn)行的過(guò)程,在你的主程序中有SparkContext對(duì)象協(xié)調(diào)(驅(qū)動(dòng)程序)。SparkContext可以連接多種類型的cluster managers(Sparks own standalone cluster manager or Mesos/YARN),跨應(yīng)用程序分配資源。一旦連接,Spark獲得集群中節(jié)點(diǎn)的executors(執(zhí)行權(quán)),應(yīng)用程序進(jìn)行計(jì)算和存儲(chǔ)數(shù)據(jù)是一個(gè)過(guò)程。接下來(lái),它將發(fā)送你的程序代碼(JAR或Python文件傳遞給SparkContext)到executors。最后,SparkContext發(fā)送tasks給executors執(zhí)行。
7 Spark 的環(huán)境搭建與測(cè)試
配置1臺(tái),克隆兩臺(tái),修改/etc/hostname即可。
創(chuàng)建hadoop用戶組和用戶。創(chuàng)建用戶組sudo addgroup hadoop;創(chuàng)建用戶
sudo adduser -ingroup hadoop hadoop;給hadoop用戶添加權(quán)限,打開(kāi)/etc/sudoers文件:sudo gedit /etc/sudoers;在root ALL=(ALL)ALL行下添加ALL=(ALL:ALL) ALL。如果不添加這行,hadoop將不能執(zhí)行sudo操作。
解壓jdk1.7.0_10配置好,采用橋接模式獲得靜態(tài)虛擬機(jī)ip,關(guān)閉防火墻重啟虛擬機(jī)生效。配置ssh可以實(shí)現(xiàn)遠(yuǎn)程登錄和管理
進(jìn)入etc下修改配置文件
cd /usr/local/hadoop/etc/hadoop
編輯hadoop-env.sh(修改JAVA_HOME的配置)
sudo gedit hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
編輯yarn-env.sh,在底部增加
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
測(cè)試:數(shù)據(jù)含義:共計(jì)一百萬(wàn)條數(shù)據(jù),每條數(shù)據(jù)左邊是名字,右邊是年齡。
8 總結(jié)
大數(shù)據(jù)的快速挖掘在Spark框架中是可以很方便地實(shí)現(xiàn)的,以廉價(jià)的內(nèi)存資源獲取高效的大數(shù)據(jù)處理速度是值得的。無(wú)可否認(rèn),Spark的應(yīng)用將會(huì)快速地繁榮起來(lái)。
參考文獻(xiàn):
[1] Spark編程指南[EB/OL].http://spark.apache.org/docs/latest/programming-guide.html,2013.
[2] 機(jī)器學(xué)習(xí)庫(kù)[EB/OL].http://blog.csdn.net/johnny_lee/article/details/25656343,2013.
[3] Graphx學(xué)習(xí)[EB/OL].http://spark.apache.org/docs/latest/graphx-programming-guide.html,2012.
[4] 云計(jì)算的分類[EB/OL].http://tech.qq.com/a/20101103/000074.htm,2010.
[5] 最近的spark文檔[EB/OL].http://spark.apache.org/docs/latest/,2014.endprint