spark杰普軟件科技有限公司_第1頁
spark杰普軟件科技有限公司_第2頁
spark杰普軟件科技有限公司_第3頁
spark杰普軟件科技有限公司_第4頁
spark杰普軟件科技有限公司_第5頁
已閱讀5頁,還剩353頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:1Briup Training What is Spark Spark簡介( Spark4個特點與發(fā)展) BDAS系統(tǒng) Why Spark Spark與MapReduce的差異 Spark的適用場景 Spark How Spark案例安裝Spark Spark常用命令

2、Spark架構組件和工作機制Spark運行原理Spark-Core內(nèi)容內(nèi)容Spark-SqlSpark-Streaming內(nèi)容2杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:3Briup Training Spark是加州大學伯克利分校AMP開發(fā)通用內(nèi)存并行計算框架。 Apache Spark is a fast

3、 and general engine for large-scale data processing. Spark是基于內(nèi)存計算的大數(shù)據(jù)分布式計算框架。Spark基于內(nèi)存計算,提用戶將Spark部署在大供可交互的方式,提供近實時的處理方式,量廉價硬件之上,形成集群,提高處理速度,同時也保證了集群高容錯性和高可伸縮性。4Briup Training 2009年伯克利分校開始使用Scala語言編寫Spark源碼,2010年開放源代碼,2013年6月進入Apache孵化項目,2014年2月成為Apache頂級項目,2014年5月底發(fā)布Spark1.0.0,到目前為止版本更新為Spark2.4.3。

4、5Briup Training 演進時間表:2009年由 Berkeleys AMPLab 開始編寫最初的源代碼2010年開放源代碼2013年6月進入Apache孵化器項目2014年2月成為Apache的頂級項目(82014年5月底Spark1.0.0發(fā)布2014年9月Spark1.1.0發(fā)布.2016年3月Spark1.6.1發(fā)布2016年7月Spark2.0發(fā)布2016年10月Spark2.0.1發(fā)布2016年11月Spark1.6.3發(fā)布2016年11月Spark2.0.2發(fā)布.2017年10月Spark2.1.2發(fā)布2017年12月Spark2.2.1發(fā)布2018年2月Spark2.3

5、.0發(fā)布時間)6Briup Training 在Spark官網(wǎng)上介紹,它具有運行速度快、易用性好、通用性強和隨處運行等特點。7Briup Training 運行速度快 Spark擁有DAG執(zhí)行引擎,支持在內(nèi)存中對數(shù)據(jù)進行迭代計算。提供的數(shù)據(jù),速度是Hadoop MapReduce的10倍以上,如果數(shù)據(jù)表明,如果數(shù)據(jù)由磁盤,速度可以高達100多倍。從內(nèi)存中8Briup Training 易用性 支持4種語言的API:scala、java、python、R。特別是Scala是一種高效、可拓展的語言,能夠用簡潔的代碼處理較為復雜的處理工作。 val text_file=sc.textFile(“ h

6、dfs:/.” ) text_file.flatMap(_.split(“ text_file.flatMap(_.split(“” ).map(x = (x,1).reduceByKey(_+_)” ).countByValue();9Briup Training scala val textFile = spark.read.textFile(“ README.md) val wordCounts = textFile.flatMap(line = line.split( ).groupByKey(identity).count()1Briup Training 通用性強 Spark圈即B

7、DAS(伯克利數(shù)據(jù)分析棧)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等組件,這些組件分別處理Spark Core提供內(nèi)存計算框架、SparkStreaming的實時處理應用、Spark SQL的即席、MLlib或MLbase的學習和GraphX的圖處理,它們都是由AMP提供,能夠無縫的集成并提供一站式解決平臺。1Briup Training 隨處運行 Spark具有很強的適應性,能夠HDFS、HBase、Cassandra S3和Techyon為持久層讀寫原生數(shù)據(jù),能夠以Mesos、YARN和自身攜帶的Standalone作為管理器

8、調(diào)度job,來完成Spark應用程序的計算。12Briup Training Spark圈也稱為BDAS(伯克利數(shù)據(jù)分析棧),是伯克利APMLab打造的,力圖在算法(Algorithms)、(Machines)、人(People)之間通過大規(guī)模集成來展現(xiàn)大數(shù)據(jù)應用的一個平臺。伯克利AMPLab運用大數(shù)據(jù)、云計算、通信等各種以及各種靈活的技術方案,對海量不透明的數(shù)據(jù)進行甄別并轉化為有用的信息,以供人們更好的理解世界。該圈已經(jīng)涉及到學習、數(shù)據(jù)挖掘、數(shù)據(jù)庫、信息檢索、自然語言處理和語音識別等多個領域。13Briup Training Spark圈以Spark Core為,從HDFS、HBase和Am

9、azon S3等持久層數(shù)據(jù),以MESOS、YARN和自身攜帶的Standalone為管理器調(diào)度Job完成Spark應用程序的計算。 這些應用程序可以來自于不同的組件,如SparkShell/Spark Submit的批處理、Spark Streaming的實時處理應用、Spark SQL、BlinkDB的權衡、MLlib/MLbase的學習、GraphX的圖處的即席理和SparkR的數(shù)學計算等等。14Briup Training15杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟

10、件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:16Briup Training Spark是在借鑒了MapReduce之上發(fā)展而來的,繼承了其分布式并行計算的優(yōu)點并改進了MapReduce明顯的缺陷,具體如下:基于內(nèi)存計算容錯性高通用性好17Briup Training 首先,Spar k把中間數(shù)據(jù)放到內(nèi)存中,迭代運算效率高。MapReduce中計算結果需要落地,保存到磁盤上,這樣勢必會影響整體速度,而Spar k支持DAG圖的分布式并行計算的編程框架,減少了迭代過程中數(shù)據(jù)

11、的落地,提高了處理效率。 其次,Spar k容錯性高。Spar k引進了彈性分布式數(shù)據(jù)集RDD (Resilient Distr ibuted Dataset) 的抽象,它是分布在一組節(jié)點中的只讀對象集合,這些集合是彈性的,如果數(shù)據(jù)集一部分丟失,則可以根據(jù)“血統(tǒng)”(即充許基于數(shù)據(jù)衍生過程)對它們進行重建。另 外在RDD計算時可以通過CheckPoint來實現(xiàn)容錯,而CheckPoint有兩種方式:CheckPoint Data,和Logging The Updates,用戶可以采用哪種方式來實現(xiàn)容錯。 最后,Spar k更加通用。不像Hadoop只提供了Map和Reduce兩種操作,Spar

12、k提供的數(shù)據(jù)集操作類型有很多種,大致分為:Transfor mations和Actions兩大類。Transfor mations包括Map、Filter、FlatMap、Sample、Gr oupByKey、ReduceByKey、Union、J oin、Cogroup、MapValues、Sor t和PartionBy等多種操作類型,同時還提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各個處理節(jié)點之間的通信模型不再像Hadoop只有Shuffle一種模式,用戶可以命名、物化,、分區(qū)等。中間結果的18Briup Training 目前大數(shù)

13、據(jù)處理場景有以下幾個類型: 1. 復雜的批量處理(Batch Data Processing),偏重點在于處理海量數(shù)據(jù)的能力, 至于處理速度可忍受,通常的時間可能是在數(shù)十分鐘到數(shù)小時; 2. 基于歷史數(shù)據(jù)的交互式分鐘之間(Interactive Query),通常的時間在數(shù)十秒到數(shù)十 3. 基于實時數(shù)據(jù)流的數(shù)據(jù)處理(Streaming Data Processing),通常在數(shù)百毫秒到數(shù)秒之間 目前對以上三種場景需求都有比較成處理框架,第一種情況可以用Hadoop的MapReduce來進行批量海量數(shù)據(jù)處理,第二種情況可以Impala進行,對于第三中情況可以用Storm分布式處理框架處理實時流式

14、數(shù)據(jù)。交互式,各自一套維護成本比較高,而Spark的出現(xiàn)能夠一站以上三者都是比較式平臺滿意以上需求。19Briup Training Spark是基于內(nèi)存的迭代計算框架,適用于需要多次操作特定數(shù)據(jù)集的應用場合。需要反復操作的次數(shù)越多,所需的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計算密集度較大的場合,受益就相對較小 由于RDD的特性,Spark不適用那種異步細粒度更新狀態(tài)的應用,例如web服或者是增量的web爬蟲和索引。就是對于那種增量修改的應用模型不務的適合 數(shù)據(jù)量不是特別大,但是要求實時統(tǒng)計分析需求20Briup TrainingYahoo將Spark用在Audience Expansion中的

15、應用。Audience Expansion是廣告中尋找目標用戶的法:首先者提供一些了并且的樣本客戶,據(jù)此進行學習,尋找可能轉化的用戶,對他們定向。Yahoo采用的算法是logistic regression。同時由于有些SQL負載需要更高的服務質(zhì)量,又加入了專門跑Spark的大內(nèi)存集群,用于取代商業(yè)BI/OLAP工具,承擔報表/圖表和交互式/即席,同時與桌面BI工具對接。目前在Yahoo部署的Spark集群有112臺節(jié)點,9.2TB內(nèi)存。業(yè)務,最初使用Mahout或者寫的MR來解決復雜的阿里搜索和學習,導致效率低而且代碼不易維護。淘寶技術團隊使用了Spark來解決多次迭學習算法、高計算復雜度的

16、算法等。將Spark運用于淘寶的推薦相關代的算法上,同時還利用Graphx解決了許多生產(chǎn)問題,包括以下計算場景:基于度分布的中樞節(jié)點發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)、基于三角形計數(shù)的關系衡量、基于隨機游走的用戶屬性等。21杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:22Briup Training Spark運行

17、模式 Local本地模式(多用于測試) Standalone模式 Yarn集群模式 Mesos集群模式 Kubernetes集群模式 Spark環(huán)境搭建 Spark常用命令 spark-shell spark-submit spark-sql Spark基礎案例23Briup Training 1.解壓tar -xvf spark.2.2.1-bin-hadoop2.7.tar 2.mv spark.2.2.1-bin-hadoop2.7 /opt/software/ 3.修改環(huán)境變量: vi .bashrc export SPARK_HOME=/usr/spark/spark-2.2.1-b

18、in-hadoop2.7 exportPATH=$PATH:$SPARK_HOME/bin:$PATH:$SPARK_HOME/sbin 4.source .bashrc 5.(可選)修改下log4j的級別 $SPARK_HOME/conf/pertie 6.測試spark是否安裝 spark-shell:24Briup Training 測試環(huán)境run-example SparkPi 10 測試spark-submit命令 $Spark_home/spark-submit-class org.apache.spark.examples.SparkPi examples/ja

19、rs/spark-examples_2.11-2.2.1.jar1025Briup Training 1.修改Spark配置文件 (路徑為$SPARK_HOME/conf/下)#cp cpslaves.template和 spark-env.sh.template各一份spark-env.sh.template spark-env.shslaves.template slaves 2.vi slaves,此文件是指定子節(jié)點的主機,直接添加從節(jié)點主機名即可(前提是在/etc/hosts里面配置了).例如:mm0 mm1mm226Briup Training3.在spark-env.sh末端添加如

20、下幾行:#必須配置:#主節(jié)點的IP地址export SPARK_MASTER_IP=00#主節(jié)點的端export SPARK_MASTER_PORT=7077#指定Spark用來混洗數(shù)據(jù)的本地路徑export SPARK_LOCAL_DIRS=/data/spark/dirs,/home/briup/spark/dirs(一定要注意這個混洗數(shù)據(jù)的路徑的權限)27Briup Training#可選配置:#Worker的WebUI端export SPARK_WORKER_WEBUI_PORT=8081#主節(jié)點的WEBUI端export SPARK_MASTER_WEBUI_P

21、ORT=8099#每個Worker使用的CPU核數(shù),默認1個export SPARK_WORKER_CORES=2#每個Slave中啟動幾個Worker實例,默認1個export SPARK_WORKER_INSTANCES=2#每個Worker使用多大的內(nèi)存,默認1g export SPARK_WORKER_MEMORY=2g #驅(qū)動器節(jié)點Driver使用的內(nèi)存export SPARK_DRIVER_MEMORY=2g28Briup Training 4.啟動start-all.sh命令或者是start-master.sh/start-slave.sh spark:/host:7077 5.

22、測試是否上輸入jps頁面,在集群的所有 6.打開localhost:8080查看集群29Briup Training 注意事項: 1.默認情況下,集群和Mesos提交的Application會使用所有集群中剩余的CPU Core。如果要限定每個提交的Spark Application的使用的CPU核的數(shù)目,可以采用下邊的辦法: 在sparkconf對象中設置spark.cores.max 核數(shù)。例如:val conf = new SparkConf() .setMaster(.).setAppName(.) .set( spark.cores.max , 10 ) 在群集上更改應用程序設置應該

23、使用spark.deploy.defaultCores。例如:在conf/ spark-env.sh: export SPARK_MASTER_OPTS=“-Dspark.deploy.defaultCores= 在spark2.2.1版本之后,需要在使用spark-submit或者spark-shell命令時,通過 total-executor-cores 2來進行設置。 2.必須確保executor_memory的值= worker_memory的值30Briup Training基于文件系統(tǒng)的單點恢復(Single-Node Recovery with Local File System

24、)export SPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/opt/software/spark- 1.6.1-bin-hadoop2.6/recovery基于zookeeper的Standby Masters(Standby Masters with ZooKeeper) export SPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zooke

25、eper.url=17:2181, 18:2181,19:2181 -Dspark.deploy.zookeeper.dir=/spark:用于指定Master的HA,依賴于zookeeper集群;31Briup Training 測試spark-submit命令 $Spark_home/spark-submit-master spark:/host:7077-class org.apache.spark.examples.SparkPi examples/jars/spark-examples_2.11-2.2.1.jar10

26、32Briup Training 1.只需要修改spark-env.sh環(huán)境配置即可: 2.添加如下配置:export HADOOP_CONF_DIR =/opt/hadoop/etc/hadoopexport SPARK_LOCAL_IP=你的IP 優(yōu)化配置#將spark的類庫jar包上傳到hdfs上,省的每次都上傳Spark1.*版本export SPARK_JAR=hdfs:/:9000/user/spark/share/lib/spark- assembly.jarSpark2.*版本spark.yarn.jars或者spark.yarn.archivehdfs:/:9000/spar

27、k_lib/jars/*hdfs:/:9000/spark_lib/jars33Briup Training 注意事項: 在yarn集群上部署spark,即添加HADOOP_CONF_DIR到spark-env.sh中, 不論要運行本地spark-shell還是yarn集群spark-shell,必須先啟動yarn集群。34Briup Training 1.將hive-site.xml添加到$SPARK_HOME/conf/目錄下; 2.集群運行模式下,需要將Hive的元數(shù)據(jù)的連接jar包配置到執(zhí)行器節(jié)點; spark.executor.extraClassPath sql-connector

28、-java-5.1.22.jar 3.設置warehouse$HIVE_HOME/lib/my spark.sql.warehouse.dir hdfs:/computer1.cloud.briu :9000/user/hive/warehouse/ 4.測試 在本地測試只能通過 -driver-class-path 選項將Hive的元數(shù)據(jù)的連接jar包添加到Driver中。 spark-sql-driver-class-path $HIVE_HOME/lib/mysql-connector-java-5.1.22.jar35Briup Trainingspark-shellspark-sub

29、mit spark-sql36Briup Training 格式:./bin/spark-shell optionsoptions可選參數(shù) 可通過spark-shell-help查看eg:spark-shell -master local3 -name mySparkShell37Briup Training 格式:Usage: spark-submit options app argumentsUsage: spark-submit -kill submission ID -master spark:/. Usage: spark-submit -status submission ID -

30、master spark:/.Usage: spark-submit run-example options example-class exampleargsoptions可選參數(shù) 可通過spark-submit -help查看表示包含應用的jar包app arguments傳給應用的選項38Briup Training spark-submit的常見標記-master 集群URL-deploy-mode 工作模式-class 應用程序的主類-name 應用的名稱-jars 額外依賴的第jar包-files 需要分發(fā)到各節(jié)點的數(shù)據(jù)文件-executor-memory 執(zhí)行器內(nèi)存大小-driv

31、er-memory 驅(qū)動器內(nèi)存大小-conf prop=value標記設置SparkConf配置選項-properties-file 指定一個包含鍵值對的屬性文件. eg:spark-submit-master local -class com.briup.scala.First*.jar39Briup Training 格式:./bin/spark-sql options cli optionoptions可選參數(shù) 可通過spark-sql-help查看cli options可選參數(shù)可通過spark-sql-help查看eg:spark-sql-master local40Briup Tra

32、ining Scala行數(shù)統(tǒng)計val lines=sc.textFile(“ readme.md” ) lines.count()lines.first()思考:1. 哪來的sc?2. sc是什么?41Briup Training 驅(qū)動器程序(Driver Program) 包含應用的main函數(shù),并定義了集群上的分布式數(shù)據(jù)集,并對分布式數(shù)據(jù)集應 用相關操作。 執(zhí)行器(executor) sc(SparkContext)42Briup Training構建SparkContext對象 在一個的項目中,需要 pom文件中添加spark-core依賴org.apache.sparkspark-co

33、re_43Briup Training 代碼編寫結構如下:SparkConfval conf=newSparkConfval sc=newSparkContext(conf)SparkContextval rdd:RDDT=sc.方法(參數(shù))RDDsc.stop()關閉SparkContext對象44Briup Training45Briup Training46杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-80

34、00:215311Brighten Your Way And Raise You Up.電郵:training主頁:47Briup TrainingBriup Training Spark架構圖49Briup Training50Briup Training Executor:執(zhí)行器,Application運行在worker節(jié)點上的一個進程,負責啟動線程池運行任務(Task),并且負責將數(shù)據(jù)存在內(nèi)存或磁盤上。每個Application擁有executors。在Spark on Yarn 模式下, 其進程名稱為的一組CoarseGrainedExecutorBackend, 類似于 Hadoop

35、 MapReduce 中的 YarnChild。一個 CoarseGrainedExecutorBackend 進程有且僅有一個executor 對象,它負責將 Task 包裝成 taskRunner,并從線程池中抽取出一個空閑線程運行 Task。每個CoarseGrainedExecutorBackend 能并行運行 Task 的數(shù)量就取決于分配給它的CPU 的個數(shù)了;51Briup Training 彈性分布式數(shù)據(jù)集(RDD)Resillient Distributed Dataset,Spark 的基本計算單元,可以通過一系列算子進行操作(主要有 Transformation 和 Act

36、ion 操作,一組RDD形成執(zhí)行的有向無環(huán)圖RDD Graph。 有向無環(huán)圖(DAG)DirectedSched Acycle graph,反應 RDD 之間的依賴關系; RDD DAG當RDD遇到Action算子,將之前的所有算子形成一個有向無環(huán)圖。在Spark中轉化為Job,提交到集群進行執(zhí)行。一個App中可以包含多個Job。 有向無環(huán)圖調(diào)度器(DAG Scheduler)根據(jù) Job 構建基于 Stage 的 DAG,并提交 Stage給 TaskScheduler; 任務調(diào)度器(Task Scheduler):將Task分發(fā)給Executor執(zhí)行。(將Taskset提交給worker(

37、集群)運行并回報結果); SparkEnv線程級別的上下文,運行時的重要組件的。52Briup Training53Briup Training54Briup Training Spark運行基本流程55Briup Training56Briup Training Spark on Standalone運行過程57Briup Training58Briup Training59Briup Training60Briup Training 在YARN中,每個Application實例都有一個ApplicationMaster進程,它是Application啟動的第一個容器。它負責和Resourc

38、eManager打交道并請求之后告訴NodeManager為其啟動Container。從獲取次的含義講YARN-Cluster和YARN-Client模式的區(qū)別其實就是ApplicationMaster進程的區(qū)別。 YARN-Cluster模式下,Driver運行在AM(Application Master)中,它負責向YARN申請,并監(jiān)督作業(yè)的運行狀況。當用戶提交了作業(yè)之后,就可以關掉Client,作業(yè)會繼續(xù)在YARN上運行,因而YARN-Cluster模式不適合運行交互類型的作業(yè); YARN-Client模式下,Application Master僅僅向YARN請求Executor,Cli

39、ent會和請求的Container通信來調(diào)度他們工作,也就是說Client不能離開。61杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:62Briup Training 1.抽象模型RDD 2.RDD操作構建RDDRDD方法閉包基于分區(qū)進行操作共享變量普通RDD常見方法鍵值對RDD特有的方法 3.PageRank案

40、例/ 4.Spark配置與調(diào)優(yōu)評分數(shù)據(jù)分析63杰普軟件科技公司總部:上海市閘北區(qū)萬榮路1188弄龍軟軟件園區(qū)A棟206室:(021)56778147:200436昆山實訓基地:昆山市巴城學院路828號昆山浦東軟件園北樓4-5層:(0512)50190290-8000:215311Brighten Your Way And Raise You Up.電郵:training主頁:64Briup Training RDD:彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset) RDD是Spark中最基本的數(shù)據(jù)抽象,它代表一個不可變(只讀)、可分區(qū)、元 素可并行計算的,完全彈性

41、的集合。 RDD是有屬性的數(shù)據(jù)集。屬性當前數(shù)據(jù)集的狀態(tài),數(shù)據(jù)集是由數(shù)據(jù)的分區(qū)(partition)組成, 這些分區(qū)運行在集群中的不同節(jié)點上 5個屬性:1. partitions 數(shù)據(jù)分區(qū)列表pute 對分區(qū)數(shù)據(jù)計算函數(shù)3.dependencies 依賴列表4.partitioner 分區(qū)方式5.preferredLocations 優(yōu)選位置RDD具有數(shù)據(jù)流模型的特點:自動容錯、位置感知性調(diào)度和可伸縮性。RDD用戶在執(zhí)行多個時顯式地將工作集緩存在內(nèi)存中,后續(xù)的能夠重用工作集,這極大地提升了速度。65Briup Training RDD之所以稱為“ 彈性” 的特點 :1. 基于Lineage的高效

42、容錯(第n個節(jié)點出錯,會從第n-1個節(jié)點恢復,血 統(tǒng)/緣容錯);2. Task如果失敗會自動進行特定次數(shù)的重試(默認4次);3. Stage如果失敗會自動進行特定次數(shù)的重試(可以只運行計算失敗的階 段),只計算失敗的數(shù)據(jù)分片;4. 數(shù)據(jù)調(diào)度彈性:DAG TASK 和5. checkpoint檢查點容錯;6. 自動的進行內(nèi)存和磁盤數(shù)據(jù)管理無關;的切換.66Briup Training 對開發(fā)者而言: 1.RDD可以看作是Spark的一個對象,它本身運行于內(nèi)存中。 如讀文件是一個RDD,對文件計算是一個RDD,結果集也是一個RDD 不同的分片、 數(shù)據(jù)之間的依賴 、key-value類型的map數(shù)據(jù)

43、都可以看做RDD。 2.RDD不需要物化。 RDD含有如何從其他RDD衍生(即計算)出本RDD的相關信息(即Lineage),據(jù)此可以從物理的數(shù)據(jù)計算出相應的RDD分區(qū) 。 RDD作為數(shù)據(jù)結構,本質(zhì)上是一個只讀的分區(qū)集合。 一個RDD可以包含多個分區(qū),每個分區(qū)就是一個dataset片段。 RDD可以相互依賴。 如果RDD的每個分區(qū)最多只能被一個Child RDD的一個分區(qū)使用,則稱之為narrow dependency; 若多個Child RDD分區(qū)都可以依賴,則稱之為wide dependency。 不同的操作依據(jù)其特性,可能會產(chǎn)生不同的依賴。例如map操作會產(chǎn)生narrow depende

44、ncy,而join操作一般則產(chǎn)生wide dependency。67Briup Training68Briup Training69Briup Training70Briup Training Partition結構/* An identifier for a partition in an RDD.*/trait Partition extends Serializable /* Get the partitions index within its parent RDD*/def index: Int/ A better default implementation of HashCode

45、 override def hashCode(): Int = indexoverride def equals(other: Any): Boolean = super.equals(other)71Briup Training72Briup Training 2)compute 對分區(qū)數(shù)據(jù)計算函數(shù)。Spark中RDD的計算是以分區(qū)為的,每個RDD都會實現(xiàn)compute函數(shù)以達到這個目的。compute函數(shù)會對迭代器 進行復合,不需要保存每次計算的結果。 compute(Partition,TaskContext)73Briup Training 3)dependencies 依賴列表: R

46、DD之間的依賴關系。RDD的每次轉換都會生成一個新的RDD,所以RDD之間就會形成類似于流水線一樣的前后依賴關系。在部分分區(qū)數(shù)據(jù)丟失時, Spark可以通過這個依賴關系重新計算丟失的分區(qū)數(shù)據(jù),而不是對RDD的所有分區(qū)進行重新計算。74Briup Training 1.RDD操作-轉化操作與行動操作 2.RDD緩存機制 3.DAG 有向無環(huán)圖(任務執(zhí)行機制) 4.lineage/譜系圖/血緣系統(tǒng)(容錯機制) 5.依賴關系 窄依賴(NarrowDependency):父RDD一個數(shù)據(jù)分區(qū)只被RDD的一個數(shù)據(jù)分 區(qū)所使用。filter map等方法 OneToOneDependency RangeD

47、ependency 寬(Shuffle)依賴(ShuffleDependency):父RDD一個數(shù)據(jù)分區(qū)被子RDD的多個數(shù)據(jù)分區(qū)所使用。groupByKey sortByKey等方法75Briup Training76Briup Training77Briup Training 4)partitioner 分區(qū)方式: 1.Spark程序通過RDD分區(qū)方式來減少通信開銷 2.只有對于于key-value的RDD,才會有Partitioner 3.非key-value的RDD的Parititioner的值是None。 4.Partitioner函數(shù)不但決定了RDD本身的分區(qū)數(shù)量,也決定了paren

48、t RDD Shuffle輸出時的分區(qū)數(shù)量。 Partitioner源碼實現(xiàn)abstract class Partitioner extends Serializable def numPartitions: Intdef getPartition(key: Any): Int78Briup Training 1.Spark內(nèi)置支持的兩種分區(qū)方式,一個是基于哈希的HashPartitioner,另外 一個是基于范圍的RangePartitioner。 2.查看當前RDD分區(qū)方式:rdd.partitioner 3.自定義分區(qū)方式:extends Partitioner重寫兩個抽象方法即可 4.

49、設置好RDD分區(qū)的操作: cogroup()、groupWith()、join()、leftOuterJoin()、rightOuterJoin()、groupByKey()、reduceByKey()、combineByKey()、partitionBy(),sortByKey() 以及mapValues()(如果父RDD有分區(qū)方式的話) flatMapValues()(如果父RDD有分 區(qū)方式的話),以及filter()(如果父RDD有分區(qū)方式的話)等,其他操作生成結果都存在特定分區(qū)方式。 如果RDD在調(diào)用以上操作之前已經(jīng)具有的分區(qū)方式,則以上操作都能夠從分區(qū)中獲益。(此時以上方法就進行數(shù)

50、據(jù)混洗,減少了數(shù)據(jù)混洗的開銷)79Briup Training 5.預定義自定義分區(qū)(一般預定義分區(qū)與緩存方法連用) pairRDD.partitionBy(args:Partitioner).cache/persist() 適用場景:迭代計算中反復使用同一RDD調(diào)用帶有shuffle操作的方法時,就 可以在進入迭代計算前,先對該RDD進行預定義分區(qū),并記住一定要調(diào)用緩存方法,將該RDD緩存起來,減少數(shù)據(jù)混洗的開銷。 舉例:val newRDD=rdd.partitionBy().cache(); (1 to 50).foreach(x=newRDD.groupByKey.collect /1

51、 次Shuffle) 對于二元操作,輸出數(shù)據(jù)的分區(qū)方式取決于父RDD的分區(qū)方式。默認情況下, 結果采用哈希分區(qū),分區(qū)的數(shù)量和并行度一樣。 如果其中一個父RDD已經(jīng)設置過分區(qū)方式,那么結果就會采用那種分區(qū)方式。 如果兩個父RDD都設置過分區(qū)方式,結果RDD采用第一個父RDD的分區(qū)方式。80Briup Training 5)preferredLocations 優(yōu)選位置:每個Partition的優(yōu)先位置的列表(preferred location)。對于一個HDFS文件來說,這個列表保存的就是每個Partition所在的塊位置。 1.數(shù)據(jù)文件所在塊的位置信息。 2.按照 移動數(shù)據(jù)不如移動計算 原則,Spark在進行任務調(diào)度的時候,會盡

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論