1氓癌、名詞及術(shù)語
術(shù)語說明
術(shù)語
說明
HDFS
Hadoop分布式文件系統(tǒng)
Hive
基于Hadoop的數(shù)據(jù)倉庫工具
Yarn
資源管理器
RDD
彈性分布式數(shù)據(jù)集
Partition
RDD的數(shù)據(jù)分區(qū)霎烙,可并行計(jì)算
NarrowDependency
窄依賴磷箕,子RDD依賴于父RDD中固定的Partition亲桦,如map轉(zhuǎn)換
WideDependency
寬依賴级及,子RDD依賴于父RDD中所有的Partition刷晋,如groupByKey
DAG
有向無環(huán)圖生均,用于反映各RDD之間的依賴關(guān)系
yarn
Spark程序基于yarn的運(yùn)行模式
2.1、開發(fā)流程
編寫Spark程序à打包成Jar包à提交到Spark集群執(zhí)行
2.1邦马、開發(fā)前準(zhǔn)備
(1)安裝jdk1.7+
(2)安裝apache-maven-3.3.9
(3)可視化開發(fā)軟件ideaIU
(4)scala 2.11.x
2.2贱鼻、源碼示例
Spark源碼是基于Scala進(jìn)行開發(fā)的,因此本文檔中的代碼示例均采用Scala演示
1.配置ideaIU,安裝scala Plugins為下載的scala 2.11.x
2.創(chuàng)建maven工程并配置文件pom.xml
3.Spark程序開發(fā)
(1)初始化Spark
創(chuàng)建SparkSession對象,包含了應(yīng)用程序的信息滋将,可以設(shè)置應(yīng)用程序名稱以及運(yùn)行模式(也可以在運(yùn)行程序時設(shè)置該參數(shù))邻悬,SparkSession作為spark 2.0引入的新的切入點(diǎn),包含了SQLContext和HiveContext的功能,在build上創(chuàng)建的參數(shù)會自動傳入到spark和hadoop
(1)彈性分布式數(shù)據(jù)集(RDD)和DataSet
Spark 1.x程序的核心是圍繞RDD進(jìn)行的變換随闽,2.0版本統(tǒng)一了DataFrames和DataSet,
DataFrames只是行(Row)數(shù)據(jù)集的typealias了,并且以DataFrame為重點(diǎn)的機(jī)器學(xué)習(xí)包spark.ml逐漸作為主api出現(xiàn)
①創(chuàng)建RDD
RDD有兩種創(chuàng)建方式:
一是從普通數(shù)組或List列表創(chuàng)建父丰,例:
valinit_rdd=sparkSession.SparkContext.parallelize(1to9,3)
二是從外部數(shù)據(jù)源如HDFS:
valinit_rdd=sparkSession.SparkContext.textFile("/recordSystem/sourceFile.txt")
②創(chuàng)建DataSet和DataFrame
使用sparkSession.range創(chuàng)建一個DataSet
valinit_ds=sparkSession.range(5,100,5)
從hive中創(chuàng)建DataFrame
valinit_df=sparkSession.sql("select * from fact_vod")
(2)RDD操作
目前程序的編寫還是以RDD為主, DataFrame的轉(zhuǎn)換與RDD的類似.
RDD通過一系列的變換,得到數(shù)據(jù)分析的結(jié)果掘宪,如統(tǒng)計(jì)一個文本中單詞的個數(shù)蛾扇,單詞間以空格切分
valinit_rdd=sc.textFile("/recommendSystem/file.txt")
init_rdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
(4)RDD結(jié)果存儲
經(jīng)過RDD轉(zhuǎn)換后得到的數(shù)據(jù)結(jié)果可以存儲到HDFS文件系統(tǒng)或者h(yuǎn)ive表中
①存儲到文件系統(tǒng)攘烛,路徑為/recommendSystem:
result_rdd.saveAsTextFile("/recommendSystem")
②存儲到hive表,表名為result_table
importorg.apache.spark.sql.SaveMode
result_rdd.toDF().write.mode(SaveMode.Append).saveAsTable("result_table")
2.3屁桑、實(shí)際案例
程序?qū)崿F(xiàn)功能:推薦引擎離線計(jì)算服務(wù)數(shù)據(jù)預(yù)處理
2.4医寿、提交運(yùn)行
將打包好的Spark程序Jar包發(fā)送到Spark集群的master節(jié)點(diǎn)或者slave節(jié)點(diǎn)上,并執(zhí)行以下命令運(yùn)行程序:
SPARK_HOME/bin/spark-submit--master yarn –-deploy-mode client--class CLASS_PATHJAR_PATH ARGS
其中蘑斧,
SPARK_HOM為集群中Spark的安裝目錄
CLASS_PATH為主程序入口:包名.Object名
JAR_PATH打包的jar包存放的位置
ARGS程序執(zhí)行所需傳入的參數(shù)
如果在程序中設(shè)置了master,則在submit的時候可以省略master參數(shù)须眷,否則必須添加
上面實(shí)際案例的提交命令為:
/opt/spark/curr_spark/bin/spark-submit --deploy-mode client--class com.zhangjian.recommendation.collaborativeFilter.CFDataPretreatment/root/spark_program/recommend-system_1.0-1.0-SNAPSHOT.jar
?w?,vB6