Spark(一)【spark-3.0安裝和入門】


一.Windows安裝

1.安裝

將spark-3.0.0-bin-hadoop3.2.tgz解壓到非中文目錄

2.使用

bin/spark-shell.cmd : 提供一個交互式shell

val result: String = sc.textFile("input").flatMap(_.split(" ")).map((_, 1)).reduceByKey( _ + _).collect().mkString(",")

可以打開WEB UI:http://localhost:4040/(每一個spark-shell會初始化一個spark-context,是一個job,關閉窗口后,就沒有這個頁面了)

bin/spark-submit.cmd: 將程序打包后,提交運行!打包過程參考:idea開發spark程序

1)進入D:\SoftWare\spark\spark-3.0.0-bin-hadoop3.2\bin

2)將jar包上傳到bin目錄下,和測試的文件

3)在該目錄路徑輸入cmd打開cmd窗口

輸入以下命令測試

spark-submit --class com.spark.day01.WcCount 09sparkdemo-1.0-SNAPSHOT.jar 1.txt

二.Linux安裝

Local模式

一般可以使用local模式進行測試,學習

1.安裝

將spark-3.0.0-bin-hadoop3.2.tgz文件上傳到linux並解壓縮,放置在指定位置,改包名為spark-local

tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
cd /opt/module 
mv spark-3.0.0-bin-hadoop3.2.tgz spark-local
2.使用

進入 /opt/module/spark-local目錄下

spark-shell:命令行工具

執行以下命令

[hadoop@hadoop103 spark-local]$ bin/spark-shell
[hadoop@hadoop103 spark-local]$ bin/spark-shell 
20/07/29 18:54:55 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).
20/07/29 18:55:06 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
Spark context Web UI available at http://hadoop103:4041
Spark context available as 'sc' (master = local[*], app id = local-1596020106480).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.0.0
      /_/
         
Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_212)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

通過WEB UI 界面查看:http://hadoop103:4040/jobs/

執行代碼

scala> sc.textFile("/opt/module/spark_testdata/1.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String, Int)] = Array((hello,2), (world,2), (spark,1), (hi,2))  

spark-submit :提交應用

將寫好的spark打包上傳至linux,然后執行以下命令

[hadoop@hadoop103 spark-local]$bin/spark-submit --class com.spark.day01.WcCount /opt/module/spark_testdata/09sparkdemo-1.0-SNAPSHOT.jar /opt/module/spark_testdata/1.txt
bin/spark-submit \               --提交應用
--class com.spark.day01.WcCount \ --主類名字
/opt/module/spark_testdata/09sparkdemo-1.0-SNAPSHOT.jar \ --應用類所在的jar包
/opt/module/spark_testdata/1.txt --程序的入口參數

yarn模式

前提,環境中已經安裝好hadoop

spark只是類似一個客戶端(選擇任意一台可以連接上YARN的機器安裝即可),YARN是服務端!

1.安裝

將spark-3.0.0-bin-hadoop3.2.tgz文件上傳到linux並解壓縮,放置在指定位置,改包名為spark-yarn

tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
cd /opt/module 
mv spark-examples_2.12-3.0.0 spark-yarn

配置

①修改hadoop的/hadoop/etc/hadoop/yarn-site.xml配置文件,然后分發

<!--是否啟動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
</property>

<!--是否啟動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>
<!--允許第三方程序,例如spark將Job的日志,提交給Hadoop的歷史服務 -->
<property>
     <name>yarn.log.server.url</name>
     <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

②修改conf/spark-env.sh,添加JAVA_HOME和YARN_CONF_DIR配置

改名 : mv spark-env.sh.template spark-env.sh

YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
#環境變量中有可以不配
export JAVA_HOME=/opt/module/jdk1.8.0_144 
2.使用

① 啟動HDFS和yarn集群

jps驗證下

[hadoop@hadoop103 spark-local]$ myjps 
================  hadoop102 JPS  =====================
1809 NameNode
2434 Jps
1939 DataNode
2281 NodeManager
================  hadoop103 JPS  =====================
2867 NodeManager
2552 DataNode
2744 ResourceManager
3263 Jps
================  hadoop104 JPS  =====================
1587 DataNode
1797 NodeManager
1676 SecondaryNameNode
1951 Jps

web界面驗證下:

HDFS:http://hadoop102:9870/

YARN:http://hadoop103:8088/

② 提交應用

官方案例

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

自定義的WordCount程序

bin/spark-submit \
--class com.spark.day01.WcCount \
--master yarn \
--deploy-mode cluster \
/opt/module/spark_testdata/09sparkdemo-1.0-SNAPSHOT.jar \
hdfs://hadoop102:8020/input	

注意

​ 讀取的文件最好放在hdfs路徑,注意端口號別寫錯,core-site.xml中配置。

​ 放在本地路徑可能出現文件找不到的異常。

3.spark的歷史服務器集成yarn

① 修改spark-defaults.conf.template文件名為spark-defaults.conf

spark.eventLog.enabled           true
#HDFS的節點和端口和目錄
spark.eventLog.dir               hdfs://hadoop102:8020/spark-logs

#spark的歷史服務器,在spark所在節點,端口18080
spark.yarn.historyServer.address=hadoop03:18080
spark.history.ui.port=18080

注意:HDFS上的目錄需要提前存在。

② 修改spark-env.sh文件,配置日志存儲路徑

#spark的歷史服務器
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/spark-logs 
-Dspark.history.retainedApplications=30"

③ 啟動spark的歷史服務器

sbin/start-history-server.sh

④ 提交應用程序

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

⑤ 觀察web界面

yarn:http://hadoop103:8088/

spark的歷史服務器

hadoop的歷史服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM