Spark核心技術(shù)與高級應(yīng)用

Spark簡介

相較于國內(nèi)外較多的大數(shù)據(jù)處理框架亲配,Spark以基低延時的出色表現(xiàn)蔓涧,正在成為繼Hadoop的MapReduce之后构灸,新的上渴,最具有影響的大數(shù)據(jù)框架之一岸梨。以Spark為核心的生態(tài)圈,最底層為分布式存儲系統(tǒng)HDFS,S3,Hypertable或者其它格式的存儲系統(tǒng)如Hbase稠氮。資源管理采用Mesos,YARN等集群資源管理模式曹阔,或者spark自帶的獨(dú)立運(yùn)行模式 。Spark sql提供SQL查詢服務(wù)隔披,性能比Hive快3-50倍赃份。MLIB提供機(jī)器學(xué)習(xí)服務(wù);GraphX提供圖計算服務(wù)奢米;Spark Streaming將流式計算分解成一系列短小的批處理(Micro Bath)計算抓韩。


好處:資源利用率高。多種框架共享資源鬓长,使用均衡谒拴。實(shí)現(xiàn)數(shù)據(jù)共享。多種框架共享數(shù)據(jù)和硬件資源涉波,減少數(shù)據(jù)分散帶來的成本英上。有效降低運(yùn)維和管理成本:共享模式只需要少量的維護(hù)人員.

Spark已經(jīng)成為整合以大數(shù)據(jù)應(yīng)用的標(biāo)準(zhǔn)平臺:交互式查詢,包括SQL;實(shí)時流處理;復(fù)雜的分析啤覆,包括機(jī)器學(xué)習(xí)苍日,圖計算;批處理窗声。

Spark特點(diǎn):

快速:Spark有先進(jìn)的DAG執(zhí)行引擎易遣,支持循環(huán)數(shù)據(jù)流和內(nèi)存計算;Spark程序在內(nèi)存中的運(yùn)行速度 是Hadoop MapReduce運(yùn)行速度的100倍嫌佑,在磁盤上的運(yùn)行速度是Hadoop MapReduce運(yùn)行速度的10倍豆茫。

易用:Spark支持Java,Scala,Python語言。

通用:Spark可以與SQL,Streaming以及復(fù)雜的分析良好結(jié)合屋摇。

有效集成Hadoop:Spark可以指定Hadoop,Yarn的版本來編譯出合適的發(fā)行版本揩魂,Spark也能很容易地運(yùn)行在EC2,Mesos上,或以Standalong模式運(yùn)行炮温,并從HDFS,HBase,Cassandra 和其他Hadoop數(shù)據(jù)源讀取數(shù)據(jù)火脉。

Spark應(yīng)用場景:

1.快速查詢系統(tǒng),基于日志數(shù)據(jù)的快速查詢系統(tǒng)業(yè)務(wù)構(gòu)建于Spark之上柒啤,利用其快速查詢以及內(nèi)存表等優(yōu)勢倦挂,能夠承擔(dān)大部分日志數(shù)據(jù)的即時查詢工作;在性能方面担巩,普遍比Hive快2-10倍方援,如果使用內(nèi)存表的功能,性能將會比hive快百倍涛癌。

2.實(shí)時日志采集處理犯戏,通過Spark Streaming實(shí)時進(jìn)行業(yè)務(wù)日志采集送火,快速迭代處理,并進(jìn)行綜合分析先匪,能夠滿足線上系統(tǒng)分析要求种吸。

3.業(yè)務(wù)推薦系統(tǒng),使用spark將業(yè)務(wù)推薦系統(tǒng)的小時和天級別的模型訓(xùn)練轉(zhuǎn)變?yōu)榉昼娂墑e的模型訓(xùn)練呀非,有效優(yōu)化相關(guān)排名坚俗,個性化推薦以及熱點(diǎn)點(diǎn)擊分析等 。

4.定制廣告系統(tǒng)岸裙,在定制廣告業(yè)務(wù)方面需要大數(shù)據(jù)做應(yīng)用分析猖败,效果分析,定向優(yōu)化等哥桥,借助spark快速迭代的優(yōu)勢辙浑,實(shí)現(xiàn)了在“數(shù)據(jù)實(shí)時采集,算法實(shí)時訓(xùn)練拟糕,系統(tǒng)實(shí)時預(yù)測”的全流程實(shí)時并行高維算法判呕,支持上億的請求量處理;模擬廣告投放計算效率高送滞,延時小侠草,同MapReduce相比延時至少降低一個數(shù)量級。

5.用戶圖計算犁嗅,利用Graphx解決了許多生產(chǎn)問題边涕,包括以下計算場景;基于度分布的中樞節(jié)點(diǎn)發(fā)現(xiàn)褂微,基于最大連通圖的社區(qū)發(fā)現(xiàn)功蜓,基于三角形計數(shù)的關(guān)系衡量,基于隨機(jī)游走的用戶屬性傳播等宠蚂。

Spark SQL是spark的一個處理結(jié)構(gòu)化數(shù)據(jù)的模塊式撼,提供一個DataFrame編程抽象。它可以看作是一個分布式SQL查詢引擎求厕,主要由Catalyst優(yōu)化著隆,Spark SQL內(nèi)核,Hive支持三部分組成呀癣。

從1.3開始在原有SchemaRDD的基礎(chǔ)上提供了與R風(fēng)格類似的DataFrame API.

DataFrame是以指定列(named columns)組織的分布式數(shù)據(jù)集合,在Spark SQL中相當(dāng)于關(guān)系數(shù)據(jù)庫的一個表美浦,或R/Python的一個數(shù)據(jù)框架,但后臺更加優(yōu)化。 DataFrame 支持多種數(shù)據(jù)源構(gòu)建项栏,包括:結(jié)構(gòu)化數(shù)據(jù)文件(Parquet,JSON)加載浦辨,HIVE表讀取,外部數(shù)據(jù)庫讀取忘嫉,現(xiàn)有RDD轉(zhuǎn)化荤牍,以及SQLContext運(yùn)行sql查詢結(jié)果創(chuàng)建DataFrame.


Spark Streaming:

Spark Streaming屬于核心Spark Api的擴(kuò)展案腺,它支持高吞吐量和容錯的實(shí)時流數(shù)據(jù)處理庆冕,它可以接受來自kafka,flume,twitter,zeroMQ或Tcp Socket的數(shù)據(jù)源康吵,使用復(fù)雜的算法表達(dá)和高級功能來進(jìn)行處理,如Map,Reduce,Join, window等访递,處理的結(jié)果數(shù)據(jù)能夠存入文件系統(tǒng)晦嵌,數(shù)據(jù)庫。


Saprk部署和運(yùn)行

本地部署模式拷姿,獨(dú)立模式部署惭载,YARN模式部署,以及基于各種模式的應(yīng)用程序運(yùn)行响巢。

Spark下載路徑:http://spark.apache.org/downloads.html

安裝JAVA:

下載并安裝好java后描滔,進(jìn)行配置:在/etc/profile文件中增加變量

sudo vim /etc/profile

export JAVA_HOME=$YOUR_JAVA_HOME# //實(shí)際安裝路徑

export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

如果想立即生效,可以通過運(yùn)行# source /etc/profile,否則只能在下次用戶重新登錄加載環(huán)境變量時生效踪古。運(yùn)行 java -version測試含长。

關(guān)于JDK環(huán)境變量配置一般包括4種方式:

1.在用戶環(huán)境變量文件 /etc/profile文件中添加變量,需要具有root權(quán)限才能進(jìn)行配置伏穆,對linux下所有用戶長期有效拘泞。

2.在用戶目錄下的.profile文件中增加變量,對當(dāng)前用戶長期生效 枕扫。

3.直接運(yùn)行export命令定義變量陪腌,只對當(dāng)前shell臨時有效。在shell的命令行下直接使用[export 變量名=變量值]定義變量烟瞧,該變量只在當(dāng)前的shell或其子shell下是有效的诗鸭,若shell關(guān)閉,變量則生效参滴,再打開新shell時就沒有這個變量强岸,若需要使用,則還需要重新定義 卵洗。

4.在系統(tǒng)環(huán)境變量 /etc/environment中進(jìn)行配置请唱。


Spark部署主要包括Local模式部署,Standalone模式部署过蹂,YARN模式部署十绑,Mesos模式部署。

Standalone- Spark獨(dú)立部署意味著Spark占據(jù)HDFS(Hadoop分布式文件系統(tǒng))頂部的位置酷勺,Spark 框架自身也自帶了完整的資源調(diào)度管理服務(wù)本橙,可以獨(dú)立部署到一個集群中。

Spark on YARN - Spark 可以運(yùn)行于YARN之上脆诉,和Hadoop 進(jìn)行統(tǒng)一部署甚亭。資源管理和調(diào)度依賴YARN贷币,分布式存儲依賴HDFS。

Spark on Mesos - Mesos 是一種資源調(diào)度管理框架亏狰,可以為運(yùn)行在它上面的Spark 提供資源調(diào)度服務(wù)役纹。

ssh免密:

ssh-keygen -t rsa // /root/.ssh/id_rsa

cd /root/.ssh

cp id_rsa.pub authorized_keys

cd /usr/local

ssh-copy-id -i node002 //發(fā)送到node002

ssh node002

Spark standalone集群:

/usr/spark/spark3/conf

#mv spark-env.sh.template spark-env.sh

export SPARK_MASTER_IP=node001

export SPARK_MASTER_PORT=7077

export SPARK_EXECUTOR_INSTANCES=1

export SPARK_WORKER_INSTANCES=1

export SPARK_WORKER_CORES=1

export SPARK_WORKER_MEMORY=256M

export SPARK_MASTER_WEBUI_PORT=8080

export SPARK_CONF_DIR=/usr/spark/spark3/conf

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

export JRE_HOME=${JAVA_HOME}/jre

mv slaves.template slaves

vi slaves //打開slaves去掉localhost,增加如下內(nèi)容

node002 #slave1,node001為master

將spark文件夾同步到其他從機(jī)

scp -r /usr/spark/spark3 root@node002:/usr/spark/

啟動spark

/usr/spark/spark3/sbin/start-all.sh

打開控制臺:


在Standalone模式運(yùn)行Spark應(yīng)用程序

1.spark-shell運(yùn)行應(yīng)用程序

在Spark集群上運(yùn)行應(yīng)用程序,需要將Master的spark://ip:port傳遞給sparkcontext構(gòu)造函數(shù)暇唾。

在集群上運(yùn)行交互式的spark命令spark-shell促脉,該命令將會用spark-env.sh中的SPARK_MASTER_IPD和SPARK_MASTER_PORT自動設(shè)置Master.

./bin/spark-shell --master spark://ip:port

2.spark-submit啟動應(yīng)用程序

spark-submit向集群提交spark應(yīng)用程序比較直接,對于獨(dú)立部署模式的集群策州,spark支持Client部署模式瘸味,即在提交應(yīng)用的客戶端進(jìn)程中部署Driver.

應(yīng)用程序通過spark-submit啟動,應(yīng)用程序的jar包將會自動地分配給所有的Worker節(jié)點(diǎn)够挂;對于任何其他運(yùn)行應(yīng)用程序時需要依賴的Jar包旁仿,可以通過-jar聲明,jar包名之間用逗號隔開孽糖。

./bin/spark-submit --class xxx.XX --master spark://node001:7077 --executor-memory 2G? --total-executor-cores 2 xxxx.xxxx.jar

應(yīng)用程序提交過程

Spark應(yīng)用程序在集群上以獨(dú)立進(jìn)程集合的形式運(yùn)行枯冈,接受用戶Driver程序中main函數(shù)sparkcontext對象的協(xié)調(diào)。當(dāng)任務(wù)提交到集群上梭姓,SparkContext對象可以與多種集群管理(Standalone部署霜幼,Mesos,YARN模式)連接,這些集群管理器負(fù)責(zé)為所有應(yīng)用分配資源誉尖。一旦連接建立罪既,Spark可以在集群的節(jié)點(diǎn)上獲得Executor,這些Executor進(jìn)程負(fù)責(zé)執(zhí)行計算和為應(yīng)用程序存儲數(shù)據(jù)铡恕。


(1)sparkContext向資源管理器注冊并申請資源

(2)資源管理器根據(jù)預(yù)先設(shè)定的算法琢感,在資源池里分配合適的Executor運(yùn)行資源

(3)應(yīng)用(Main函數(shù)里的算子)構(gòu)建有向無環(huán)圖

(4)DAGScheduler將圖轉(zhuǎn)換成TaskSet

(5)TaskScheduler負(fù)責(zé)TaskSet的任務(wù)分發(fā)。

Executor之間可以相互通信探熔。

SparkShell是交互控制臺驹针,使用scala程序;./bin/spark-shell --master local[*] //--master用來設(shè)置context將要連接并使用的資源主節(jié)點(diǎn)诀艰,master的值是standalone模式的spark集群地址柬甥,Mesos,Yarn集群的url.或者是一個local地址;使用--jars可以添加jar包的路徑其垄,逗號隔開多個苛蒲。spark-shell本質(zhì)是在后臺調(diào)用了spark-submit腳本來啟動應(yīng)用程序。


scala> val textFile = sc.textFile("file:///usr/spark/spark3/README.md")

textFile: org.apache.spark.rdd.RDD[String] = file:///usr/spark/spark3/README.md MapPartitionsRDD[1] at textFile at <console>:24

加載HDFS文件和本地文件都是使用textFile绿满,區(qū)別是添加前綴(hdfs:// 和 file://)進(jìn)行標(biāo)識臂外,從本地文件讀取文件直接返回MapPartitionsRDD,而從HDFS讀取的文件先轉(zhuǎn)成HadoopRDD,然后隱式轉(zhuǎn)換成MapPartitionsRDD.它們都是Spark的彈性分布式數(shù)據(jù)集(RDD)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漏健,隨后出現(xiàn)的幾起案子嚎货,更是在濱河造成了極大的恐慌,老刑警劉巖蔫浆,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殖属,死亡現(xiàn)場離奇詭異,居然都是意外死亡克懊,警方通過查閱死者的電腦和手機(jī)忱辅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門七蜘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭溉,“玉大人,你說我怎么就攤上這事橡卤“缒睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵碧库,是天一觀的道長柜与。 經(jīng)常有香客問我,道長嵌灰,這世上最難降的妖魔是什么弄匕? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮沽瞭,結(jié)果婚禮上迁匠,老公的妹妹穿的比我還像新娘。我一直安慰自己驹溃,他們只是感情好城丧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豌鹤,像睡著了一般亡哄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上布疙,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天蚊惯,我揣著相機(jī)與錄音,去河邊找鬼灵临。 笑死截型,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俱诸。 我是一名探鬼主播菠劝,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赶诊?” 一聲冷哼從身側(cè)響起笼平,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舔痪,沒想到半個月后寓调,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锄码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年夺英,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滋捶。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡痛悯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出重窟,到底是詐尸還是另有隱情载萌,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布巡扇,位于F島的核電站扭仁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏厅翔。R本人自食惡果不足惜乖坠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刀闷。 院中可真熱鬧熊泵,春花似錦、人聲如沸涩赢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒扒。三九已至怯邪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間花墩,已是汗流浹背悬秉。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冰蘑,地道東北人和泌。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像祠肥,于是被迫代替她去往敵國和親武氓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容