Spark集群搭建及基本使用


本文將詳細介紹Spark集群的搭建及Spark的運行原理、運行模式。

—▼—

Spark集群環境搭建

大數據處理 | Spark集群搭建及基本使用

如果已經理解了前文Hadoop集群環境的搭建,那麼學習Spark集群環境的搭建會容易很多,因為Hadoop和Spark不僅安裝包目錄結構非常相似,在配置方面也十分接近。均是在master節點上進行所有配置,然後打包複製到每個slave節點,然後啟動集群Spark即可,下面就來詳細介紹一下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高級技術總監多年精心創作一套完整課程體系【大數據、人工智能開發必看】,全面助力大數據開發

零基礎+入門+提升+項目=高薪

大數據處理 | Spark集群搭建及基本使用

「大數據零基礎入門」

大數據處理 | Spark集群搭建及基本使用

「大數據架構系統組件」

大數據處理 | Spark集群搭建及基本使用

「大數據全套系統工具安裝包」

Java必備工具

大數據處理 | Spark集群搭建及基本使用

大數據必備工具

大數據處理 | Spark集群搭建及基本使用

「大數據行業必備知資訊」

大數據處理 | Spark集群搭建及基本使用

「大數據精品實戰案例」

大數據處理 | Spark集群搭建及基本使用

「大數據就業指導方案」

大數據處理 | Spark集群搭建及基本使用

最後說一下的,也就是以上教程的獲取方式!

領取方法:

還是那個萬年不變的老規矩

1.評論文章,沒字數限制,一個字都行!

3.私信小編:“大數據開發教程”即可!

謝謝大家,祝大家學習愉快!(拿到教程後一定要好好學習,多練習哦!)


分享到:


相關文章: