spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用
點(diǎn)擊藍(lán)字關(guān)注我
前面用了一篇文章詳細(xì)的介紹了集群HDFS文件系統(tǒng)的搭建,HDFS文件系統(tǒng)只是一個(gè)用于存儲(chǔ)數(shù)據(jù)的系統(tǒng),它主要是用來服務(wù)于大數(shù)據(jù)計(jì)算框架,例如MapReduce、Spark,本文就接著上一篇文章來詳細(xì)介紹一下Spark集群的搭建及Spark的運(yùn)行原理、運(yùn)行模式。
—▼—
Spark集群環(huán)境搭建
如果已經(jīng)理解了前文Hadoop集群環(huán)境的搭建,那么學(xué)習(xí)Spark集群環(huán)境的搭建會(huì)容易很多,因?yàn)镠adoop和Spark不僅安裝包目錄結(jié)構(gòu)非常相似,在配置方面也十分接近。均是在master節(jié)點(diǎn)上進(jìn)行所有配置,然后打包復(fù)制到每個(gè)slave節(jié)點(diǎn),然后啟動(dòng)集群Spark即可,下面就來詳細(xì)介紹一下Spark集群環(huán)境的搭建。
下載安裝
進(jìn)入Spark的下載目錄,
https://spark.apache.org/downloads.html
可以看到Spark分多個(gè)版本,有基于Hadoop構(gòu)建好的,有沒基于Hadoop構(gòu)建的,有基于Hadoop2.6之前版本構(gòu)建的,也有基于Hadoop2.7以后版本構(gòu)建的,由于前面講解Hadoop集群環(huán)境搭建時(shí)采用的是Hadoop 3.2.1,因此,而且本文需要使用HDFS依賴Hadoop,因此需要下載Pre-built for Apache Hadoop 2.7 and later,
把spark-2.4.4-bin-hadoop2.7.tgz文件下載到home路徑下,然后解壓到指定目錄,
$?tar?-zxvf?~/spark-2.4.4-bin-hadoop2.7.tgz?-C?/usr/local/
然后進(jìn)入目錄并像Hadoop那樣,修改Spark目錄的擁有者,
$?cd?/usr/local$?sudo?mv?./spark-2.4.4-bin-hadoop2.7?./spark$?sudo?chowm?-R?user_name?./spark
配置環(huán)境變量
修改bashrc,配置環(huán)境變量,把Spark的bin和sbin路徑加入到環(huán)境變量,
$?vim?~/.bashrcexport?SPARK_HOME=/usr/local/sparkexport?PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinexport?PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATHexport?PYSPARK_PYTHON=python3
Master節(jié)點(diǎn)配置
進(jìn)入Spark目錄,修改spark-env.sh文件,
$?cd?/usr/local/spark$?vim?./conf/spark-env.sh
在spark-env.sh中添加下面內(nèi)容,
export?SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop?classpath)export?HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopexport?SPARK_MASTER_IP=10.110.113.132
SPARK_MASTER_IP指定的是master節(jié)點(diǎn)的IP,后面啟動(dòng)集群Spark時(shí)slave節(jié)點(diǎn)會(huì)注冊(cè)到SPARK_MASTER_IP,如果這一項(xiàng)不配置,Spark集群則沒有可使用資源,
修改slaves文件
配置完master節(jié)點(diǎn)信息之后需要配置slave節(jié)點(diǎn)信息,slave節(jié)點(diǎn)的信息配置在slaves文件里,由于Spark目錄下沒有這個(gè)文件,因此需要首先從slaves.template拷貝一下,
$?cd?/usr/local/spark/$?cp?./conf/slaves.template?./conf/slaves
然后添加如下內(nèi)容,
slave0slave0slave1
需要注意的是,slaves文件里配置的是運(yùn)行作業(yè)任務(wù)的節(jié)點(diǎn)(worker),這樣的話master的節(jié)點(diǎn)只作為控制節(jié)點(diǎn),而不作為工作節(jié)點(diǎn),如果需要把master節(jié)點(diǎn)的資源也充分利用起來,需要把master節(jié)點(diǎn)也加入到slaves文件中。
slave節(jié)點(diǎn)配置
首先在master節(jié)點(diǎn)上把配制好的目錄進(jìn)行打包,拷貝到每個(gè)slave節(jié)點(diǎn)上,
$?cd?/usr/local$?tar?-zcf?~/spar.tar.gz?./spark$?scp?~/spark/tar.gz?slave0:~/$?scp?~/spark/tar.gz?slave1:~/$?scp?~/spark/tar.gz?slave2:~/
然后在每個(gè)slave節(jié)點(diǎn)上執(zhí)行下方命令,把文件解壓到相應(yīng)路徑下,
$?sudo?rm?-rf?/usr/local/spark$?sudo?tar?-zxvf?~/spark.tar.gz?-C?/usr/local$?sudo?chown?-R?user_name?/usr/local/spark
這樣就完成了slave節(jié)點(diǎn)的配置。
啟動(dòng)Spark集群
如果要使用HDFS的話,在啟動(dòng)Spark集群前需要先啟動(dòng)Hadoop集群,
$?cd?/usr/local/hadoop/$?./sbin/start-all.sh
然后進(jìn)入Spark目錄,啟動(dòng)Spark集群,
$?cd?/usr/local/spark$?./sbin/start-all.sh
需要說明一下,前面配置Hadoop集群是提到,需要配置ssh免密登陸,對(duì)于Spark也是同樣的道理,如果不配置ssh免密登陸的話,執(zhí)行./sbin/start-all.sh會(huì)提示輸入密碼。
除了使用./sbin/start-all.sh啟動(dòng)Spark集群外,還可以分開啟動(dòng),先啟動(dòng)master節(jié)點(diǎn),然后啟動(dòng)slave節(jié)點(diǎn),
$?./sbin/start-master.sh$?./sbin/start-slaves.sh
如果前面沒有完成Master節(jié)點(diǎn)配置指定master節(jié)點(diǎn)IP,那么執(zhí)行./sbin/start-slaves.sh時(shí)則無法注冊(cè)master節(jié)點(diǎn)的IP,這樣集群計(jì)算資源則無法使用。除了配置spark-env.sh指定master節(jié)點(diǎn)IP外,還可以通過下面方式指定注冊(cè)的master節(jié)點(diǎn)IP,
$?./sbin/start-slave.sh?10.110.113.132
然后分別在master節(jié)點(diǎn)和slave節(jié)點(diǎn)執(zhí)行下面命令會(huì)看到分別多出一個(gè)Master進(jìn)程和Worker進(jìn)程。
Spark基本使用
運(yùn)行原理
如果使用過tensorflow的話,應(yīng)該對(duì)Spark的使用很容易理解,Spark的計(jì)算過程和tensorflow有相似之處。
回憶一下,我們?cè)谑褂胻ensorflow時(shí)需要首先構(gòu)造一個(gè)計(jì)算圖,然后實(shí)例化一個(gè)session,然后用session.run來啟動(dòng)圖運(yùn)算。
其實(shí)Spark也是這樣,RDD(彈性分布式數(shù)據(jù)集)是Spark中最重要的概念之一,它提供了一個(gè)共享內(nèi)存模型。Saprk的執(zhí)行過程中主要包括兩個(gè)動(dòng)作:轉(zhuǎn)換與行動(dòng)。其中轉(zhuǎn)換操作就如同tensorflow中的構(gòu)造計(jì)算圖的過程,在這個(gè)過程中Spark構(gòu)造一個(gè)有向無環(huán)圖(DAG),但是不進(jìn)行運(yùn)算,輸入為RDD輸出則是一個(gè)不同的RDD,當(dāng)執(zhí)行行動(dòng)操作時(shí)就如同tensorflow中的session.run,開始執(zhí)行運(yùn)算。
Spark中有很多轉(zhuǎn)換操作,例如,
groupByKey
reduceByKey
sortByKey
map
filter
join
……
行動(dòng)操作包括,
count
collect
first
foreach
reduce
take
……
運(yùn)行模式
Spark中通過master url來執(zhí)行Spark的運(yùn)行模式,Spark的運(yùn)行模式包括本地運(yùn)行、集群運(yùn)行、yarn集群等,關(guān)于Spark master url的指定不同運(yùn)行模式的含義如下,
| local | 使用1個(gè)線程本地化運(yùn)行 |
| local[K] | 使用K個(gè)線程本地化運(yùn)行 |
| local[*] | 使用邏輯CPU個(gè)數(shù)數(shù)量的線程來本地化運(yùn)行 |
| spark://HOST:PORT | 指定集群模式運(yùn)行Spark |
| yarn-cluster | 集群模式連接YARN集群 |
| yarn-client | 客戶端模式連接YARN集群 |
| mesos://HOST:PORT | 連接到指定的Mesos集群 |
示例
下面就以一個(gè)簡(jiǎn)單的示例把前面Hadoop和Spark串聯(lián)在一起,講解一下HDFS+Spark的使用方法。上傳數(shù)據(jù)到HDFS新建一個(gè)hello_world.txt的本地文件,并在文件中添加3行hello world,然后上傳至HDFS,$?cd?/usr/local/hadoop/$?./bin/hdfs?dfs?-mkdir?-p?/usr/hadoop$?touch?hello_world.txt$?echo?-e?"hello?world?\nhello?world?\nhello?world"?>>?hello_world.txt$?./bin/hdfs?dfs?-put?./hello_world.txt?/usr/hadoop編寫Spark程序新建一個(gè)spark.py的Python文件,$?vim?spark.py添加如下內(nèi)容,from?pyspark?import?SparkConffrom?pyspark?import?SparkContextconf?=?SparkConf().setAppName("FirstProject").setMaster("local[*]")sc?=?SparkContext.getOrCreate(conf)rdd?=?sc.textFile("hdfs:///master:9000/usr/hadoop/hello_world.txt")rdd.map(lambda?line:?line).foreach(print)然后運(yùn)行程序,$?python?spark.pyhello?worldhello?worldhello?world以上就是Spark的集群配置過程和基本使用方法。▲
END
有趣的靈魂在等你長(zhǎng)按掃碼可關(guān)注?
相關(guān)文章效率工具 | 推薦一款提高Python編程效率的神器實(shí)用工具 | 推薦5款值得安裝的Windows工具學(xué)習(xí)資源 | 推薦2份Github熱門校招面試匯總資料文章好看就點(diǎn)這里總結(jié)
以上是生活随笔為你收集整理的spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真的要去美国吗?
- 下一篇: centos 6.5 yum java_