每日一句正能量
“春風(fēng)十里,不如你?!?br> 這句來自現(xiàn)代作家安妮寶貝的經(jīng)典句子,它表達(dá)了對(duì)他人的贊美與崇拜。每個(gè)人都有著不同的閃光點(diǎn)和特長,在這個(gè)世界上,不必去羨慕別人的光芒,自己所擁有的價(jià)值是獨(dú)一無二的。每個(gè)人都有無限的潛力和能力,只要勇敢展現(xiàn)自己,就能在人生舞臺(tái)上綻放光彩。每天鼓勵(lì)自己,相信自己,發(fā)揮自己的優(yōu)點(diǎn)和才能,你就能成為那道獨(dú)特的風(fēng)景,給世界帶來不一樣的美好。
引言
Spark是一個(gè)用于大規(guī)模數(shù)據(jù)處理的高性能分布式計(jì)算框架。它提供了一個(gè)簡單易用的編程模型和豐富的API,可以幫助我們?cè)诜植际江h(huán)境中快速地進(jìn)行數(shù)據(jù)處理和分析。
在開始編寫自己的Spark程序之前,我們可以先嘗試運(yùn)行Spark官方提供的示例程序來熟悉Spark的基本用法和工作原理。
其中一個(gè)經(jīng)典的官方示例是SparkPi,它通過隨機(jī)生成的點(diǎn)來估算圓周率π的值。我們可以通過這個(gè)程序來了解如何使用Spark進(jìn)行并行計(jì)算和分布式數(shù)據(jù)處理。
接下來,我們將一步步地體驗(yàn)運(yùn)行Spark官方示例SparkPi,并觀察它在分布式集群上的運(yùn)行效果。通過這個(gè)過程,我們可以更好地理解Spark的運(yùn)行機(jī)制和優(yōu)勢(shì),為編寫自己的Spark程序打下良好的基礎(chǔ)。讓我們開始吧!
章節(jié)概要
Spark是一個(gè)快速、通用、可擴(kuò)展的大數(shù)據(jù)處理引擎,具有高效的內(nèi)存計(jì)算能力和豐富的數(shù)據(jù)處理功能。在大數(shù)據(jù)領(lǐng)域中,Spark已經(jīng)成為一個(gè)重要的工具和平臺(tái),被廣泛應(yīng)用于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、圖計(jì)算等多個(gè)領(lǐng)域。
了解Spark的運(yùn)行架構(gòu)和原理,對(duì)于高效地使用和優(yōu)化Spark程序非常重要。Spark的運(yùn)行架構(gòu)和原理涉及到數(shù)據(jù)處理模型、任務(wù)調(diào)度機(jī)制、資源管理策略等多個(gè)方面的知識(shí)。理解這些知識(shí)可以幫助我們更好地理解Spark的工作原理,從而合理地配置和管理計(jì)算資源,設(shè)計(jì)和優(yōu)化Spark程序。
本章節(jié)將深入探討Spark的運(yùn)行架構(gòu)與原理。首先,我們將介紹Spark的基本概念和特點(diǎn),以及Spark的集群模式和運(yùn)行模式。然后,我們將詳細(xì)解析Spark的執(zhí)行引擎Spark Core,包括其任務(wù)劃分與調(diào)度機(jī)制。接著,我們將介紹Spark的數(shù)據(jù)抽象模塊RDD和DataFrame/Dataset,并分析其在數(shù)據(jù)處理中的作用和原理。此外,本章節(jié)還將對(duì)Spark的資源管理器和任務(wù)調(diào)度器進(jìn)行詳細(xì)討論,包括Cluster Manager和DAG調(diào)度器的工作原理和實(shí)現(xiàn)方式。最后,我們將通過實(shí)際的運(yùn)行架構(gòu)實(shí)例分析,具體了解Spark在不同的集群模式下的運(yùn)行架構(gòu)和工作流程。
通過學(xué)習(xí)本章節(jié)內(nèi)容,讀者將能夠全面了解Spark的運(yùn)行架構(gòu)與原理,掌握Spark程序的設(shè)計(jì)和優(yōu)化方法。無論是初學(xué)者還是有一定經(jīng)驗(yàn)的開發(fā)者,通過深入學(xué)習(xí)Spark的運(yùn)行架構(gòu)與原理,都能夠更好地利用Spark處理大數(shù)據(jù)任務(wù),并開發(fā)出高效、可擴(kuò)展的Spark應(yīng)用程序。
2.4 體驗(yàn)第一個(gè)Spark程序
2.4.1 運(yùn)行Spark官方示例SparkPi
Spark集群已經(jīng)部署完畢,接下來我們使用Spark官方示例SparkPi,體驗(yàn)Spark集群提交任務(wù)的流程。首先進(jìn)入spark目錄,執(zhí)行命令如下。
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop01:7077 \
--executor-memory 1G \
--total-executor-cores 1 \
examples/jars/spark-examples_2.11-2.3.2.jar \
10
上述命令參數(shù)表示含義如下:
- 1、–master spark://hadoop01:7077:指定Master的地址是hadoop01節(jié)點(diǎn)
- 2、–executor-memory1G:指定每個(gè)executor的可用內(nèi)存為1G
- 3、–total-executor-cores 1:指定每個(gè)executor使用的CPU核心數(shù)為1個(gè)
按【回車鍵】提交Spark作業(yè)后,觀察Spark集群管理界面,其中“Running Applications”列表表示當(dāng)前Spark集群正在計(jì)算的作業(yè),執(zhí)行幾秒后,刷新界面,在Completed Applications表單下,可以看到當(dāng)前應(yīng)用執(zhí)行完畢,返回控制臺(tái)查看輸出信息,出現(xiàn)了“Pi is roughly 3.140691140691141
”,說明Pi值已經(jīng)被計(jì)算完畢。,如下圖所示。
計(jì)算出來的結(jié)果準(zhǔn)確是由參數(shù)(命令中最后的10)決定的,這個(gè)參數(shù)越大,準(zhǔn)確度超高。
在高可用模式提交任務(wù)時(shí),可能涉及多個(gè)Master,在提交任務(wù)時(shí),需要讓SparkContext指向一個(gè)Master列表 ,執(zhí)行提交任務(wù)的命令如下。
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop01:7077,hadoop02:7077,hadoop03:7077 \
--executor-memory 1G \
--total-executor-cores 1 \
examples/jars/spark-examples_2.11-2.3.2.jar \
10
總結(jié)
在體驗(yàn)第一個(gè)Spark程序之前,確保已經(jīng)安裝好了Spark,并且配置環(huán)境變量和啟動(dòng)Spark集群。
首先,在終端中輸入以下命令啟動(dòng)Spark集群:
sbin/start-all.sh
接著,創(chuàng)建一個(gè)新的Spark應(yīng)用程序,命名為SparkPi,并在該應(yīng)用程序中編寫代碼計(jì)算Pi的近似值。
import org.apache.spark.{SparkConf, SparkContext}
object SparkPi {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("SparkPi")
val sc = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = 100000 * slices
val count = sc.parallelize(1 to n, slices).map { i =>
val x = Math.random() * 2 - 1
val y = Math.random() * 2 - 1
if (x * x + y * y <= 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
sc.stop()
}
}
代碼解釋:
- 創(chuàng)建SparkConf對(duì)象,設(shè)置應(yīng)用程序的名稱為"SparkPi"。
- 使用SparkConf創(chuàng)建SparkContext對(duì)象,該對(duì)象將作為Spark應(yīng)用程序的入口點(diǎn)。
- 通過命令行參數(shù)獲取切片的數(shù)量(默認(rèn)為2),計(jì)算需要生成的隨機(jī)點(diǎn)的總數(shù)。
- 使用parallelize方法創(chuàng)建一個(gè)RDD,該RDD包含了1到n的數(shù)字,并指定了切片的數(shù)量。
- 對(duì)每個(gè)數(shù)字進(jìn)行映射操作,生成一個(gè)隨機(jī)點(diǎn),并判斷該點(diǎn)是否在圓內(nèi)。
- 對(duì)所有隨機(jī)點(diǎn)的結(jié)果進(jìn)行reduce操作,得到圓內(nèi)點(diǎn)的數(shù)量。
- 根據(jù)公式計(jì)算Pi的近似值。
- 打印結(jié)果并停止SparkContext。
保存代碼到一個(gè)文件中,例如"SparkPi.scala"。
接下來,在終端中輸入以下命令來編譯和打包程序:
$SPARK_HOME/bin/spark-submit --class SparkPi --master spark://<master-url> SparkPi.jar
其中,"“是Spark集群的URL,例如"spark://localhost:7077”。
程序會(huì)開始運(yùn)行,輸出Pi的近似值。
最后,可以在Spark集群的Web界面上查看運(yùn)行日志和結(jié)果。
通過體驗(yàn)第一個(gè)Spark程序,我們了解了Spark應(yīng)用程序的基本結(jié)構(gòu)和運(yùn)行方式??梢赃M(jìn)一步學(xué)習(xí)和探索更復(fù)雜的Spark程序,以及使用Spark的其他功能和API。文章來源:http://www.zghlxwxcb.cn/news/detail-777384.html
轉(zhuǎn)載自:https://blog.csdn.net/u014727709/article/details/132240278
歡迎 ??點(diǎn)贊?評(píng)論?收藏,歡迎指正文章來源地址http://www.zghlxwxcb.cn/news/detail-777384.html
到了這里,關(guān)于Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)筆記(第二章 Spark基礎(chǔ)-04)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!