spark分佈式大數據計算7一spark和pyspark的安裝和啓動

本文參考自:https://blog.csdn.net/ouyangyanlan/article/details/52355350

原文中有Hadoop相關內容,我這邊沒有使用相關功能,於是忽略Hadoop的相關安裝和配置操作。

前面我們已經學習了spark的基礎知識了,那我們就來實際操練一下。我們的數據量並不大,所以本文搭建的是一個單機版的spark。服務端和客戶端都是在同一個機器上。

首先,spark分爲

  • 服務端
  • 客戶端。

此處我們使用Python客戶端(spark支持Scala、Java和Python這3種客戶端)。

客戶端比較簡單,安裝對應的工具包,導入項目即可。
服務端比較複雜,需要以下3個:

  • Java8環境
  • Scala環境
  • spark

一、spark服務端安裝

1.1 安裝Java8

安裝Java環境,參見我的另一篇博客:https://blog.csdn.net/gaitiangai/article/details/103009888

1.2 安裝Scala

這個比較簡單,下載、解壓,配置環境變量即可。

1.2.1 Scala下載

進入Scala官網:https://www.scala-lang.org/download/
在這裏插入圖片描述
拉到底,點擊下載我圈中的這個,然後移動到你的Linux系統中。

1.2.2 Scala安裝配置

解壓Scala

tar -zxf 你的tgz壓縮包名稱

配置環境變量(我是解壓到/usr/local/share/scala目錄下的)

vim /etc/profile
#在文件的末尾加入:
export PATH="$PATH:/usr/local/share/scala/bin"
#此處地址需要修改爲你的Scala文件地址

輸入 :wq! 保存退出。運行配置文件使之生效 :

source /etc/profile

測試安裝結果:

[root@localhost ~]# scala
Welcome to Scala 2.13.0 (OpenJDK 64-Bit Server VM, Java 1.8.0_171).
Type in expressions for evaluation. Or try :help.

scala> 

命令行輸入Scala,輸出入頁面所示內容則安裝成功,反之失敗。

1.3 安裝spark

1.3.1下載spark

進入官方下載網站:http://spark.apache.org/downloads.html
在這裏插入圖片描述
第 1 個選項選擇你想要安裝的spark版本,第 2 個選項需要和你的Hadoop版本對應(我們不使用Hadoop,所以我沒有安裝,此處就隨便選了),然後點擊第 3 個選項裏面的下載鏈接,進入如下頁面:
在這裏插入圖片描述
點擊我紅色圈中的鏈接,開始下載。

1.3.2 安裝配置spark

解壓spark文件即可。無需配置。

tar -zxf  你的spark壓縮文件名字

1.4 啓動spark服務端

spark有4中啓動模式,各模式介紹如下:

方式1:本地模式

Spark單機運行,一般用於開發測試。

方式2:Standalone模式

構建一個由Master+Slave構成的Spark集羣,Spark運行在集羣中。

方式3:Spark on Yarn模式

Spark客戶端直接連接Yarn。不需要額外構建Spark集羣。

方式4:Spark on Mesos模式

Spark客戶端直接連接Mesos。不需要額外構建Spark集羣。

啓動方式: spark-shell.sh(Scala)
spark-shell通過不同的參數控制採用何種模式進行。主要涉及master 參數:

--master MASTER_URL  
#  MASTER_URL  此參數指導spark的啓動模式,有以下取值可供選擇:
#      local.
#      spark://host:port, 
#      yarn, 
#      mesos://host:port, 

eg: 本地模式啓動:

./spark-shell --master local
./spark-shell --master local[2]  # 本地運行,兩個worker線程,理想狀態下爲本地CPU core數

eg: Standalone模式啓動:

./spark-shell --master spark://192.168.1.10:7077

OK,都安裝好了,啓動方式也都瞭解了,讓我們來試一下, 好激動
首先我們切換到spark的bin目錄,

[root@localhost bin]# ls
beeline               pyspark           spark-class.cmd   spark-sql
beeline.cmd           pyspark2.cmd      sparkR            spark-sql2.cmd
docker-image-tool.sh  pyspark.cmd       sparkR2.cmd       spark-sql.cmd
find-spark-home       run-example       sparkR.cmd        spark-submit
find-spark-home.cmd   run-example.cmd   spark-shell       spark-submit2.cmd
load-spark-env.cmd    spark-class       spark-shell2.cmd  spark-submit.cmd
load-spark-env.sh     spark-class2.cmd  spark-shell.cmd

[root@localhost bin]# ./spark-shell --master local
Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.apache.spark.SparkConf$.<init>(SparkConf.scala:716)
        at org.apache.spark.SparkConf$.<clinit>(SparkConf.scala)
        at org.apache.spark.SparkConf$$anonfun$getOption$1.apply(SparkConf.scala:389)
        at org.apache.spark.SparkConf$$anonfun$getOption$1.apply(SparkConf.scala:389)
        at scala.Option.orElse(Option.scala:289)
        at org.apache.spark.SparkConf.getOption(SparkConf.scala:389)
        at org.apache.spark.SparkConf.get(SparkConf.scala:251)
        at org.apache.spark.deploy.SparkHadoopUtil$.org$apache$spark$deploy$SparkHadoopUtil$$appendS3AndSparkHadoopConfigurations(SparkHadoopUtil.scala:463)
        at org.apache.spark.deploy.SparkHadoopUtil$.newConfiguration(SparkHadoopUtil.scala:436)
        at org.apache.spark.deploy.SparkSubmit$$anonfun$2.apply(SparkSubmit.scala:323)
        at org.apache.spark.deploy.SparkSubmit$$anonfun$2.apply(SparkSubmit.scala:323)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:323)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:774)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain: Name or service not known
        at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
        at org.apache.spark.util.Utils$.findLocalInetAddress(Utils.scala:946)
        at org.apache.spark.util.Utils$.org$apache$spark$util$Utils$$localIpAddress$lzycompute(Utils.scala:939)
        at org.apache.spark.util.Utils$.org$apache$spark$util$Utils$$localIpAddress(Utils.scala:939)
        at org.apache.spark.util.Utils$$anonfun$localCanonicalHostName$1.apply(Utils.scala:996)
        at org.apache.spark.util.Utils$$anonfun$localCanonicalHostName$1.apply(Utils.scala:996)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.util.Utils$.localCanonicalHostName(Utils.scala:996)
        at org.apache.spark.internal.config.package$.<init>(package.scala:302)
        at org.apache.spark.internal.config.package$.<clinit>(package.scala)
        ... 20 more
Caused by: java.net.UnknownHostException: localhost.localdomain: Name or service not known
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
        at java.net.InetAddress.getLocalHost(InetAddress.java:1500)
        ... 29 more

這麼多錯,慌的一批。沒關係,百度一下我就知道。
錯誤信息這麼多,但是仔細看就是這個:

Caused by: java.net.UnknownHostException: localhost.localdomain: Name or service not known

就是說localhost.localdomain這個域名解析失敗。應爲我們是在本機啓動,這就是127.0.01啊,解析失敗,咋辦呢?既然它解析不出來,那我們就去給他寫上:

vim /etc/hosts
添加這麼一行:
127.0.0.1 localhost.localdomain localhost

然後:wq!保存退出。
再次啓動就正常啦。輸出如下,開心!

(py3.7) [root@localhost bin]# ./spark-shell --master local
19/11/20 14:21:21 WARN Utils: Your hostname, localhost.localdomain resolves to a loopback address: 127.0.0.1; using 172.17.20.145 instead (on interface eth0)
19/11/20 14:21:21 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
19/11/20 14:21:23 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://172.17.20.145:4040
Spark context available as 'sc' (master = local, app id = local-1574230900574).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.4
      /_/
         
Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

二、安裝spark客戶端

2.1 首先安裝Python的spark工具包

pip install  pyspark 

在這裏插入圖片描述
我這裏沒有輸入需要安裝的版本,默認安裝的是最新版本2.4.4,
你也可以寫入你具體想要安裝的版本:

pip install  pyspark==2.4.4    #2.4.4就是你想要安裝的具體版本號

200多兆呢,耐心等待吧,你也可以去泡一杯茶喝起來。

2.2、測試是否安裝成功

編寫test_spark.py 文件如下:

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local").setAppName("My App")
sc = SparkContext(conf = conf)
print("1111111111111111")
firstRDD = sc.parallelize([('sfs',27),('hk',26),('czp',25),('hdc',28),('wml',27)])
print("222222222")
t=firstRDD.take(3)
print(t)

執行該代碼,觀察輸出結果。正常輸出信息則環境OK,反之則環境不正常,需要排查。
我的執行結果:

(py3.7) [root@localhost 1119]# python test_spark.py
19/11/20 14:40:00 WARN Utils: Your hostname, localhost.localdomain resolves to a loopback address: 127.0.0.1; using 172.17.20.145 instead (on interface eth0)
19/11/20 14:40:00 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
19/11/20 14:40:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark""s default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
19/11/20 14:40:04 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
1111111111111111
222222222
[Stage 0:>                                                          ([('sfs', 27), ('hk', 26), ('czp', 25)]

OK, 一切正常。

注意:
但是很多人可能不知道,pyspark裏面也有一個spark!你可以切換到pyspark的安裝目錄下去看。默認Python使用的是pyspark裏面的spark,而不是剛剛我們安裝的spark。想要系統使用我們剛剛安裝的spark,需要將其配置在環境變量中:

vim /etc/profile
#在文件的末尾加入:
export SPARK_HOME="xxxx"
#此處xxx需要修改爲你的spark安裝目錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章