本文將詳細介紹Spark集群的搭建及Spark的運行原理、運行模式。
—▼—
Spark集群環境搭建
如果已經理解了前文Hadoop集群環境的搭建,那麼學習Spark集群環境的搭建會容易很多,因為Hadoop和Spark不僅安裝包目錄結構非常相似,在配置方面也十分接近。均是在master節點上進行所有配置,然後打包複製到每個slave節點,然後啟動集群Spark即可,下面就來詳細介紹一下Spark集群環境的搭建。
下載安裝
進入Spark的下載目錄,
https://spark.apache.org/downloads.html
可以看到Spark分多個版本,有基於Hadoop構建好的,有沒基於Hadoop構建的,有基於Hadoop2.6之前版本構建的,也有基於Hadoop2.7以後版本構建的,由於前面講解Hadoop集群環境搭建時採用的是Hadoop 3.2.1,因此,而且本文需要使用HDFS依賴Hadoop,因此需要下載Pre-built for Apache Hadoop 2.7 and later,
把spark-2.4.4-bin-hadoop2.7.tgz文件下載到home路徑下,然後解壓到指定目錄,
<code>$tar-zxvf~/spark-2.4.4-bin-hadoop2.7.tgz-C/usr/local//<code>
然後進入目錄並像Hadoop那樣,修改Spark目錄的擁有者,
<code>$cd/usr/local$sudomv./spark-2.4.4-bin-hadoop2.7./spark$sudochowm-Ruser_name./spark/<code>
配置環境變量
修改bashrc,配置環境變量,把Spark的bin和sbin路徑加入到環境變量,
<code>$vim~/.bashrcexportSPARK_HOME=/usr/local/sparkexportPATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinexportPYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATHexportPYSPARK_PYTHON=python3/<code>
Master節點配置
進入Spark目錄,修改spark-env.sh文件,
<code>$cd/usr/local/spark$vim./conf/spark-env.sh/<code>
在spark-env.sh中添加下面內容,
<code>exportSPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoopclasspath)exportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopexportSPARK_MASTER_IP=10.110.113.132/<code>
SPARK_MASTER_IP指定的是master節點的IP,後面啟動集群Spark時slave節點會註冊到SPARK_MASTER_IP,如果這一項不配置,Spark集群則沒有可使用資源,
修改slaves文件
配置完master節點信息之後需要配置slave節點信息,slave節點的信息配置在slaves文件裡,由於Spark目錄下沒有這個文件,因此需要首先從slaves.template拷貝一下,
<code>$cd/usr/local/spark/$cp./conf/slaves.template./conf/slaves/<code>
然後添加如下內容,
<code>slave0slave0slave1/<code>
需要注意的是,slaves文件裡配置的是運行作業任務的節點(worker),這樣的話master的節點只作為控制節點,而不作為工作節點,如果需要把master節點的資源也充分利用起來,需要把master節點也加入到slaves文件中。
slave節點配置
首先在master節點上把配製好的目錄進行打包,拷貝到每個slave節點上,
<code>$cd/usr/local$tar-zcf~/spar.tar.gz./spark$scp~/spark/tar.gzslave0:~/$scp~/spark/tar.gzslave1:~/$scp~/spark/tar.gzslave2:~//<code>
然後在每個slave節點上執行下方命令,把文件解壓到相應路徑下,
<code>$sudorm-rf/usr/local/spark$sudotar-zxvf~/spark.tar.gz-C/usr/local$sudochown-Ruser_name/usr/local/spark/<code>
這樣就完成了slave節點的配置。
啟動Spark集群
如果要使用HDFS的話,在啟動Spark集群前需要先啟動Hadoop集群,
<code>$cd/usr/local/hadoop/$./sbin/start-all.sh/<code>
然後進入Spark目錄,啟動Spark集群,
<code>$cd/usr/local/spark$./sbin/start-all.sh/<code>
需要說明一下,前面配置Hadoop集群是提到,需要配置ssh免密登陸,對於Spark也是同樣的道理,如果不配置ssh免密登陸的話,執行./sbin/start-all.sh會提示輸入密碼。
除了使用./sbin/start-all.sh啟動Spark集群外,還可以分開啟動,先啟動master節點,然後啟動slave節點,
<code>$./sbin/start-master.sh$./sbin/start-slaves.sh/<code>
如果前面沒有完成Master節點配置指定master節點IP,那麼執行./sbin/start-slaves.sh時則無法註冊master節點的IP,這樣集群計算資源則無法使用。除了配置spark-env.sh指定master節點IP外,還可以通過下面方式指定註冊的master節點IP,
<code>$./sbin/start-slave.sh10.110.113.132/<code>
然後分別在master節點和slave節點執行下面命令會看到分別多出一個Master進程和Worker進程。
Spark基本使用
運行原理
如果使用過tensorflow的話,應該對Spark的使用很容易理解,Spark的計算過程和tensorflow有相似之處。
回憶一下,我們在使用tensorflow時需要首先構造一個計算圖,然後實例化一個session,然後用session.run來啟動圖運算。
其實Spark也是這樣,RDD(彈性分佈式數據集)是Spark中最重要的概念之一,它提供了一個共享內存模型。Saprk的執行過程中主要包括兩個動作:轉換與行動。其中轉換操作就如同tensorflow中的構造計算圖的過程,在這個過程中Spark構造一個有向無環圖(DAG),但是不進行運算,輸入為RDD輸出則是一個不同的RDD,當執行行動操作時就如同tensorflow中的session.run,開始執行運算。
Spark中有很多轉換操作,例如,
- groupByKey
- reduceByKey
- sortByKey
- map
- filter
- join
- ……
行動操作包括,
- count
- collect
- first
- foreach
- reduce
- take
- ……
運行模式
Spark中通過master url來執行Spark的運行模式,Spark的運行模式包括本地運行、集群運行、yarn集群等,關於Spark master url的指定不同運行模式的含義如下,
URL值運行模式local使用1個線程本地化運行local[K]使用K個線程本地化運行local[*]使用邏輯CPU個數數量的線程來本地化運行spark://HOST:PORT指定集群模式運行Sparkyarn-cluster集群模式連接YARN集群yarn-client客戶端模式連接YARN集群mesos://HOST:PORT連接到指定的Mesos集群
示例
下面就以一個簡單的示例把前面Hadoop和Spark串聯在一起,講解一下HDFS+Spark的使用方法。
上傳數據到HDFS
新建一個hello_world.txt的本地文件,並在文件中添加3行hello world,然後上傳至HDFS,
<code>$cd/usr/local/hadoop/$./bin/hdfsdfs-mkdir-p/usr/hadoop$touchhello_world.txt$echo-e"helloworld\\nhelloworld\\nhelloworld">>hello_world.txt$./bin/hdfsdfs-put./hello_world.txt/usr/hadoop/<code>
編寫Spark程序
新建一個spark.py的Python文件,
<code>$vimspark.py/<code>
添加如下內容,
<code>frompysparkimportSparkConffrompysparkimportSparkContextconf=SparkConf().setAppName("FirstProject").setMaster("local[*]")sc=SparkContext.getOrCreate(conf)rdd=sc.textFile("hdfs:///master:9000/usr/hadoop/hello_world.txt")rdd.map(lambdaline:line).foreach(print)/<code>
然後運行程序,
<code>$pythonspark.pyhelloworldhelloworldhelloworld/<code>
以上就是Spark的集群配置過程和基本使用方法。
大數據開發高薪必備全套資源【免費獲取】
Oracle高級技術總監多年精心創作一套完整課程體系【大數據、人工智能開發必看】,全面助力大數據開發
零基礎+入門+提升+項目=高薪!「大數據零基礎入門」
「大數據架構系統組件」
「大數據全套系統工具安裝包」
Java必備工具
大數據必備工具
「大數據行業必備知資訊」
「大數據精品實戰案例」
「大數據就業指導方案」
最後說一下的,也就是以上教程的獲取方式!
領取方法:
還是那個萬年不變的老規矩
1.評論文章,沒字數限制,一個字都行!
3.私信小編:“大數據開發教程”即可!
謝謝大家,祝大家學習愉快!(拿到教程後一定要好好學習,多練習哦!)
閱讀更多 微笑數據工程師 的文章