1小時入門Spark之RDD編程
?一,編程環境
以下為Mac系統上單機版Spark練習編程環境的配置方法。
注意:僅配置練習環境無需安裝Hadoop,無需安裝Scala。1,安裝Java8注意避免安裝其它版本的jdk,否則會有不兼容問題。
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2,下載spark並解壓http://spark.apache.org/downloads.html解壓到以下路徑:Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.73,配置spark環境vim ~/.bashrc插入下面兩條語句export SPARK_HOME=/Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
4,配置jupyter支持
若未有安裝jupyter可以下載Anaconda安裝之。使用toree可以安裝jupyter環境下的Apache Toree-Scala內核,以便在jupyter環境下運行Spark。pip install toree
jupyter toree install --spark_home=Users/yourname/ProgramFiles/spark-2.4.3-bin-hadoop2.7
二,運行Spark
Spark可以通過以下一些方式運行。
1,通過spark-shell進入Spark互動式環境,使用Scala語言。2,通過spark-submit提交Spark應用程序進行批處理。這種方式可以提交Scala或Java語言編寫的代碼編譯後生成的jar包,也可以直接提交Python腳本。3,通過pyspark進入pyspark互動式環境,使用Python語言。這種方式可以指定jupyter或者ipython為交互環境。4,通過zepplin notebook互動式執行。zepplin是jupyter notebook的apache對應產品。
5,安裝Apache Toree-Scala內核。可以在jupyter 中運行spark-shell。使用spark-shell運行時,還可以添加兩個常用的兩個參數。
一個是master指定使用何種分布類型。第二個是jars指定依賴的jar包。#local本地模式運行,默認使用4個邏輯CPU內核
spark-shell
#local本地模式運行,使用全部內核,添加 code.jar到classpath
spark-shell --master local[*] --jars code.jar
#local本地模式運行,使用4個內核
spark-shell --master local[4]
#standalone模式連接集群,指定url和埠號
spark-shell --master spark://master:7077
#客戶端模式連接YARN集群,Driver運行在本地,方便查看日誌,調試時推薦使用。
spark-shell --master yarn-client
#集群模式連接YARN集群,Driver運行在集群,本地機器計算和通信壓力小,批量任務時推薦使用。
spark-shell --master yarn-cluster
#提交scala寫的任務
./bin/spark-submit --class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode cluster
--driver-memory 4g
--executor-memory 2g
--executor-cores 1
--queue thequeue
examples/jars/spark-examples*.jar 10
#提交python寫的任務
spark-submit --master yarn
--executor-memory 6G
--driver-memory 6G
--deploy-mode cluster
--num-executors 600
--conf spark.yarn.maxAppAttempts=1
--executor-cores 1
--conf spark.default.parallelism=2000
--conf spark.task.maxFailures=10
--conf spark.stage.maxConsecutiveAttempts=10
test.py
三,創建RDD
創建RDD的基本方式有兩種,第一種是使用textFile載入本地或者集群文件系統中的數據。第二種是使用parallelize方法將Driver中的數據結構並行化成RDD。
1,textFile