這篇文章主要介紹“Spark集群搭建步驟”,在日常操作中,相信很多人在Spark集群搭建步驟問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Spark集群搭建步驟”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
10多年的平利網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整平利建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“平利網(wǎng)站設(shè)計(jì)”,“平利網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的,基于內(nèi)存快速通用,可擴(kuò)展的集群計(jì)算引擎,實(shí)現(xiàn)了高效的DAG執(zhí)行引擎,可以通過基于內(nèi)存來高效處理數(shù)據(jù)流,運(yùn)算速度相比于MapReduce得到了顯著的提高。
Driver
運(yùn)行Spark的Applicaion中main()函數(shù),會(huì)創(chuàng)建SparkContext,SparkContext負(fù)責(zé)和Cluster-Manager進(jìn)行通信,并負(fù)責(zé)申請(qǐng)資源、任務(wù)分配和監(jiān)控等。
ClusterManager
負(fù)責(zé)申請(qǐng)和管理在WorkerNode上運(yùn)行應(yīng)用所需的資源,可以高效地在一個(gè)計(jì)算節(jié)點(diǎn)到數(shù)千個(gè)計(jì)算節(jié)點(diǎn)之間伸縮計(jì)算,目前包括Spark原生的ClusterManager、ApacheMesos和HadoopYARN。
Executor
Application運(yùn)行在WorkerNode上的一個(gè)進(jìn)程,作為工作節(jié)點(diǎn)負(fù)責(zé)運(yùn)行Task任務(wù),并且負(fù)責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上,每個(gè) Application都有各自獨(dú)立的一批Executor,任務(wù)間相互獨(dú)立。
安裝包管理
[root@hop01 opt]# tar -zxvf scala-2.12.2.tgz [root@hop01 opt]# mv scala-2.12.2 scala2.12
配置變量
[root@hop01 opt]# vim /etc/profile export SCALA_HOME=/opt/scala2.12 export PATH=$PATH:$SCALA_HOME/bin [root@hop01 opt]# source /etc/profile
版本查看
[root@hop01 opt]# scala -version
Scala環(huán)境需要部署在Spark運(yùn)行的相關(guān)服務(wù)節(jié)點(diǎn)上。
安裝包管理
[root@hop01 opt]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz [root@hop01 opt]# mv spark-2.1.1-bin-hadoop2.7 spark2.1
配置變量
[root@hop01 opt]# vim /etc/profile export SPARK_HOME=/opt/spark2.1 export PATH=$PATH:$SPARK_HOME/bin [root@hop01 opt]# source /etc/profile
版本查看
[root@hop01 opt]# spark-shell
服務(wù)節(jié)點(diǎn)
[root@hop01 opt]# cd /opt/spark2.1/conf/ [root@hop01 conf]# cp slaves.template slaves [root@hop01 conf]# vim slaves hop01 hop02 hop03
環(huán)境配置
[root@hop01 conf]# cp spark-env.sh.template spark-env.sh [root@hop01 conf]# vim spark-env.sh export JAVA_HOME=/opt/jdk1.8 export SCALA_HOME=/opt/scala2.12 export SPARK_MASTER_IP=hop01 export SPARK_LOCAL_IP=安裝節(jié)點(diǎn)IP export SPARK_WORKER_MEMORY=1g export HADOOP_CONF_DIR=/opt/hadoop2.7/etc/hadoop
注意SPARK_LOCAL_IP
的配置。
依賴Hadoop相關(guān)環(huán)境,所以要先啟動(dòng)。
啟動(dòng):/opt/spark2.1/sbin/start-all.sh 停止:/opt/spark2.1/sbin/stop-all.sh
這里在主節(jié)點(diǎn)會(huì)啟動(dòng)兩個(gè)進(jìn)程:Master和Worker,其他節(jié)點(diǎn)只啟動(dòng)一個(gè)Worker進(jìn)程。
默認(rèn)端口是:8080。
http://hop01:8080/
運(yùn)行基礎(chǔ)案例:
[root@hop01 spark2.1]# cd /opt/spark2.1/ [root@hop01 spark2.1]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.1.1.jar 運(yùn)行結(jié)果:Pi is roughly 3.1455357276786384
依賴Spark2.1.1版本:
org.apache.spark spark-core_2.11 2.1.1
引入Scala編譯插件:
net.alchim31.maven scala-maven-plugin 3.2.2 compile testCompile
讀取指定位置的文件,并輸出文件內(nèi)容單詞統(tǒng)計(jì)結(jié)果。
@RestController public class WordWeb implements Serializable { @GetMapping("/word/web") public String getWeb (){ // 1、創(chuàng)建Spark的配置對(duì)象 SparkConf sparkConf = new SparkConf().setAppName("LocalCount") .setMaster("local[*]"); // 2、創(chuàng)建SparkContext對(duì)象 JavaSparkContext sc = new JavaSparkContext(sparkConf); sc.setLogLevel("WARN"); // 3、讀取測(cè)試文件 JavaRDD lineRdd = sc.textFile("/var/spark/test/word.txt"); // 4、行內(nèi)容進(jìn)行切分 JavaRDD wordsRdd = lineRdd.flatMap(new FlatMapFunction() { @Override public Iterator call(Object obj) throws Exception { String value = String.valueOf(obj); String[] words = value.split(","); return Arrays.asList(words).iterator(); } }); // 5、切分的單詞進(jìn)行標(biāo)注 JavaPairRDD wordAndOneRdd = wordsRdd.mapToPair(new PairFunction() { @Override public Tuple2 call(Object obj) throws Exception { //將單詞進(jìn)行標(biāo)記: return new Tuple2(String.valueOf(obj), 1); } }); // 6、統(tǒng)計(jì)單詞出現(xiàn)次數(shù) JavaPairRDD wordAndCountRdd = wordAndOneRdd.reduceByKey(new Function2() { @Override public Object call(Object obj1, Object obj2) throws Exception { return Integer.parseInt(obj1.toString()) + Integer.parseInt(obj2.toString()); } }); // 7、排序 JavaPairRDD sortedRdd = wordAndCountRdd.sortByKey(); ListfinalResult = sortedRdd.collect(); // 8、結(jié)果打印 for (Tuple2 tuple2 : finalResult) { System.out.println(tuple2._1 + " ===> " + tuple2._2); } // 9、保存統(tǒng)計(jì)結(jié)果 sortedRdd.saveAsTextFile("/var/spark/output"); sc.stop(); return "success" ; } }
打包執(zhí)行結(jié)果:
查看文件輸出:
[root@hop01 output]# vim /var/spark/output/part-00000
GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent
到此,關(guān)于“Spark集群搭建步驟”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!